Backups do SQL Server 2005 para os 5 dias anteriores no disco?

2

Meu objetivo é simples. Eu quero ter o SQL Server manter um backup noturno de um banco de dados por um período de 5 dias.

Então, a cada noite, em algum momento, eu quero um novo backup de banco de dados feito e um excluído, de modo que eu tenha 5 dias em disco.

Estou tentando configurar um plano de manutenção para lidar com esse trabalho e salvar o arquivo (eu acho). Eu tenho os backups sendo anexados para que um único arquivo bak contenha os 5 dias corridos (não tenho certeza se isso funcionará 0 porque como a SQL saberá o que excluir, e excluir o arquivo bak único removerá todos os backups).

Como você pode dizer por que está tendo problemas para descobrir como remover backups antigos do banco de dados para que Y tenha apenas os 5 mais recentes no disco.

Alguma dica para mim sobre isso?

    
por kacalapy 19.10.2010 / 22:15

3 respostas

0

Os planos de manutenção, conforme sugerido, são um bom caminho a seguir. Uma alternativa é usar um trabalho agendado que chame um procedimento armazenado como este;

CREATE PROCEDURE backup_all_databases
@path VARCHAR(255)='c:\backups\'
AS
DECLARE @name VARCHAR(50) -- database name
DECLARE @fileName VARCHAR(256) -- filename for backup
DECLARE @fileDate VARCHAR(20) -- used for file name
DECLARE @dbIsReadOnly sql_variant -- is database read_only?
DECLARE @dbIsOffline sql_variant -- is database offline?

DECLARE db_cursor CURSOR FOR

SELECT name FROM master.dbo.sysdatabases WHERE name NOT IN ('tempdb') AND version > 0 AND version IS NOT NULL
OPEN db_cursor

FETCH NEXT FROM db_cursor INTO @name

WHILE @@FETCH_STATUS = 0 
BEGIN
SET @fileName = @path + @name + '.bak'  -- + '_' + @fileDate + '.BAK'
SET @dbIsReadOnly = (SELECT DATABASEPROPERTY(@name, 'IsReadOnly')) -- 1 = Read Only
SET @dbIsOffline = (SELECT DATABASEPROPERTY(@name, 'IsOffline')) -- 1 = Offline
IF (@dbIsReadOnly = 0 OR @dbIsReadOnly IS NULL) AND @dbIsOffline =0
BEGIN
BACKUP DATABASE @name TO DISK = @fileName  WITH INIT
END
FETCH NEXT FROM db_cursor INTO @name 
END
CLOSE db_cursor
DEALLOCATE db_cursor
GO

Adapte-o para acrescentar um registro de data e hora ao nome do arquivo de backup. E adicione qualquer parâmetro expirado ou retido que você precisar. Como o BOBS sugeriu, você também pode usar uma tarefa de limpeza de manutenção para limpar arquivos de backup mais antigos que 5 dias. Isso fornece backups individuais para cada dia. Você pode executá-lo de hora em hora ou em x vezes durante o dia ou uma vez por dia, o que precisar.

    
por 20.10.2010 / 10:14
3

Se você estiver usando Planos de manutenção, há uma "Tarefa de limpeza de manutenção" que pode ser adicionada ao seu plano, usada para limpar arquivos BAK depois de tantos dias. Basta colocar esta tarefa após o seu "Back Up Database Task" e configurá-lo para excluir arquivos de backup mais velhos, em seguida, 5 dias, e você deve estar pronto para ir.

HTH, Dan

    
por 19.10.2010 / 23:35
0

No comando TSQL BACKUP, há duas opções de conjunto de backup que podem ser definidas. Há EXPIREDATE para indicar a data em que o backup expira e RETAINDAYS para indicar o número de dias para manter o backup. Você usaria as opções RETAINDAYS e as definiria em 5 dias. O processo de backup fará o resto.

Na configuração do plano de manutenção, você deverá ver opções semelhantes ao definir a tarefa de backup do banco de dados. Você pode indicar por quanto tempo manter o backup.

Não há uma opção nos planos de manutenção para indicar o número de backups a serem salvos.

    
por 19.10.2010 / 22:27