locked
Como fazer backup de um único NDF (BACKUP/RESTORE PARTIAL) RRS feed

  • Discussão Geral

  • Tenho um banco de dados grande, hospedado em um servidor SQL Server 2012 Enterprise, dividido em vários FileGroups. 

    Neste momento estou revendo meu planejamento de backup's e um consultor me disse que é possível realizar backup / restore de apenas um File NDF dentro do FileGroup do banco de dados.

    Já testei com sucesso o backup FULL do banco, com o restore de apenas um File NDF, mas ainda não consegui implementar este backup com apenas um único NDF, sem a necessidade do backup FULL.

    Também não encontrei nenhuma documentação que pudesse indicar este BACKUP PARTIAL com RESTORE de um FILE sem executar os backups de LOG na sequencia.

    Gostaria de uma opinião, principalmente se alguém tem uma situação semelhante e que funciona. Meu ambiente é crítico e retornar o backup de um banco no menor tempo possível é fundamental.

    quinta-feira, 24 de outubro de 2013 22:57

Todas as Respostas

  • Durval,

    É possível sim fazer backup de formas parciais, ou seja, de arquivos de dados distintos.

    O que você pode fazer é no comando Backup informar qual arquivo você deseja fazer o backup, neste caso, fazendo um backup por filegroup.

    Veja abaixo um exemplo:

    CREATE DATABASE AES
    ON PRIMARY
    	(NAME = AES_Dados,
    	  FILENAME = N'C:\BANCOS\AES_Dados.mdf',
              SIZE = 10MB,
              MAXSIZE = 50MB,
              FILEGROWTH = 10%),	
    FILEGROUP Secundario
    	( NAME = AES_Secundario_Dados,
    	  FILENAME = N'C:\BANCOS\AES_Secundario_Dados.ndf',
              SIZE = 10MB,
              MAXSIZE = 50MB,
              FILEGROWTH = 10%),
    FILEGROUP Terceiro
    	( NAME = AES_Terceiro_Dados,
    	  FILENAME = N'C:\BANCOS\AES_Terceiro_Dados.ndf',
              SIZE = 10MB,
              MAXSIZE = 50MB,
              FILEGROWTH = 10%)          
    LOG ON
    	( NAME = AES_Log,
    	  FILENAME = N'C:\BANCOS\AES_Log.ldf',
              SIZE = 10MB,
              MAXSIZE = 50MB,
              FILEGROWTH = 10%)
    GO
    
    Use AES
    Go
    
    Create Table T1
     (Codigo Int) On [Primary]
     
    Create Table T2
     (Codigo Int) On [Secundario]
    
    Create Table T3
     (Codigo Int) On [Terceiro]
      
    --Backup Database
    Backup Database AES
     To Disk = 'C:\BANCOS\Backup-Full-AES.bak'
     With Init, NoFormat
     
    --Backup Database + File x Filegroup
    Backup Database AES
     File = 'AES_Dados',
     Filegroup = 'Primary'
     To Disk = 'C:\BANCOS\Backup-Primary-AES.bak'
     With Init
    
    Backup Database AES
     File = 'AES_Secundario_Dados',
     Filegroup = 'Secundario'
     To Disk = 'C:\BANCOS\Backup-Secundario-AES.bak'
     With Init
    
    Backup Database AES
     File = 'AES_Terceiro_Dados',
     Filegroup = 'Secundario'
     To Disk = 'C:\BANCOS\Backup-Terceiro-AES.bak'
     With Init 
     
    --Backup Log
    Use master
    Go
    
    Backup Log AES
     To Disk = 'C:\BANCOS\Backup-Log-AES.bak'
     With Init, NoRecovery
    Go
    
    -- Exemplo 1 --
    
    --Restaurando o Filegroup(Primary)
    Use master
    Go
    
    Restore Database AES 
     Filegroup = 'Primary' 
     From Disk = 'C:\BANCOS\Backup-Primary-AES.bak'
     With Partial, NoRecovery, Replace
    Go
    
    --Restaurando o Filegroup(Secundario)
    Use master
    Go
    
    Restore Database AES 
     Filegroup = 'Secundario' 
     From Disk = 'C:\BANCOS\Backup-Secundario-AES.bak'
     With NoRecovery
    Go
    
    --Restaurando do Log e liberando o Banco de Dados
    Use master
    Go
    
    Restore Log AES 
     From Disk = 'C:\BANCOS\Backup-Log-AES.bak'
     With Recovery
    Go
    
    Select * from sys.master_files
    
    Select * from T1
    
    Select * from T2
    
    Select * from T3
    
    -- Exemplo 2 --
    --Restaurando o Backup Full e forçando a leitura dos filegroups
    Use master
    Go
    
    Restore Database AES READ_WRITE_FILEGROUPS
     From Disk = 'C:\BANCOS\Backup-Full-AES.bak'
     With File=1, Replace, NoRecovery
    Go 
    
    --Restore File e Filegroup 
    Restore Database AES
     File = 'AES_Secundario_Dados',
     Filegroup = 'Secundario'
     From Disk = 'C:\BANCOS\Backup-Secundario-AES.bak'
     With File=1, Replace, NoRecovery
    
    --Restaurando o Filegroup em Estado Offline 
    Restore Database AES 
     Filegroup='Secundario' 
     From Disk ='C:\BANCOS\Backup-Secundario-AES.bak'
     With NoRecovery
    Go
     
    --Restaurando do Log e liberando o Banco de Dados
    Use master
    Go
    
    Restore Log AES 
     From Disk = 'C:\BANCOS\Backup-Log-AES.bak'
     With Recovery
    Go
    

    Através do Management Studio não existe a opção de Backup Partial, o que na verdade deve ser feito é utilizar o comando Backup em conjunto com a opção Read_Write_Filegroups:

    Partial
    
    BACKUP DATABASE TestBackup READ_WRITE_FILEGROUPS
    TO DISK = 'C:\TestBackup_Partial.BAK'
    GO
    
    Diferencial
    
    BACKUP DATABASE TestBackup READ_WRITE_FILEGROUPS
    TO DISK = 'C:\TestBackup_Partial.DIF'
    WITH DIFFERENTIAL
    GO


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    sexta-feira, 25 de outubro de 2013 12:43
    Moderador