none
Variáveis dentro do Script de Backup RRS feed

  • Pergunta

  • Olá amigos, como vão?

    Estou tentando criar um script (loop) para criar meus backups em um servidor porém não estou conseguindo acertar a variável dentro concatenando para montar o caminho do .bak.

    Eu preciso montar o nome do banco de dados seguido de .bak. Exemplo: E:\Nome_da_Base_de_Dados.bak.

    Segue meu script:

    DECLARE @CONT INT
    DECLARE @BASE CHAR(100)
    
    SET @CONT = 1
    
    WHILE @CONT <= (SELECT COUNT(0)QTDE_DB FROM DB_PLANUS_DBD.dbo.tb_DATABASES)
    BEGIN
    	SET @BASE = (SELECT NAME_DATABASE FROM DB_PLANUS_DBD.dbo.tb_DATABASES WHERE ID = @CONT)
    
    	BACKUP DATABASE @BASE TO DISK = N'E:\' + @BASE + '.bak' 
    	WITH NOFORMAT, NOINIT, SKIP, NOREWIND, NOUNLOAD,  STATS = 10
    
    	SET @CONT = @CONT + 1n
    	PRINT @BASE
    END;
    

    Ele está me dando erro na concatenação, gerando esse erro:

    Msg 170, Level 15, State 1, Line 10
    Line 10: Incorrect syntax near '+'.
    Msg 170, Level 15, State 1, Line 12
    Line 12: Incorrect syntax near 'n'.

    Um forte abraço


    Clayton Santos
    Administrador de Banco de Dados
    casclayton@gmail.com
    ITIL|MCTS
    http://casclayton.wordpress.com/
    quarta-feira, 23 de novembro de 2011 19:14

Respostas

  • Utilize uma variavel para concatenar a sua informação, basicamente o seguinte

     

    DECLARE @str_backup nvarchar(4000) = ''

     

    SET @str_backup = 'BACKUP DATABASE ' + @BASE + ' TO DISK = N' + CHAR(39) + 'E:\' + @BASE + '.bak' + 

    ' WITH NOFORMAT, NOINIT, SKIP, NOREWIND, NOUNLOAD,  STATS = 10 '

     

    EXECUTE sp_execute @str_backup

     

     

    Espero ter ajudado


    Anderson - DBA/MCP/MCTS/MCITP/MCT - Sua pergunta foi respondida ? Marque-a como tal! www.myspace.com/andersondpa
    quarta-feira, 23 de novembro de 2011 19:27

Todas as Respostas

  • Utilize uma variavel para concatenar a sua informação, basicamente o seguinte

     

    DECLARE @str_backup nvarchar(4000) = ''

     

    SET @str_backup = 'BACKUP DATABASE ' + @BASE + ' TO DISK = N' + CHAR(39) + 'E:\' + @BASE + '.bak' + 

    ' WITH NOFORMAT, NOINIT, SKIP, NOREWIND, NOUNLOAD,  STATS = 10 '

     

    EXECUTE sp_execute @str_backup

     

     

    Espero ter ajudado


    Anderson - DBA/MCP/MCTS/MCITP/MCT - Sua pergunta foi respondida ? Marque-a como tal! www.myspace.com/andersondpa
    quarta-feira, 23 de novembro de 2011 19:27
  • Olá Anderson, como vai?

    Eu não to conseguindo identificar o problema está me aparecendo essas msgs de erro.

    Msg 170, Level 15, State 1, Line 15
    Line 15: Incorrect syntax near ' WITH NOFORMAT, NOINIT, SKIP, NOREWIND, NOUNLOAD,  STATS = 10'.
    Msg 137, Level 15, State 2, Line 3
    Must declare the variable '@str_backup'.
    Msg 137, Level 15, State 2, Line 3
    Must declare the variable '@CONT'.
    Msg 137, Level 15, State 2, Line 4
    Must declare the variable <a href="mailto:'@BASE'" rel="nofollow">'@BASE'</a>.
    

    Um forte abraço


    Clayton Santos
    Administrador de Banco de Dados
    casclayton@gmail.com
    ITIL|MCTS
    http://casclayton.wordpress.com/
    quinta-feira, 24 de novembro de 2011 11:39
  • Clayton,

    Você tentou utilizar a sugestão do Anderson?

    Veja estes exemplos:

    Set DateFirst 1

    Declare @DiadaSemana TinyInt,
            @Hora Char(5)

    Select @DiadaSemana = DATEPART (WeekDay, Getdate()), @Hora=Convert(Char(5),GetDate(),114)

    If (@DiadaSemana = 1)
    Begin

     If (@Hora='12:00')
      Backup Database Protheus10 To Disk = 'F:\Backup-SQL\Segunda\Protheus10-Segunda-Manha.bak' With Init, Format;
     
     If (@Hora='22:00')
      Backup Database Protheus10 To Disk = 'F:\Backup-SQL\Segunda\Protheus10-Segunda-Noite.bak' With Init, Format;
    End
     
    If (@DiadaSemana = 2)
    Begin

     If (@Hora='12:00')
      Backup Database Protheus10 To Disk = 'F:\Backup-SQL\Terça\Protheus10-Terça-Manha.bak' With Init, Format;
     
     If (@Hora='22:00')
      Backup Database Protheus10 To Disk = 'F:\Backup-SQL\Terça\Protheus10-Terça-Noite.bak' With Init, Format;
    End

    If (@DiadaSemana = 3)
    Begin

     If (@Hora='12:00')
      Backup Database Protheus10 To Disk = 'F:\Backup-SQL\Quarta\Protheus10-Quarta-Manha.bak' With Init, Format;
     
     If (@Hora='22:00')
      Backup Database Protheus10 To Disk = 'F:\Backup-SQL\Quarta\Protheus10-Quarta-Noite.bak' With Init, Format;
    End

    If (@DiadaSemana = 4)
    Begin

     If (@Hora='12:00')
      Backup Database Protheus10 To Disk = 'F:\Backup-SQL\Quinta\Protheus10-Quinta-Manha.bak' With Init, Format;
     
     If (@Hora='22:00')
      Backup Database Protheus10 To Disk = 'F:\Backup-SQL\Quinta\Protheus10-Quinta-Noite.bak' With Init, Format;
    End

    If (@DiadaSemana = 5)
    Begin

     If (@Hora='12:00')
      Backup Database Protheus10 To Disk = 'F:\Backup-SQL\Sexta\Protheus10-Sexta-Manha.bak' With Init, Format;
     
     If (@Hora='22:00')
      Backup Database Protheus10 To Disk = 'F:\Backup-SQL\Sexta\Protheus10-Sexta-Noite.bak' With Init, Format;
    End

    If (@DiadaSemana = 6)
    Begin

     If (@Hora='12:00')
      Backup Database Protheus10 To Disk = 'F:\Backup-SQL\Sábado\Protheus10-Sábado-Manha.bak' With Init, Format;
     
     If (@Hora='22:00')
      Backup Database Protheus10 To Disk = 'F:\Backup-SQL\Sábado\Protheus10-Sábado-Noite.bak' With Init, Format;
    End

    If (@DiadaSemana = 7)
    Begin

     If (@Hora='12:00')
      Backup Database Protheus10 To Disk = 'F:\Backup-SQL\Domingo\Protheus10-Domingo-Manha.bak' With Init, Format;
     
     If (@Hora='22:00')
      Backup Database Protheus10 To Disk = 'F:\Backup-SQL\Domingo\Protheus10-Domingo-Noite.bak' With Init, Format;
    End

     

    ------------------------------------------Exemplo 2--------------------------------------------

    Declare @Comando VarChar(1000)
    
    Set @comando='Backup Database Laboratorio To Disk = ''F:\SYS\MSSQL_BACKUP\Laboratorio-Diff.bak'
    
                            +Convert(Char(10),GetDate(),103)
    
                            +' With Differential, Init,
    
                             Description=''Backup Laboratório - Posição diferencial em relação ao Backup Full'
    
     
    
    Select @Comando
    
    


    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]
    domingo, 27 de novembro de 2011 00:07
  • Olá Galvão, como vai?

    Na verdade aproveitei o script do amigo Anderson e alterei alguns itens.

    DECLARE @CONT INT;
    DECLARE @BASE CHAR(100);
    DECLARE @SQLString NVARCHAR(500);
    DECLARE @Ano CHAR(4);
    DECLARE @Mes CHAR(2);
    DECLARE @Dia CHAR(2);
    DECLARE @hora CHAR(2);
    DECLARE @Min CHAR(2);
    
    SET @CONT = 1
    SET @Ano = (SELECT DATEPART(YEAR,GETDATE()))
    SET @Mes = (SELECT DATEPART(MONTH,GETDATE()))
    SET @Dia = (SELECT DATEPART(DAY,GETDATE()))
    SET @hora = (SELECT DATEPART(HOUR,GETDATE()))
    SET @Min = (SELECT DATEPART(minute,GETDATE()))
    
    WHILE @CONT <= 1--(SELECT COUNT(0)QTDE_DB FROM DB_PLANUS_DBD.dbo.tb_DATABASES)
    BEGIN
    	SET @BASE = (SELECT NAME_DATABASE FROM DB_PLANUS_DBD.dbo.tb_DATABASES WHERE ID = @CONT AND NAME_DATABASE NOT IN('Master'))
    
    	SET @SQLString = 'BACKUP DATABASE ' + @BASE + ' TO DISK = N' + CHAR(39) + '\\BRSPSTORAGE01\Databases\BRSPSQL03\FULL\'+RTRIM(@BASE)+'_'+RTRIM(@Dia)+'_'+RTRIM(@Mes)+'_'+RTRIM(@Ano)+'_'+RTRIM(@Hora)+''+RTRIM(@Min)+'.bak'' WITH NOFORMAT, NOINIT, SKIP, NOREWIND, NOUNLOAD,  STATS = 10';
    	
    	EXECUTE sp_executesql @SQLString;
    
    	SET @CONT = @CONT + 1
    	PRINT 'Backup da Base de dados: ' + @BASE
    END;
    

    Obrigado pela ajuda!!!

    Abraços


    Clayton Santos
    Administrador de Banco de Dados
    casclayton@gmail.com
    ITIL|MCTS
    http://casclayton.wordpress.com/
    segunda-feira, 28 de novembro de 2011 11:52