Identificar que tablas contiene cada archivo de datos de una BD

11/07/2008 - 00:49 por Emerson | Informe spam
Hola A Todos:
Resulta que tengo una BD, que esta conformado por un archivo de dato
principal(.mdf) y 2 archivos de datos secundarios(.ndf) y sus respectivos
archivos .log, mi consulta es como puedo saber que tablas contiene cada
archivo de datos, o sea qeu tablas estan en el archivo .mdf, y que tablas
estan en los .ndf de dicha BD, para ellos poder organizarlos mejor ya que se
ha dejado de llevar dicho control, o en su defecto poder juntar todas las
tablas en un archivo de datos(el principal .mdf), me imagino que si esa
fuera mi intencion me dirian entonces, para que quiero saber que talbas
estan en cada ndf, me bastaria solo con redireccionar a todas las tablas al
archivo principal (mdf), en realidad me gustaria saber como puedo saber qeu
tablas estan en que archivo de datos(sean principal o secundarios) y como
podria cambiar de archivos de datos, asi al tomar uan decicion cualqueira
saber como poder hacerla.

*Uso SQL 2000 SP4, Win2003 Server.

P.D.: y si podrian postear la forma de hacerlo con SQL 2005 seria genial,
asi tenerlo presente para futuras migraciones.

Gracias de antemano a todos.

Preguntas similare

Leer las respuestas

#1 Maxi Accotto
11/07/2008 - 01:31 | Informe spam
Hola, una opcion es usar el procedimiento almacenado

sp_objectfilegroup y el id del objeto que internamente hace esto

if exists (select * from sysobjects
where id = @objid
and type in ('S ','U '))
begin
select Data_located_on_filegroup = s.groupname
from sysfilegroups s, sysindexes i
where i.id = @objid
and i.indid < 2
and i.groupid = s.groupid
end




Saludos
Maxi Accotto
Microsoft MVP en SQLServer
SQltotalconsulting
-

"Emerson" escribió en el mensaje de
noticias:
Hola A Todos:
Resulta que tengo una BD, que esta conformado por un archivo de dato
principal(.mdf) y 2 archivos de datos secundarios(.ndf) y sus respectivos
archivos .log, mi consulta es como puedo saber que tablas contiene cada
archivo de datos, o sea qeu tablas estan en el archivo .mdf, y que tablas
estan en los .ndf de dicha BD, para ellos poder organizarlos mejor ya que
se ha dejado de llevar dicho control, o en su defecto poder juntar todas
las tablas en un archivo de datos(el principal .mdf), me imagino que si
esa fuera mi intencion me dirian entonces, para que quiero saber que
talbas estan en cada ndf, me bastaria solo con redireccionar a todas las
tablas al archivo principal (mdf), en realidad me gustaria saber como
puedo saber qeu tablas estan en que archivo de datos(sean principal o
secundarios) y como podria cambiar de archivos de datos, asi al tomar uan
decicion cualqueira saber como poder hacerla.

*Uso SQL 2000 SP4, Win2003 Server.

P.D.: y si podrian postear la forma de hacerlo con SQL 2005 seria genial,
asi tenerlo presente para futuras migraciones.

Gracias de antemano a todos.

Respuesta Responder a este mensaje
#2 Alejandro Mesa
11/07/2008 - 15:23 | Informe spam
Emerson,

Pudieras tratar de buscar cuales tablas estan en cual grupo de archivos,
pues cuando una tabla o indice, es creada en un grupo, su data puede estar
distribuida entre los archivos que pertenecen al grupo.

Aca tienes un ejemplo.

select
t.[name] as [fg_name],
f.[name] as [file_name],
fg.[name] as [table_name]
from
sys.tables as t
inner join
sys.indexes as i
on t.[object_id] = i.[object_id]
inner join
sys.filegroups as fg
on i.data_space_id = fg.data_space_id
inner join
sys.database_files as f
on f.data_space_id = fg.data_space_id
where
i.index_id in (0, 1)
GO

AMB



AMB

"Emerson" wrote:

Hola A Todos:
Resulta que tengo una BD, que esta conformado por un archivo de dato
principal(.mdf) y 2 archivos de datos secundarios(.ndf) y sus respectivos
archivos .log, mi consulta es como puedo saber que tablas contiene cada
archivo de datos, o sea qeu tablas estan en el archivo .mdf, y que tablas
estan en los .ndf de dicha BD, para ellos poder organizarlos mejor ya que se
ha dejado de llevar dicho control, o en su defecto poder juntar todas las
tablas en un archivo de datos(el principal .mdf), me imagino que si esa
fuera mi intencion me dirian entonces, para que quiero saber que talbas
estan en cada ndf, me bastaria solo con redireccionar a todas las tablas al
archivo principal (mdf), en realidad me gustaria saber como puedo saber qeu
tablas estan en que archivo de datos(sean principal o secundarios) y como
podria cambiar de archivos de datos, asi al tomar uan decicion cualqueira
saber como poder hacerla.

*Uso SQL 2000 SP4, Win2003 Server.

P.D.: y si podrian postear la forma de hacerlo con SQL 2005 seria genial,
asi tenerlo presente para futuras migraciones.

Gracias de antemano a todos.



Respuesta Responder a este mensaje
#3 Emerson
11/07/2008 - 18:04 | Informe spam
Gracias por tu ayuda Maxi, voy a ver como me va con esa opcion

"Maxi Accotto" escribió en el mensaje
news:
Hola, una opcion es usar el procedimiento almacenado

sp_objectfilegroup y el id del objeto que internamente hace esto

if exists (select * from sysobjects
where id = @objid
and type in ('S ','U '))
begin
select Data_located_on_filegroup = s.groupname
from sysfilegroups s, sysindexes i
where i.id = @objid
and i.indid < 2
and i.groupid = s.groupid
end




Saludos
Maxi Accotto
Microsoft MVP en SQLServer
SQltotalconsulting
-

"Emerson" escribió en el mensaje de
noticias:
Hola A Todos:
Resulta que tengo una BD, que esta conformado por un archivo de dato
principal(.mdf) y 2 archivos de datos secundarios(.ndf) y sus respectivos
archivos .log, mi consulta es como puedo saber que tablas contiene cada
archivo de datos, o sea qeu tablas estan en el archivo .mdf, y que tablas
estan en los .ndf de dicha BD, para ellos poder organizarlos mejor ya que
se ha dejado de llevar dicho control, o en su defecto poder juntar todas
las tablas en un archivo de datos(el principal .mdf), me imagino que si
esa fuera mi intencion me dirian entonces, para que quiero saber que
talbas estan en cada ndf, me bastaria solo con redireccionar a todas las
tablas al archivo principal (mdf), en realidad me gustaria saber como
puedo saber qeu tablas estan en que archivo de datos(sean principal o
secundarios) y como podria cambiar de archivos de datos, asi al tomar uan
decicion cualqueira saber como poder hacerla.

*Uso SQL 2000 SP4, Win2003 Server.

P.D.: y si podrian postear la forma de hacerlo con SQL 2005 seria genial,
asi tenerlo presente para futuras migraciones.

Gracias de antemano a todos.

Respuesta Responder a este mensaje
#4 Emerson
11/07/2008 - 18:13 | Informe spam
Muchas Gracias Alejandro, pero no te entendi muy bien, me dices que cuando
creo una tabla o indice, es creada en un grupo, pero su data puede estar
distrubuida entre todos los archivos que pertenecen al grupo??? eso quiere
decir que:
Tengo una BD que se conforma asi: BD_data.MDF, BD_data1.NDF y BD_data2.NDF,
y sus respectivos .log, y cuando creo una tabla: TABLA1 y lo creo
direccionandolo en el archivo de dato principal(BD_data.MDF), cuanod
comienze a ingresar datos a dicha tabla, estos datos pueden estar en
dispersos en los 3 archivos de datos que tiene la BD??? independientemente
que lo haya creado en el archivo principal????

Emerson Q.


"Alejandro Mesa" escribió en el
mensaje news:
Emerson,

Pudieras tratar de buscar cuales tablas estan en cual grupo de archivos,
pues cuando una tabla o indice, es creada en un grupo, su data puede estar
distribuida entre los archivos que pertenecen al grupo.

Aca tienes un ejemplo.

select
t.[name] as [fg_name],
f.[name] as [file_name],
fg.[name] as [table_name]
from
sys.tables as t
inner join
sys.indexes as i
on t.[object_id] = i.[object_id]
inner join
sys.filegroups as fg
on i.data_space_id = fg.data_space_id
inner join
sys.database_files as f
on f.data_space_id = fg.data_space_id
where
i.index_id in (0, 1)
GO

AMB



AMB

"Emerson" wrote:

Hola A Todos:
Resulta que tengo una BD, que esta conformado por un archivo de dato
principal(.mdf) y 2 archivos de datos secundarios(.ndf) y sus respectivos
archivos .log, mi consulta es como puedo saber que tablas contiene cada
archivo de datos, o sea qeu tablas estan en el archivo .mdf, y que tablas
estan en los .ndf de dicha BD, para ellos poder organizarlos mejor ya que
se
ha dejado de llevar dicho control, o en su defecto poder juntar todas las
tablas en un archivo de datos(el principal .mdf), me imagino que si esa
fuera mi intencion me dirian entonces, para que quiero saber que talbas
estan en cada ndf, me bastaria solo con redireccionar a todas las tablas
al
archivo principal (mdf), en realidad me gustaria saber como puedo saber
qeu
tablas estan en que archivo de datos(sean principal o secundarios) y como
podria cambiar de archivos de datos, asi al tomar uan decicion cualqueira
saber como poder hacerla.

*Uso SQL 2000 SP4, Win2003 Server.

P.D.: y si podrian postear la forma de hacerlo con SQL 2005 seria genial,
asi tenerlo presente para futuras migraciones.

Gracias de antemano a todos.



Respuesta Responder a este mensaje
#5 Alejandro Mesa
11/07/2008 - 19:23 | Informe spam
Emerson,

Exactamente como lo has planteado. Solo quiero hacer una pequenia correccion
y es que cuando creamos una tabla o un indice, podemos especificar en cual
grupo ponerlo, no en cual archivo dentro de un grupo especifico.

CREATE TABLE (Transact-SQL)
http://msdn.microsoft.com/es-es/lib...74979.aspx

Archivos y grupos de archivos físicos de la base de datos
http://msdn.microsoft.com/es-es/lib...79316.aspx

Los archivos de una base de datos, pueden ponerse en discos fisicos
diferentes. La manera de hacer mas facil la administracion, es agrupandolos
para entonces trabajar directamente con el grupo cuando se hace un backup de
un grupo, o cuando se quiere restaurar un grupo en especifico. De esta forma,
la data de una tabla, es balanceada entre los archivos de el grupo, por lo
que si estos estan en diferentes discos fisicos, conllevara a que se puede
escribir y leer data de forma simultanea.

AMB


"Emerson" wrote:

Muchas Gracias Alejandro, pero no te entendi muy bien, me dices que cuando
creo una tabla o indice, es creada en un grupo, pero su data puede estar
distrubuida entre todos los archivos que pertenecen al grupo??? eso quiere
decir que:
Tengo una BD que se conforma asi: BD_data.MDF, BD_data1.NDF y BD_data2.NDF,
y sus respectivos .log, y cuando creo una tabla: TABLA1 y lo creo
direccionandolo en el archivo de dato principal(BD_data.MDF), cuanod
comienze a ingresar datos a dicha tabla, estos datos pueden estar en
dispersos en los 3 archivos de datos que tiene la BD??? independientemente
que lo haya creado en el archivo principal????

Emerson Q.


"Alejandro Mesa" escribió en el
mensaje news:
> Emerson,
>
> Pudieras tratar de buscar cuales tablas estan en cual grupo de archivos,
> pues cuando una tabla o indice, es creada en un grupo, su data puede estar
> distribuida entre los archivos que pertenecen al grupo.
>
> Aca tienes un ejemplo.
>
> select
> t.[name] as [fg_name],
> f.[name] as [file_name],
> fg.[name] as [table_name]
> from
> sys.tables as t
> inner join
> sys.indexes as i
> on t.[object_id] = i.[object_id]
> inner join
> sys.filegroups as fg
> on i.data_space_id = fg.data_space_id
> inner join
> sys.database_files as f
> on f.data_space_id = fg.data_space_id
> where
> i.index_id in (0, 1)
> GO
>
> AMB
>
>
>
> AMB
>
> "Emerson" wrote:
>
>> Hola A Todos:
>> Resulta que tengo una BD, que esta conformado por un archivo de dato
>> principal(.mdf) y 2 archivos de datos secundarios(.ndf) y sus respectivos
>> archivos .log, mi consulta es como puedo saber que tablas contiene cada
>> archivo de datos, o sea qeu tablas estan en el archivo .mdf, y que tablas
>> estan en los .ndf de dicha BD, para ellos poder organizarlos mejor ya que
>> se
>> ha dejado de llevar dicho control, o en su defecto poder juntar todas las
>> tablas en un archivo de datos(el principal .mdf), me imagino que si esa
>> fuera mi intencion me dirian entonces, para que quiero saber que talbas
>> estan en cada ndf, me bastaria solo con redireccionar a todas las tablas
>> al
>> archivo principal (mdf), en realidad me gustaria saber como puedo saber
>> qeu
>> tablas estan en que archivo de datos(sean principal o secundarios) y como
>> podria cambiar de archivos de datos, asi al tomar uan decicion cualqueira
>> saber como poder hacerla.
>>
>> *Uso SQL 2000 SP4, Win2003 Server.
>>
>> P.D.: y si podrian postear la forma de hacerlo con SQL 2005 seria genial,
>> asi tenerlo presente para futuras migraciones.
>>
>> Gracias de antemano a todos.
>>
>>
>>



Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida