none
Verificar tabelas que pertencem ao arquivo MDF RRS feed

  • 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.

    quinta-feira, 8 de janeiro de 2009 20:50

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 LocationFileGroup

    from sysindexes a Join SysFiles b on

    b.groupid = a.groupid

    join sysfilegroups c on

    c.groupid = b.groupid

    where a.id> 99

    order by Object_Name(a.id)

     

    • Marcado como Resposta Richard Juhasz terça-feira, 27 de dezembro de 2011 18:07
    sexta-feira, 9 de janeiro de 2009 11:35
  • 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.htm

     

    Lá 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
    sexta-feira, 9 de janeiro de 2009 11:55
  • 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 Snippet

    USE BANCO

    GO

    DBCC SHRINKFILE('Arquivo Lógico', EMPTYFILE)

    GO

    USE MASTER

    GO

    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
    sábado, 10 de janeiro de 2009 18:35

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 LocationFileGroup

    from sysindexes a Join SysFiles b on

    b.groupid = a.groupid

    join sysfilegroups c on

    c.groupid = b.groupid

    where a.id> 99

    order by Object_Name(a.id)

     

    • Marcado como Resposta Richard Juhasz terça-feira, 27 de dezembro de 2011 18:07
    sexta-feira, 9 de janeiro de 2009 11:35
  • 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.htm

     

    Lá 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
    sexta-feira, 9 de janeiro de 2009 11:55
  • 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 Snippet

    USE BANCO

    GO

    DBCC SHRINKFILE('Arquivo Lógico', EMPTYFILE)

    GO

    USE MASTER

    GO

    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
    sábado, 10 de janeiro de 2009 18:35