RSYNC x VSS Writer – current database backup does not exist

Esses dias me deparei com a seguinte mensagem de erro no job de backup differential de um dos bancos de dados:

Cannot perform a differential backup for database “nome_do_banco”, because a current database backup does not exist“.

Inicialmente fiquei intrigado, pois tinha certeza que os jobs de backup FULL estavam executando normalmente então não havia motivo, ao menos não aparente, para a cadeia de backups estar sendo “quebrada”.

A única coisa que havia de “diferente” relativo a esses backups é que os backups FULL são copiados utilizando RSYNC para um outro local, o que ao menos me deu um ponto de partida.

Ao iniciar minha pesquisa na internet, vários links apontavam para um antigo bug da época do SQL Server 2005 SP2 ou a um problema relativo ao ntbackup.

Como ambos não eram o meu caso continuei pesquisando até achar essa página que basicamente solucionou o problema (na verdade ela fala do ntbackup, mas a idéia do problema é a mesma).

Basicamente o que estava acontecendo era que, ao executar, o RSYNC (ou similares) invoca TODOS os VSS Writers, incluindo o SQL Writer que, ao ser invocado, coloca o banco de dados em um estado válido, ou seja, descarrega tudo que está no cache e que foi alterado para o arquivo em disco (esse processo é chamado de flush cache to disk). Esse processo de flush é necessário, pois sem isso o backup seria feito em cima do arquivo de banco de dados sem as alterações já feitas nos dados em memória, o que levaria a um backup inconsistente dos dados.

Aqui surgem duas dúvidas. Como posso verificar se isso está realmente acontecendo e por que isso pode causar esse tipo de problema?

Para verificar se isso está ocorrendo basta abrir o log do SQL Server e procurar por mensagens do tipo:

“I/O is frozen on database NOME_DO_BANCO. No user action is required. However, if I/O is not resumed promptly, you could cancel the backup.”

e

“I/O was resumed on database NOME_DO_BANCO. No user action is required.”

e

“Database backed up. Database: NOME_DO_BANCO, creation date(time): 2011/03/16(10:25:32), pages dumped: 1, first LSN: 6131:183640:126, last LSN: 6131:183692:1, number of dump devices: 1, device information: (FILE=1, TYPE=VIRTUAL_DEVICE: {‘{DD5BA04D-6FC6-4B73-B77E-1C282704CC8C}1’}). This is an informational message only. No user action is required.”

Essas mensagens serão registradas no log no horário que o RSYNC executou, então não deve ser problema encontrá-las.

Já para entender por que a operação do RSYNC causa esse tipo de problema precisamos entender que toda vez que um backup FULL é executado o SQL Server altera um flag interno que diz se há um backup FULL ou não. Nesse caso esse flag interno não está sendo devidamente alterado, o que faz com que ao executar o backup DIFFERENTIAL o SQL Server tente validar o mesmo e não conseguir, causando assim a falha do backup.

Caso você queira ainda validar se esse realmente é seu problema pode consultar as tabelas de sistema para listar os backups realizados para o banco de dados em questão e nele verá um resultado similar a esse abaixo onde temos listado (no horário de execução do RSYNC) um backup FULL para o banco de dados em questão!

SELECT a.type,physical_device_name, backup_start_date, backup_finish_date
FROM msdb.dbo.backupset a
INNER JOIN msdb.dbo.backupmediafamily b ON a.media_set_id = b.media_set_id
WHERE database_name = 'NOME_DO_BANCO' and a.type = 'D'
ORDER BY backup_start_date desc

Veja que o “physical_device_name” no horário de execução do RSYNC é o mesmo encontrado na mensagem que vimos no log de erro do SQL Server. Já nos demais backups este apresenta o caminho onde você configurou seus backups FULL.

Por fim precisamos então saber como resolver esse problema. Para isso precisamos PARAR o serviço do SQL Writer e DESABILITAR o mesmo, ou seja, alterar seu tipo de inicialização para “disabled”, pois assim quando o RSYNC executar o SQL Writer não poderá ser invocado. Após essa alteração, seus backups voltarão a funcionar normalmente e não haverão mais registros de backup no horário da execução do RSYNC.

Esse post foi publicado em Artigos, backup, Virtual PASS BR. Bookmark o link permanente.

3 respostas para RSYNC x VSS Writer – current database backup does not exist

  1. Isso acontece tambem com o DPM, pois ele congela o arquivo MDF e LDF para realizar o backup a quente, mas claro tudo acontece com o VSS Writer..

    Otimo post, gostei bastante.
    Marcos Freccia

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s