Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

csv2010

[Resolvido] Job de Backup no SQL2005

Recommended Posts

Bom Dia Pessoal,

 

Criei um job que executa uma procedure diariamente para fazer o backup de todos os meus bancos de dados.

Basicamente a procedure tem um cursor que lê a sys.databases e faz o "backup database" para cada banco de dados retornado.

 

O problema que estou encontrando é que cada dia o job finaliza em um banco de dados diferente, isto é, tenho 30 bancos de dados e em um dia ele faz backup de 20, outro dia de 25, outro dia de 18, e raramente ele faz o backup dos 30 bancos de dados.

O job retorna que finalizou com sucesso, nenhuma mensagem é registrada no errorlog do SQL Server, nem do SQL Agent, e nem mesmo no Event Viewer.

Não tenho problema de espaço e nem de memória.

 

Alguém tem algum idéia do que pode estar acontecendo?

 

A minha versão do SQL é

Microsoft SQL Server 2005 - 9.00.3330.00 (Intel X86) (Build 3790: Service Pack 2)

 

Obrigada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

csv2010, bem vindo ao fórum ;)

 

Provavelmente a database que ele vai fazer o backup esta em uso ou em lock por algum processo, ai ele aborta o backup.

O que você pode fazer, eh no seu script dar um alter database para deixar com single user.

 

Para verificar a versao do SQL, eu utilizo esta sintaxe:

SELECT SERVERPROPERTY('servername') As "Nome do Servidor",
SERVERPROPERTY('productversion') As Versão,
SERVERPROPERTY ('productlevel') As "Service Pack", 
SERVERPROPERTY ('edition') As Edição,
@@Version As "Sistema Operacional"

 

 

 

Veja se resolve.

 

Abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

csv2010, bem vindo ao fórum ;)

 

Provavelmente a database que ele vai fazer o backup esta em uso ou em lock por algum processo, ai ele aborta o backup.

O que você pode fazer, eh no seu script dar um alter database para deixar com single user.

 

Para verificar a versao do SQL, eu utilizo esta sintaxe:

SELECT SERVERPROPERTY('servername') As "Nome do Servidor",
SERVERPROPERTY('productversion') As Versão,
SERVERPROPERTY ('productlevel') As "Service Pack", 
SERVERPROPERTY ('edition') As Edição,
@@Version As "Sistema Operacional"

 

 

 

Veja se resolve.

 

Abçs

 

 

Obrigada por responder rápido.

Mas pelo que entendo de SQL Server, o backup não deveria abortar por ter alguém utilizando ou mesmo ter um processo em lock.

O job é executado as 03:00 AM onde a utilização dos bancos são mínimas, e quando executo o job manualmente no meio do dia, este executa normalmente.

Não tenho como colocar o banco em "single user", pois os bancos não podem ficar indisponíveis em nenhum momento.

 

Alguma outra idéia?

 

Obrigada novamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

csv2010, que eh bizarro eh.... jah peguei um caso assim, por isso comentei de colocar o bd em single_user.

 

No momento do bkp nao tem nenhum outro processo que pode estar afetando o processamento do db? Nao fica, nadinha gravado no log do windows???

Esta instalado todos os sps no server?

 

Posta a o resultado da sintaxe que te passei.....

 

Abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

csv2010, que eh bizarro eh.... jah peguei um caso assim, por isso comentei de colocar o bd em single_user.

 

No momento do bkp nao tem nenhum outro processo que pode estar afetando o processamento do db? Nao fica, nadinha gravado no log do windows???

Esta instalado todos os sps no server?

 

Posta a o resultado da sintaxe que te passei.....

 

Abçs

 

 

muuuito estranho...

 

Seguem os dados do select:

MSSQLSERVER 9.00.3330.00 SP2 Enterprise Edition Microsoft SQL Server 2005 - 9.00.3330.00 (Intel X86) Jul 28 2009 22:33:57 Copyright © 1988-2005 Microsoft Corporation Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2)

 

Uma alternativa que fiz foi jogar o resultado da sys.database em uma tabela temporária para o cursor ler de lá. Aparentemente funcionou, vou ver essa noite se continua fazendo o backup de todos os bancos de dados.

O que não entendo é que a sys.databases é praticamente "estatica", ela não sofre muitas alterações, principalmente à noite. Não tenho nenhum processo concorrendo com o backup e quando executo o job durante o dia com concorrência, o SQL faz o backup de todos os bancos.

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente não deixar tudo executando ao mesmo tempo.

Escalone os períodos de execução dos schedules das jobs.

 

Já vi acontecer isso e parece acontecer por que o job fica rodando e uma hora ele limita o tempo, não dá mensagem de erro, e dá rollback sozinho sem avisar de bug nenhum.

 

Tente deixar uma coisa acontecer de cada vez, ou separe talvez em grupos de 5 em 5 e veja se dá certo.

 

Atenciosamente,

Giancarlo Braga.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente não deixar tudo executando ao mesmo tempo.

Escalone os períodos de execução dos schedules das jobs.

 

Já vi acontecer isso e parece acontecer por que o job fica rodando e uma hora ele limita o tempo, não dá mensagem de erro, e dá rollback sozinho sem avisar de bug nenhum.

 

Tente deixar uma coisa acontecer de cada vez, ou separe talvez em grupos de 5 em 5 e veja se dá certo.

 

Atenciosamente,

Giancarlo Braga.

 

 

Giancarlo,

Tenho apenas um job com uma task agendada para ser executada às 2hs AM, essa task chama uma proc que possui um cursor que faz um select na sys.databases e executa o backup para cada banco de dados. Sendo assim o backup é feito banco a banco, não existindo concorrência entre eles.

 

Consegui resolver o problema jogando o resultado da sys.databases em uma tabela temporária e fazer o cursor de lá. Agora sim o job executa o backup de todos os bancos de dados.

 

Obrigada a todos que me ajudaram na solução deste problema.

 

[]s.

Compartilhar este post


Link para o post
Compartilhar em outros sites

csv2010, de uma olhada nesta procedure:

exec sp_MSforeachdb 'print ''?'''

 

no lugar do print, coloque a sintaxe que você usa de bkp... com isso você evitar cursor e select na sys... em um cliente eu a utilizo para monitoramento de bases...

 

Abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

csv2010, de uma olhada nesta procedure:

exec sp_MSforeachdb 'print ''?'''

 

no lugar do print, coloque a sintaxe que você usa de bkp... com isso você evitar cursor e select na sys... em um cliente eu a utilizo para monitoramento de bases...

 

Abçs

 

 

Junior,

 

Valeu pela idéia, mas agora já está funcionando utilizando a tabela temporária. Vou manter assim mesmo.

 

Tks.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.