none
Distribucion de Base de Datos

    Pregunta

  • Buenos días a todo el grupo

    Sucede que tengo un servidor con Windows Server 2008 R2, el cual se me esta quedando sin espacio en los discos duros, en este servidor tengo instalado el SQL SERVER 2008 R2, tengo una BD que me la entregaron ya particionada pero desconozco como se maneja la distribución de tablas, alguien me puede dar una luz como identificar en que filegroup se encuentran las tablas, o como se administra esta parte.

    Nota: Entre mis ideas se encuentra reducir la BD pero desconozco los beneficios y/o consecuencias que esto puede conllevar.

    Saludos cordiales

    

    martes, 05 de junio de 2018 15:32

Todas las respuestas

  • Hola Carlos204:

    Puedes probar esto:

    SELECT o.[name] as objetoNombre, o.[type] as tipo, i.[name] as nombreId, i.[index_id], f.[name] 
    FROM sys.indexes i
    	INNER JOIN sys.filegroups f
    		ON i.data_space_id = f.data_space_id
    	INNER JOIN sys.all_objects o
    		ON i.[object_id] = o.[object_id]
    		
    	WHERE i.data_space_id = f.data_space_id
    			AND o.type = 'U' 
    Un saludo

    martes, 05 de junio de 2018 15:49
  • Buenas noches Javi.

    Gracias por responder a mi pregunta, le comento en verdad yo tengo 5 archivos con nombres logicos, estos archivos, cada uno se encuentra en un disco distinto y los cuales estan casi por llenar el espacio de los discos, lo que deseo saber es en que archivos se almacenas las tablas.

    Gracias de antemano

    Nota: Lastima que no pueda enviar imagenes, el foro no me lo permite.

    miércoles, 13 de junio de 2018 4:31
  • Hola.

    Si entiendo bien, ¿tienes un archivo MDF y cuatro NDF? Si es así, ¿esta distribución corresponde a algún esquema de particionamiento que se generó sobre la base de datos?

    Si la anterior respuesta es sí, por favor ejecuta este query para ver si podemos entender un poco más la situación:

    SELECT 
    	t.name as TableName
    	, ps.name as PartitionScheme
    	, pf.name as PartitionFunction
    	, p.partition_number
    	, p.rows
    	, case 
    		when pf.boundary_value_on_right=1 then 'RIGHT' 
    		else 'LEFT' 
    	  end [range_type]
    	, prv.value [boundary]
    FROM sys.tables t
        INNER JOIN sys.indexes i on t.object_id = i.object_id
        INNER JOIN sys.partition_schemes ps on i.data_space_id = ps.data_space_id
        INNER JOIN sys.partition_functions pf on ps.function_id = pf.function_id
        INNER JOIN sys.partitions p on i.object_id = p.object_id and i.index_id = p.index_id
        INNER JOIN sys.partition_range_values prv on pf.function_id = prv.function_id and p.partition_number = prv.boundary_id
    WHERE i.index_id < 2  
    ORDER BY p.partition_number

    Saludos,




    Guillermo Taylor F.
    MVP Data Platform & IT Pro
    Mi Blog





    miércoles, 13 de junio de 2018 11:42
  • Buenas tardes.

    He ejecutado el query y no tengo ningun registro.

    Archivos NDF no tengo ninguno, son 5 MDF.

    miércoles, 13 de junio de 2018 16:55
  • En principio las bases de datos estan formadas por 1 mdf y luego se pueden tener n ndf,s y uno o varios ldf

    5 mdf apuntan a 5 bases de datos diferentes.

    https://msdn.microsoft.com/es-es/library/ms189563(v=sql.120).aspx

    ¿Es posible, que no esten en producción, que haya sido rescates de la misma base de datos, pero que realmente no tengan operaciones actuales?

    Fijate en la fecha de windows, cuando fue la ultima vez que se modificaron todos.

    miércoles, 13 de junio de 2018 17:08
  • Hola de nuevo. Solo por aportar algo más

    SELECT s.name,
           f.filename,
           CASE f.groupid
               WHEN 1
               THEN 'DATOS'
               ELSE 'Log'
           END AS 'Tipo',
           (f.size * 8) / (1024.) AS 'TamañoEnMBs',
    (
        SELECT SUM((f.size * 8) / (1024.))
        FROM master..sysaltfiles f
        WHERE f.dbid = s.database_id
    ) AS TotalDataBase
    FROM sys.databases s,
         master..sysaltfiles f
    WHERE s.database_id = f.dbid
    ORDER BY f.size DESC; 
    
     

    esto te devolverá la ruta y nombre de los ficheros de cada base de datos.

    y luego puedes hacer

    select @@version

    Lo cual dará la edición y version de tu Sql server, para saber si puede o no puede definitivamente haber particiones.

    Saludos


    miércoles, 13 de junio de 2018 18:19
  • Hola Javi.

    Como no, es una base de datos en produccion, y es exactamente esto lo que quiero comprender, como esta distribuida la base de datos.

    Alguien sabe como subir imagenes, asi les comparto el escenario.

    miércoles, 13 de junio de 2018 18:40
  • El primer query me mostro esto

    Corresponsales_CNB   E:\MSSQL\DATA\AuditJournal_CNB.mdf
    Corresponsales_CNB   E:\MSSQL\DATA\corresponsales4_CNB.mdf
    Corresponsales_CNB   I:\mssql\data\corresponsales3_CNB.mdf
    Corresponsales_CNB   C:\Program Files\Microsoft SQL Server\MSSQL10_50.SVRCNBDBS\MSSQL\DATA\Corresponsales_CNB.mdf
    Corresponsales_CNB   H:\mssql\data\corresponsales2_CNB.mdf
    Corresponsales_CNB  G:\mssql\data\corresponsales5_CNB.mdf
    Corresponsales_CNB  F:\mssql\data\Corresponsales_CNB.ldf

    La version de mi SQL es

    Microsoft SQL Server 2008 R2 (SP3) - 10.50.6529.0 (X64)   Mar 19 2015 13:19:13   Copyright (c) Microsoft Corporation  Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor) 

    miércoles, 13 de junio de 2018 18:45
  • Hola Carlos204:

    Al menos que yo sepa, en la edicion 2008 R2 Standard no se puede particionar una tabla en distintos archivos. Ante lo cual, yo supongo que han creado las tablas (algunas de ellas), en archivos diferentes. De ahí que la consulta de Guillermo no te de ningún resultado, y la de archivos, que yo te he dado si te devuelva, puesto que son los archivos de la bbdd.

    También me supongo que han camibado las extensiones por defecto ndf que da el sistema para los archivos de datos secundarios por mdf.

    supongo que si te vas al explorador de objetos en las propiedades de la base de datos, verás una imágen como esta, pero con tus 5 archivos.

    Y en la siguiente pestaña de grupos de archivos, es probable que tengas diferentes grupos.

    Entonces puedes probar esto

    SELECT o.[name], o.[type], i.[name], i.[index_id], f.[name]
    FROM sys.indexes i
    INNER JOIN sys.filegroups f ON i.data_space_id = f.data_space_id
    INNER JOIN sys.all_objects o ON i.[object_id] = o.[object_id]
    WHERE i.data_space_id = 1--* New FileGroup*
    GO

    Se supone que te aportará información de los objetos por pertenencia al identificador de filegroup,

    Tendrás que ir variando el 1 por los consiguientes que tengas.

    https://www.mssqltips.com/sqlservertip/1112/filegroups-in-sql-server-2005/

    Haber si te ayuda

    jueves, 14 de junio de 2018 7:03
  • Buenos días Javi.

    Hoy si visualizo registros con el Query que me proporciono, la verdad quisiera enviarle algunas imágenes pero en el foro me dicen que no puedo, hasta que se autentique mi cuenta.

    Puedo enviar solamente una imagen a su correo personal?, luego nos volvemos acá para el conocimiento del grupo.

    Saludos.

    jueves, 14 de junio de 2018 15:14
  • Hola Carlos204:

    puedes enviarmela a apuntessql y luego arroba gmail.com. Si quieres yo la cuelgo en este foro. Sino la evalúo y comentamos.

    jueves, 14 de junio de 2018 15:44
  • No te he puesto el correo explicitamente, por aquello de que haya programitas leyendo la información pública de estos mensajes y me dinamiten este correo.
    jueves, 14 de junio de 2018 15:45
  • Muchas gracias, ya se lo envie, y no hay problema, puede compartirla para el grupo.

    Saludos

    jueves, 14 de junio de 2018 16:34
  • A la espera de que lleguen un poco mejor las imágenes.

    Copio el texto.

    De esta forma se visualizan los Files de la BD, 5 PRIMARY y un AuditJournal(no se que es eso)

    imagen pendiente

    Luego también se visualizan dos Filesgroup

    imagen pendiente

    Entonces no comprendo / desconozco porque existen solo dos Filegroups y 5 Files.

    El Query que me compartió me muestra que todas las tablas están en el Filegroup PRIMARY

    Imagen pendiente

    jueves, 14 de junio de 2018 18:23
  • Imagen de Filegroups

    imagen de Archivos que componen la bbdd

    imagen de donde estan los objetos de base de datos

    jueves, 14 de junio de 2018 19:46
  • Hola Carlos204:

    Si bien hay cosas que todavía no me parece a mi juicio, que encajen en tu escenario, dado que en Sql server 2008 standard no se hacían particiones, supongo que crearon las tablas directamente en cada archivo, y luego dispone de algún sistema de auditar, en ese último archivo, pero en realidad, te escribo esta linea, para que tengas en cuenta que, intentar con el Managment studio reducir tu base de datos, no le va a producir ningún mal. Puede ser que en cuatro días estes exactamente en el mismo punto, o que no sea capaz de ejecutarlo. Lo cual te dará un error y hasta aquí.

    Y como el sentido común siempre tiene que imperar, por lógica, antes de hacer nada, haz un backup completo.

    Eso si, ejecútalo fuera de horas de máxima actividad, pues los discos trabajan mucho.

    sábado, 16 de junio de 2018 7:50
  • Hola Carlos204:

    select si.name, sf.fileid, sf.name, sfg.groupid, sfg.groupname, sf.*
    from 
    sysindexes si inner join sysfiles sf on si.groupid = sf.groupid
    inner join sysfilegroups sfg on sf.groupid = sfg.groupid
    

    en la última columna tiene que ponerte el nombre de archivo.

    Un saludo

    miércoles, 20 de junio de 2018 6:53