none
T-SQL Backup Automatizado RRS feed

  • Pergunta

  • Olá pessoal,

    Gostaria de saber como eu faço para criar aquivos de backup no SQL Server 2005 para que a cada backup concluído ele crie um novo arquivo com a a data no nome do arquivo. Exemplo  tenho um diretório para Bakups D:\BackupSQL,

    BKPFUll_01-01-2011

    BKPFUll_02-01-2011

    BKPFUll_03-01-2011

    BKPFUll_04-01-2011

    Observer que tem um backup full nos dias 1,2,3,4

    Alguém saberia me informar se tem como eu fazer isso.

    Cordialmente

    Christian Rosa

    • Movido Gustavo Maia Aguiar quinta-feira, 26 de julho de 2012 03:32 (De:SQL Server - Desenvolvimento Geral)
    quarta-feira, 27 de junho de 2012 14:25

Respostas

  • Christian,

    Quando eu precisei, eu fiz um script simples, onde eu informo quais databases eu quero fazer o backup. Também faço o uso da master.dbo.xp_delete_file para apagar os backups históricos (com mais de 7 dias... mas obviamente pode ser alterado no script. 

    /*
    Author       : Rafael Melo
    Creating date: 2010-12-27
    Propose      : Create backup by using sqlcmd
    */
    USE MASTER
    DECLARE @DATABASES TABLE (ID INT IDENTITY, DBNAME VARCHAR(100))
    DECLARE	
      @SQL VARCHAR(200),
      @DBNAME VARCHAR(100),
      @DATESTRING VARCHAR(50),
      @MIN INT,
      @MAX INT
      
      --!Insere os databases a ser backupeados - INSIRA TODOS OS BANCOS QUE DESEJA FAZER BACKUP
      INSERT @DATABASES (DBNAME) VALUES ('SEU BANCO')
        
      SET @MIN = 1
      SET @MAX = (SELECT ISNULL(MAX(ID),-1)FROM @DATABASES)
      SET @DATESTRING = CONVERT(VARCHAR, GETDATE(), 112)+ '_'+REPLACE(CONVERT(VARCHAR, GETDATE(), 108), ':', '')
      
      --!Realiza o backup nos bancos selecionados
      WHILE @MIN <= @MAX
      BEGIN
    	SELECT @DBNAME = DBNAME FROM @DATABASES WHERE ID = @MIN
    	SET @SQL = 'BACKUP DATABASE '+ @DBNAME +' TO DISK = ''C:\Backup SQL\'+@DBNAME+'_' + @dateString +'.BAK'' WITH INIT';  
    	EXEC (@SQL) 	
    	SET @MIN = @MIN +1
      END
      
      GO
      
     --!Procedimento que apaga backups com mais de 7 dias  
    DECLARE @DATE DATETIME = ( SELECT CAST( DATEADD(DAY, -7, GETDATE()) AS NVARCHAR(23) ) )
    EXECUTE master.dbo.xp_delete_file 0, N'C:\Backup SQL', N'bak', @DATE, 1
    

    Lembrando que para usar a master.dbo.xp_delete_file ela precisa ser habilitada antes.

    At.
    Rafael Melo

    • Sugerido como Resposta Heloisa Pires segunda-feira, 2 de julho de 2012 12:56
    • Marcado como Resposta Heloisa Pires quarta-feira, 4 de julho de 2012 11:55
    quinta-feira, 28 de junho de 2012 13:47

Todas as Respostas

  • Christian,

         Faça através do Maintenance Plan. É a forma mais adequada para a sua necessidade.

         Clique em Management, botão da direita sobre Maintenance Plans e escolha a opção Maintenance Plan Wizard. O wizard é bem didático e você conseguirá fazer o que precisa.

         Espero ter ajudado.


    Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008

    quarta-feira, 27 de junho de 2012 15:23
    Moderador
  • Olá Roberto,

    Desconheço esse recurso, onde ele fica ? tem no Sql server Express ?

    Abraço..

    quarta-feira, 27 de junho de 2012 18:36
  • Boa tarde Christian

    O SQL Server Express não suporta o recurso de Maintenance Plan nem possui o agente para schedular os jobs (os de backup no seu caso). O que pode-se é fazer um script de backup e executá-lo pelo sqlcmd, e que voce também pode gerar um agendamento pelo  agendador de tarefas do Windows.

    Veja esses links aqui do forum:

    http://social.msdn.microsoft.com/Forums/pt-BR/expresscompactpt/thread/3485fef0-6df2-403d-abae-1e3f642f803c/
    http://social.technet.microsoft.com/forums/pt-BR/sqlserver2005pt/thread/9dbcb0f7-ab5a-4b2c-8c50-409493029480/

    At.
    rafael

    quarta-feira, 27 de junho de 2012 19:49
  • Olá Rafael, 

    Tal procedimento que você me passou eu já utilizo, porém o que queria fazer mesmo é criar os backups separados, cada backup um arquivo.

    BKPFUll_01-01-2011

    BKPFUll_02-01-2011

    BKPFUll_03-01-2011

    BKPFUll_04-01-2011

    Abração

    quarta-feira, 27 de junho de 2012 23:46
  • Christian,

    Quando eu precisei, eu fiz um script simples, onde eu informo quais databases eu quero fazer o backup. Também faço o uso da master.dbo.xp_delete_file para apagar os backups históricos (com mais de 7 dias... mas obviamente pode ser alterado no script. 

    /*
    Author       : Rafael Melo
    Creating date: 2010-12-27
    Propose      : Create backup by using sqlcmd
    */
    USE MASTER
    DECLARE @DATABASES TABLE (ID INT IDENTITY, DBNAME VARCHAR(100))
    DECLARE	
      @SQL VARCHAR(200),
      @DBNAME VARCHAR(100),
      @DATESTRING VARCHAR(50),
      @MIN INT,
      @MAX INT
      
      --!Insere os databases a ser backupeados - INSIRA TODOS OS BANCOS QUE DESEJA FAZER BACKUP
      INSERT @DATABASES (DBNAME) VALUES ('SEU BANCO')
        
      SET @MIN = 1
      SET @MAX = (SELECT ISNULL(MAX(ID),-1)FROM @DATABASES)
      SET @DATESTRING = CONVERT(VARCHAR, GETDATE(), 112)+ '_'+REPLACE(CONVERT(VARCHAR, GETDATE(), 108), ':', '')
      
      --!Realiza o backup nos bancos selecionados
      WHILE @MIN <= @MAX
      BEGIN
    	SELECT @DBNAME = DBNAME FROM @DATABASES WHERE ID = @MIN
    	SET @SQL = 'BACKUP DATABASE '+ @DBNAME +' TO DISK = ''C:\Backup SQL\'+@DBNAME+'_' + @dateString +'.BAK'' WITH INIT';  
    	EXEC (@SQL) 	
    	SET @MIN = @MIN +1
      END
      
      GO
      
     --!Procedimento que apaga backups com mais de 7 dias  
    DECLARE @DATE DATETIME = ( SELECT CAST( DATEADD(DAY, -7, GETDATE()) AS NVARCHAR(23) ) )
    EXECUTE master.dbo.xp_delete_file 0, N'C:\Backup SQL', N'bak', @DATE, 1
    

    Lembrando que para usar a master.dbo.xp_delete_file ela precisa ser habilitada antes.

    At.
    Rafael Melo

    • Sugerido como Resposta Heloisa Pires segunda-feira, 2 de julho de 2012 12:56
    • Marcado como Resposta Heloisa Pires quarta-feira, 4 de julho de 2012 11:55
    quinta-feira, 28 de junho de 2012 13:47
  • Olá Rafael,

    Primeiramente me desculpe pela demora do feedback, o que eu gostaria de entender é para tal procedimento eu terei que fazer uma agendamento de tarefas pelo agendador do Windows né ? Outra é como ele vai identificar que já existe um arquivo no diretório e criar um com outro nome ?

    Abraços

    quarta-feira, 25 de julho de 2012 15:22
  • Bom dia Christian

    Exatamente.  Voce deverá criar um agendamento no windows apontando esse script para ser executado pelo sqlcmd.

    Ele não vai identificar que jah existe um arquivo. Ele simplismente vai criar outro com o nome alterado para a nova data. É por isso que a parte final do script tem um procedimento para exclusão dos backups com mais de 7 dias, senão ele vai gerar cada dia um arquivo até encher seu disco(*) ou voce excluir manualmente.

    ex:

    BKPFUll_01-01-2011 -

    BKPFUll_02-01-2011

    At.
    rafael Melo

    quinta-feira, 26 de julho de 2012 13:23