locked
Problema na execução de procedure no SQL2005 RRS feed

  • Pergunta

  • Bom dia a todos.

    Estou montando um procedimento para efetuar o backup dos meus bancos no SQL2005. Para tanto criei uma procedure na qual passo o nome do banco que sofrerá o backup.

    Afim de facilitar o meu trabalho criei uma segunda procedure que lê o nome dos bancos criados na instância e faz a chamada da procedure do backup para cada um dosbancos.

    O meu problema é que o cursor, que utilizo na procedure, não está trazendo todos os registros da tabela. Sempre traz os 4 primeiros registros do select.

    Se executo o select diretamente, todos os registros são listados corretamente.

    Será que está faltando alguma coisa no meu código?

    Já apliquei o SP1 no meu banco porém o problema persiste.

    Segue abaixo o código que estou utilizando.

     

    DECLARE @db_name VARCHAR(20);

    DECLARE db_cursor CURSOR FOR

    select name from master.dbo.sysdatabases

    where name not in('tempdb')

    /*and status not in (520)*/

    order by name;

    -- Inicio do procedimento

    OPEN db_cursor

    FETCH NEXT FROM db_cursor INTO @db_name

    WHILE @@FETCH_STATUS = 0

    BEGIN

    exec master.dbo.exec_backup_full_database @db_name;

    FETCH NEXT FROM db_cursor INTO @db_name

    END

    CLOSE db_cursor

    DEALLOCATE db_cursor

     

    Obrigado a todos.

     

    Paulo Vilhena

    quinta-feira, 9 de novembro de 2006 19:23

Todas as Respostas

  • Ola Paulo,

    Testei seu codigo e a lista de bancos foi retornada corretamente. Só substitui o exec por print para listar os bancos.

    Testei em um servidor com o SP1 do SQL 2005 + Hotfix 2153 (KB 918222 - http://support.microsoft.com/kb/918222)

    quinta-feira, 9 de novembro de 2006 19:43
  • SE vc fizer o selecrt fora do cursor funciona na boa  ou tb acontece o problema ?

     

    sexta-feira, 10 de novembro de 2006 12:52
  • Paulo, faça um teste:

    Altere o nome da procedure para iniciar com 'sp_'

    E no momento em que você chamá-la não passe o caminho completo, apenas: sp_nomeproc.

    Em alguns caso o engine se perde quando você troca o contexto do banco de dados.

    sexta-feira, 10 de novembro de 2006 13:57
  • bom dia,

    O resultado aparece normalmente, se executo o select.

    O problema aparece quando executo dentro da procedure.

     

     

     

    segunda-feira, 13 de novembro de 2006 12:05
  • Bom dia Andre,

    O resultado aparece normalmente, se executo o select.

    O problema aparece quando executo dentro da procedure.

     

    segunda-feira, 13 de novembro de 2006 12:06
  • Bom dia Rodrigo,

    Apliquei o service pack 1 na minha instalação e se executo na mão a procedure, roda normalmente. Se agendo ela como um job, o erro aparece se modo intermitente, ou seja, em uma execuçaõ roda correto e em outra ocorre o problema.

    Vou testar sua sugestão e assim que tiver uma resposta atualizo o post.

    Obrigado a todos,

     

    Paulo Vilhena 

    segunda-feira, 13 de novembro de 2006 12:09
  • Olá Paulo,

    Veja este artigo em meu site..acho que pode te ajudar!!

    (Automatizando Backups no SQL Server)
    http://www.mcdbabrasil.com.br/modules.php?name=News&file=article&sid=377

    um abraço
    Nilton Pinheiro
    www.mcdbabrasil.com.br

    Obs: Foi útil para vc? Entãomarque-a como útil.

    quarta-feira, 15 de novembro de 2006 00:15
  • Olá Paulo,

    Não sei se já conseguiu encontrar a solução pro seu problema ou se os nossos posts te ajudaram.

    Porém vai mais algumas dicas:

    Em vez de abrir o cursor fazendo um select em sysdatabases, faça em sys.databases.

    Motivo: As tabelas sys* foram mantidas apenas para compatibilidade e na medida do possível tente não utilizá-las.

    Quanto ao procedimento de backup porque você não faz a chamada ao comando direto no código que você citou aqui?

     

    Abraços,

    quarta-feira, 15 de novembro de 2006 23:14
  • Nilton,

    Obrigado pelo informação.

    O script que estou implementando segue a mesma direção do script do site. O que faltava era o teste de status do banco, que estarei complementando no meu.

    Quanto ao meu problema, até o momento, colocar o prefixo "sp_" no nome da procedure está funcionando corretamente, conforme já me foi passado.

    Abraços,

     

    Paulo

     

     

    quarta-feira, 22 de novembro de 2006 15:53
  • Olá Rodrigo,

    Estou testando a solução do prefixo "sp_", e até o momento está funcionando corretamente.

    Em seguida estarei testando a outra solução referente à tabela sys.databases.

    Obrigado por enquanto.

     

    Abraços

     

    Paulo Vilhena

    quarta-feira, 22 de novembro de 2006 15:58