Usuário com melhor resposta
Verificar tabelas que pertencem ao arquivo MDF

Pergunta
-
Pessoal,
Meu banco está dividido em 4 arquivos .MDF, e preciso excluir um dos arquivos MDF (que foi criado por últimimo), mas quando vou excluir, dá o erro que o arquivo não está vazio, ainda contém algumas tabelas no banco. Para excluir este arquivo preciso excluir as tabelas. Existe alguma maneira de eu saber quais tabelas estão alocadas neste MDF ?
Qual a melhor maneira de excluir este arquivo ?
Obrigado.
Respostas
-
Este deve funcionar, mas deve haver uma DMV para isto.
-- Mostra as tabelas e seus respectivos filegroups
Select
distinct Object_Name(a.id) as TableName,a
.Name as IndexName,c
.groupname,-- b.Name as FileGroupName,
b
.FileName as LocationFileGroupfrom
sysindexes a Join SysFiles b onb
.groupid = a.groupid join sysfilegroups c onc
.groupid = b.groupidwhere
a.id> 99order
by Object_Name(a.id)- Marcado como Resposta Richard Juhasz terça-feira, 27 de dezembro de 2011 18:07
-
Bom dia
Amigo, eu acredito que o SHRINK FILE with empty fie pode resolver seu problema, desde que o file não seja o MDF principal, qe como mencionaste não é o caso acredito que tal solução resolva teu problema.
Se tiver o Books online na sua máquina dê uma olhada nessa tag
ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.en/tsqlref9/html/e02b2318-bee9-4d84-a61f-2fddcf268c9f.htmLá você vai ter uma idéia de como proceder com o EMPTY File.
Espero que tenha ajudado.
Abraços.
- Marcado como Resposta Richard Juhasz terça-feira, 27 de dezembro de 2011 18:07
-
Boa Tarde,
Respondi essa Thread no fórum MSDN. Segue a cópia da resposta.
Não há como saber quais tabelas estão alocadas no arquivo MDF por uma razão muito simples. As tabelas não são mapeadas para arquivos, mas sim para FILEGROUPs. Você pode ter um FILEGROUP com os 4 arquivos e nesse caso, as tabelas daquele FILEGROUP estarão divididas entre os quatro arquivos.
Se o arquivo for o único do FILEGROUP não será possível eliminá-lo (a menos que você mude as tabelas de FILEGROUP). Se o FILEGROUP tiver mais arquivos, você poderá esvaziar o arquivo e posteriormente eliminá-lo através dos comandos abaixo:
Code SnippetUSE
BANCOGO
DBCC
SHRINKFILE('Arquivo Lógico', EMPTYFILE)GO
USE
MASTERGO
ALTER
DATABASE BANCO REMOVE FILE [Arquivo Lógico]GO
Algumas considerações devem ser feitas acerca desse procedimento:
- Enquanto você estiver removendo o arquivo, todos os objetos do FILEGROUP ficarão indisponíveis
- Antes de rodar o comando ninguém pode estar utilizando objetos do FILEGROUP senão o comando ficará bloqueado
- Se a base de dados for muito grande, o tempo de espera poderá ser considerável. Considere uma boa janela para fazer isso
Adicionalmente recomendo dar uma olhada na Thread abaixo:
Sql server 2000 X *.ndf
http://forums.microsoft.com/msdn-br/ShowPost.aspx?PostID=4236588&SiteID=21[ ]s,
Gustavo
http://gustavomaiaaguiar.spaces.live.com
- Marcado como Resposta Richard Juhasz terça-feira, 27 de dezembro de 2011 18:07
Todas as Respostas
-
Este deve funcionar, mas deve haver uma DMV para isto.
-- Mostra as tabelas e seus respectivos filegroups
Select
distinct Object_Name(a.id) as TableName,a
.Name as IndexName,c
.groupname,-- b.Name as FileGroupName,
b
.FileName as LocationFileGroupfrom
sysindexes a Join SysFiles b onb
.groupid = a.groupid join sysfilegroups c onc
.groupid = b.groupidwhere
a.id> 99order
by Object_Name(a.id)- Marcado como Resposta Richard Juhasz terça-feira, 27 de dezembro de 2011 18:07
-
Bom dia
Amigo, eu acredito que o SHRINK FILE with empty fie pode resolver seu problema, desde que o file não seja o MDF principal, qe como mencionaste não é o caso acredito que tal solução resolva teu problema.
Se tiver o Books online na sua máquina dê uma olhada nessa tag
ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.en/tsqlref9/html/e02b2318-bee9-4d84-a61f-2fddcf268c9f.htmLá você vai ter uma idéia de como proceder com o EMPTY File.
Espero que tenha ajudado.
Abraços.
- Marcado como Resposta Richard Juhasz terça-feira, 27 de dezembro de 2011 18:07
-
Boa Tarde,
Respondi essa Thread no fórum MSDN. Segue a cópia da resposta.
Não há como saber quais tabelas estão alocadas no arquivo MDF por uma razão muito simples. As tabelas não são mapeadas para arquivos, mas sim para FILEGROUPs. Você pode ter um FILEGROUP com os 4 arquivos e nesse caso, as tabelas daquele FILEGROUP estarão divididas entre os quatro arquivos.
Se o arquivo for o único do FILEGROUP não será possível eliminá-lo (a menos que você mude as tabelas de FILEGROUP). Se o FILEGROUP tiver mais arquivos, você poderá esvaziar o arquivo e posteriormente eliminá-lo através dos comandos abaixo:
Code SnippetUSE
BANCOGO
DBCC
SHRINKFILE('Arquivo Lógico', EMPTYFILE)GO
USE
MASTERGO
ALTER
DATABASE BANCO REMOVE FILE [Arquivo Lógico]GO
Algumas considerações devem ser feitas acerca desse procedimento:
- Enquanto você estiver removendo o arquivo, todos os objetos do FILEGROUP ficarão indisponíveis
- Antes de rodar o comando ninguém pode estar utilizando objetos do FILEGROUP senão o comando ficará bloqueado
- Se a base de dados for muito grande, o tempo de espera poderá ser considerável. Considere uma boa janela para fazer isso
Adicionalmente recomendo dar uma olhada na Thread abaixo:
Sql server 2000 X *.ndf
http://forums.microsoft.com/msdn-br/ShowPost.aspx?PostID=4236588&SiteID=21[ ]s,
Gustavo
http://gustavomaiaaguiar.spaces.live.com
- Marcado como Resposta Richard Juhasz terça-feira, 27 de dezembro de 2011 18:07