none
backup RRS feed

  • Pergunta

  • Bom dia ,

    Estou com problema com minha rotina de backup,tem dia que o backup é feito normalmente e tem dia que simplesmente não pe feito o bkp de um dos bancos mas não apresenta erro, simplesmente nao faz e o job encerra com sucesso. Como se a base não fosse encontrada na sysdatabases.Alguem tem alguma explicação ???



    executo o seguinte script


    use master

    DECLARE @name VARCHAR(50) -- database name  
    DECLARE @path VARCHAR(256) -- path for backup files  
    DECLARE @fileName VARCHAR(256) -- filename for backup  
    DECLARE @fileDate VARCHAR(20) -- used for file name 
    SET @path = 'C:\BKP\' 
    SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112) 


    DECLARE db_cursor CURSOR FOR  

    SELECT name  FROM master.dbo.sysdatabases  
    WHERE name in ('BANCOB','BANCOA','BANCOC')
      
    OPEN db_cursor   
    FETCH NEXT FROM db_cursor INTO @name   

    WHILE @@FETCH_STATUS = 0   
    BEGIN   
           SET @fileName = @path + @name + '_XXX_' + @fileDate + '.BAK'  
           BACKUP DATABASE @name TO DISK = @fileName  WITH NOFORMAT, NOINIT, SKIP, NOREWIND, NOUNLOAD, COMPRESSION,  STATS = 10
        
                  
           FETCH NEXT FROM db_cursor INTO @name   
    END   

    CLOSE db_cursor   
    DEALLOCATE db_cursor 




    terça-feira, 12 de março de 2013 12:21

Todas as Respostas

  • Olá Papell, você já testou o backup usando os comandos simples tipo:

    BACKUP DATABASE [Sua_Base] TO DISK = 'C:\....bak'?

    Qual foi o resultado?

    terça-feira, 12 de março de 2013 13:36
  • papell,

    Você chegou a verificar se não está acontecendo um append ao arquivo já existente? Use o script abaixo para ver se não foi gerado o backup para a base de dados no dia que você diz que não foi executado. Tente adicionar um try...catch ao seu código, deve ajudar a identificar algum possível erro.

    select sdb.name, bus.backup_set_id, bus.backup_start_date, bus.backup_finish_date, bmf.physical_device_name
    from sys.databases sdb
    left join msdb.dbo.backupset bus ON bus.database_name = sdb.name
    left join msdb.dbo.backupmediafamily bmf on bmf.media_set_id = bus.media_set_id

    terça-feira, 12 de março de 2013 15:45
  • O backup não é feito mesmo, eu movimento os arquivos para outra pasta antes do próximo backup.

    A rotina funciona todos os dias, esporadicamente isso acontece, quando vejo q não foi feito , executo a mesma rotina e o backup é feito, é como se em algum momento não conseguisse ver o banco e fazer o backup.

    • Editado papell terça-feira, 12 de março de 2013 20:21
    terça-feira, 12 de março de 2013 20:17
  • Papell,

    Estou desconfiado que o problema esta nesta linha de código: SET @fileName = @path + @name + '_XXX_' + @fileDate + '.BAK' 

    Talvez os valores passados para variáveis e também a concatenação dependendo do dia estão gerando algum tipo de incompatibilidade.


    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]

    • Sugerido como Resposta Luiz Mercante segunda-feira, 29 de abril de 2013 01:05
    quarta-feira, 13 de março de 2013 17:09
    Moderador
  • Caro Papell,

    1- Consegue se lembrar de alguma data que não funcionou? Experimente tirar esta base do script e deixar ela fazendo o backup em um outro script que pode começar logo abaixo deste, removendo a opção SKIP.

    2- Seu GetDate(),112 traz a data no formato YYYYMMDD, experimente mudar de VARCHAR(20) para CHAR (8).

    3- Veja o script abaixo e tente com este que nomeia o arquivo inclusive com hora:


    DECLARE @DBname VARCHAR(20) -- nome da base
    DECLARE @path VARCHAR(256) -- caminho do backup
    DECLARE @FileName VARCHAR(256) -- nome do arquivo de backup
    DECLARE @Date VARCHAR(20) -- parte do nome do arquivo de backup

    SET @path = 'C:\Backup\' -- altere aqui o caminho do backup (a pasta deve existir)

    -- coloca a data no formato Aug 18 2011 8:23PM na variavel Date
    SELECT @Date = CONVERT(VARCHAR(20),GETDATE(),120)

    -- substitui os espacos por underline _ e deixa Aug_18_2011_8:23PM
    SET @Date = REPLACE(@Date, ' ', '_')

    -- substitui o sinal dois pontos por ponto e fica Aug_18_2011_8.23PM
    SET @Date = REPLACE(@Date, ':', '.')

    -- abre o cursor e insere o nome das bases exceto as default
    DECLARE db_cursor CURSOR FOR
    SELECT name
    FROM MASTER.dbo.sysdatabases
    WHERE name NOT IN ('master','model','msdb','tempdb')

    -- abre o cursor para utilizar
    OPEN db_cursor

    -- coloca a proxima linha encontrada dentro do cursor na variavel DBname
    FETCH NEXT FROM db_cursor INTO @DBname

    -- enquanto não terminam as linhas dentro do cursor, comecar
    WHILE @@FETCH_STATUS = 0
    BEGIN

    -- coloca dentro da variavel fileName o nome e caminho do arquivo concatenado
    SET @fileName = @path + @DBname + '_' + @Date + '.BAK'

    -- faz o backup full da base que veio do cursor e esta na variavel DBname
    BACKUP DATABASE @DBname TO DISK = @fileName

    -- move o foco do cursor para a proxima linha e coloca este proximo dado na variavel DBname
    FETCH NEXT FROM db_cursor INTO @DBname

    -- indica que deve voltar ao begin 
    -- (somente se o FETCH_STATUS não for zero, ou seja, nao acabaram os dados dentro dele)
    END

    -- quando o FETCH_STATUS for zero, vai pular direto para esta linha
    -- fecha o cursor
    CLOSE db_cursor

    -- desaloca o cursor liberando a memoria
    DEALLOCATE db_cursor

    Conta pra gente como ficou teu caso, abs!


    Luiz Mercante
    MCITP SQL 2008 | MCTS SQL 2008 | MCTS Windows Apps | MCTS Windows Network | MCP 2003
    sqldicas@outlook.com
    http://sqldicas.com.br


    Se a resposta foi útil de alguma forma, classifique.



    • Editado Luiz Mercante segunda-feira, 22 de abril de 2013 02:41 o mesmo
    • Sugerido como Resposta Luiz Mercante segunda-feira, 29 de abril de 2013 01:05
    segunda-feira, 22 de abril de 2013 02:39