locked
Apagar arquivo de dados secundario NDF RRS feed

  • Pergunta

  • Bom dia a todos
    Alguem sabe me informar se é possível apagar um arquivo de dados secundario (NDF) ?
    o objetivo é que a base tenha somente o arquivo primario de dados e o de log

    Obrigado

    Alessandro Rossi Kiffer
    arkiffer@hotmail.com


    Alessandro Kiffer
    sexta-feira, 8 de janeiro de 2010 13:29

Respostas

  • Bom dia Alessandro,

    Apesar da pergunta ter sido direcionada ao Júnior, segue abaixo uma opção:

    saber quais arquivos estão no filegroup:

    SELECT name,
           Filegroup_name(groupid)
    FROM   [SUA_BASE]..sysfiles


    listar objetos e seus filegroups:

    SELECT fg.data_space_id,
           fg.name AS [filegrou_name],
           objectname = Object_name(p.object_id),
           p.index_id,
           df.name,
           df.physical_name,
           [Size] = df.size * 8 / 1024
    FROM   sys.filegroups fg
           LEFT JOIN sys.database_files df
             ON fg.data_space_id = df.data_space_id
           LEFT JOIN sys.partitions p
             ON fg.data_space_id = p.partition_number
    WHERE  (p.object_id > 4096
             OR p.object_id IS NULL)


    Atenciosamente,

    André Rocha.
    http://br.linkedin.com/pub/andre-rocha/10/269/5a http://CleverData.com.br
    segunda-feira, 11 de janeiro de 2010 11:35

Todas as Respostas

  • Bom dia Alessandro,

    Arquivos secundários podem ser deletados sim, basta que estejam vazios.

    Arquivos de dados e log primários é que não podem.


    Atenciosamente,


    André Rocha.
    http://br.linkedin.com/pub/andre-rocha/10/269/5a http://CleverData.com.br
    sexta-feira, 8 de janeiro de 2010 13:31
  • Bom Dia,

    É possível sim, mas é necessário garantir que os arquivos secundários estejam vazios.
    Você poderá esvaziá-los usando o comando DBCC SHRINKFILE com o parâmentro EMPTY FILE. Ex:

    USE Banco
    GO
    DBCC SHRINKFILE('Arquivo',EMPTYFILE)
    GO

    Se estiver utilizando um arquivo secundário de log, é necessário efetuar um backup de log antes.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com

    Criptografia, Autenticadores e Ataques de Inferência no SQL Server
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!908.entry


    Classifique as respostas. O seu feedback é imprescindível
    sexta-feira, 8 de janeiro de 2010 13:41
  • Ok Obrigado!!
    Alessandro Kiffer
    sexta-feira, 8 de janeiro de 2010 14:07
  • Olá Alessandro,

    Se puder classifique as respostas.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com

    Criptografia, Autenticadores e Ataques de Inferência no SQL Server
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!908.entry


    Classifique as respostas. O seu feedback é imprescindível
    sexta-feira, 8 de janeiro de 2010 14:59
  • Alesssandro,

    Aconselho a migrar todos os dados, melhor dizendo todas as tabelas e índices que estão relacionados ao arquivo secundário para o primário antes de realizar qualquer procedimento.

    Com isso você estará garantindo a existência dos seus dados.
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    sábado, 9 de janeiro de 2010 00:41
    Moderador
  • Galvao, qual o procedimento para identificar quais tabelas , indices, etc estao no arquivo master ou no secundario ?

    Obrigado 
    Alessandro Kiffer
    segunda-feira, 11 de janeiro de 2010 11:06
  • Bom dia Alessandro,

    Apesar da pergunta ter sido direcionada ao Júnior, segue abaixo uma opção:

    saber quais arquivos estão no filegroup:

    SELECT name,
           Filegroup_name(groupid)
    FROM   [SUA_BASE]..sysfiles


    listar objetos e seus filegroups:

    SELECT fg.data_space_id,
           fg.name AS [filegrou_name],
           objectname = Object_name(p.object_id),
           p.index_id,
           df.name,
           df.physical_name,
           [Size] = df.size * 8 / 1024
    FROM   sys.filegroups fg
           LEFT JOIN sys.database_files df
             ON fg.data_space_id = df.data_space_id
           LEFT JOIN sys.partitions p
             ON fg.data_space_id = p.partition_number
    WHERE  (p.object_id > 4096
             OR p.object_id IS NULL)


    Atenciosamente,

    André Rocha.
    http://br.linkedin.com/pub/andre-rocha/10/269/5a http://CleverData.com.br
    segunda-feira, 11 de janeiro de 2010 11:35
  • André, muito Obrigado!
    Alessandro Kiffer
    segunda-feira, 11 de janeiro de 2010 12:09
  • Olá Alessandro,

    Não há como saber que tabelas e índices estão em qual arquivo. Isso porque o vínculo é com FILEGROUPs e não com arquivos. Se você tem um FILEGROUP com dois arquivos, as tabelas e índices desses FILEGROUP estarão nos dois arquivos. Por isso que o EMPTYFILE é utilizado. Ele esvazia o arquivo secundário colocando todos os dados no arquivo primário e nos demais secundários se houver.

    Basta rodar o EMPTYFILE que o arquivo secundário será esvaziado e poderá ser removido com o ALTER DATABASE ou via interface gráfica.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com

    Criptografia, Autenticadores e Ataques de Inferência no SQL Server
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!908.entry


    Classifique as respostas. O seu feedback é imprescindível
    segunda-feira, 11 de janeiro de 2010 12:22
  • André,

    Normalmente eu utilizo a system table sys.filegroups para obter informações sobre o filegroup com isso identifico os arquivos envolvidos no filegroup.
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    segunda-feira, 11 de janeiro de 2010 13:20
    Moderador
  • olá a todos, hoje que tive como criar um ambiente de teste para dar manutenção na referida base.

    Qdo eu vou dar o shrink , a mensagem que me aparece é:

    Msg 2556, Level 16, State 1, Line 1

    There is insufficient space in the filegroup to complete the emptyfile operation.

    No arquivo secundario , na qual eu quero apagar, tem 1 objeto
    data_space_id   filegrou_name     objectname   index_id    name                 physical_name                                size
    2                     SENCONDARY       NULL            NULL         DADOSADV_IDX   d:\MSSQL\DATA\DADOSADV_1.NDF     1794


    Alessandro Kiffer
    terça-feira, 2 de fevereiro de 2010 20:36
  • Post antigo, por isso o mesmo foi encerrado.

    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    terça-feira, 5 de junho de 2018 13:12
    Moderador