Plano de backup do SQL Server 2008 R2 não excluindo arquivos com mais de X dias definidos no plano de manutenção

3

Temos um plano de manutenção de banco de dados configurado para fazer um backup completo de todos os bancos de dados do usuário todas as noites. Os backups estão definidos para expirar após sete dias e são copiados para o disco com a extensão de arquivo "bak".

O problema é que o trabalho não está excluindo nenhum conjunto de backups com mais de sete dias (o mesmo vale para o trabalho que faz backup do log de transações).

Todos os bancos de dados submetidos a backup têm seus modelos de recuperação definidos como "Completo".

O SQL Server Agent está fazendo logon como Sistema Local e "SYSTEM" tem direitos totais para as pastas onde esses backups são salvos bi.

As tarefas não estão relatando nenhum erro quando são executadas manualmente e não há erros nos arquivos de log.

Se eu criar um plano de manutenção de teste para excluir arquivos de texto em um diretório e executar o T-SQL gerado, o comando será concluído com êxito, mas o arquivo de texto no diretório não será removido.

EXECUTE master.dbo.xp_delete_file 0,N'D:\TEST',N'.txt'

Eu sei que é uma questão de direitos, mas tudo parece bem em nosso fim.

Alguém tem alguma ideia?

Obrigado.

    
por Tom 29.06.2011 / 15:40

2 respostas

1

Pelo que entendi, você os exclui no plano de manutenção usando Tarefa de limpeza de manutenção especial ou via "Execute T-SQL Statement Task"? Embora isso não deva importar.

Ao olhar para a sua instrução SQL, acho que poderia ser a extensão do arquivo: deveria ser sem ponto, apenas extensão por conta própria.

Eu duvido que seja um problema de permissão, já que você pode criar backups em primeiro lugar. Mas verifique se SQLServerMSSQLUser$... group tem acesso total - é assim que eu tenho em todos os locais de "backup" (essas permissões devem ser configuradas automaticamente se você definir essa pasta como destino de backup padrão durante a configuração inicial).

AFAIK xp_delete_file não está documentado e não encontrei referências no SQL Books para ele. Aparentemente, o SQL Server verifica qual arquivo é antes de excluí-lo - ele funciona apenas com arquivos próprios (para evitar uso / segurança incorretos, eu acho). Aqui estão o formato e os parâmetros:

EXECUTE master.sys.xp_delete_file
0, -- FileTypeSelected (0 = FileBackup, 1 = FileReport)
N'D:\SQLbackups\', -- folder path (trailing slash)
N'bak', -- file extension which needs to be deleted (no dot)
N'2011-06-15T15:10:04', -- date prior which to delete
1 -- subfolder flag (1 = include files in first subfolder level, 0 = not)

Ao olhar para o seu exemplo de instrução SQL, vejo algumas diferenças:

  • No primeiro parâmetro, você tem 0 (backups de arquivo), mas tenta excluir o arquivo de texto
  • A extensão de arquivo deve excluir o ponto
  • Você deve fornecer a data de expiração (arquivos mais antigos que serão excluídos)

Link: link

    
por 29.06.2011 / 15:56
1

Isso é só um tiro, mas eu fui mordido por incluir um "." na caixa de extensão de arquivo ao criar planos de manutenção. Verifique se você tem ".bak" em vez de "bak".

    
por 29.06.2011 / 15:50