SQL Server 2000 - Есть ли быстрый способ удаления истории резервного копирования?

У нас есть экземпляр SQL Server 2000, где MSDB вырос до огромного размера из-за того, что история резервного копирования никогда не удалялась за несколько лет. Я хотел бы полностью очистить историю резервного копирования (я не понимаю, зачем это нужно) и освободить место на диске, используемое всеми этими данными.

Я понимаю, что вы можете использовать команду sp_delete_backuphistory, но это слишком медленно (в течение 2+ часов ничего не происходит), а при выполнении файла журнала транзакций увеличивается заполнение всего диска (несколько ГБ). SQL Server 2000, похоже, не поддерживает эту базу данных по базе данных.

Мне нужно найти способ удаления всех данных, которые сначала не заполняют диск. Таким образом, либо удаляем поэтапно, чтобы журнал не становился большим или, возможно, каким-то образом использовал таблицу обрезания, но я не уверен, есть ли безопасный способ сделать это, и поскольку я не эксперт SQL, действительно знаю, как это сделать, не разрушая мою MSDB данных MSDB !

Любая помощь будет оценена!

3 ответа

Попытайтесь уменьшить количество строк, которые вы удаляете за один раз. Первый параметр sp_delete_backuphistory - самый старый день для сохранения.

EXEC sp_delete_backuphistory '2000-01-01'
EXEC sp_delete_backuphistory '2001-01-01'
EXEC sp_delete_backuphistory '2002-01-01'
...

Это также может помочь снизить модель восстановления до Simple если она в настоящий момент находится в режиме Full.


Я использую что-то вроде следующего:

declare @oldest_date datetime, @newest_date datetime

select @oldest_date = min(backup_start_date) from backupset
select @newest_date = dateadd(day, -45, getdate())

while(@oldest_date <= @newest_date)
begin
 exec sp_delete_backuphistory @oldest_date
 set @oldest_date = dateadd(day, 7, @oldest_date)
end

Это приведет к удалению недельной истории за раз, пока вы не поймаете. Приятно, что вы можете придерживаться этого в задании и периодически запускать его (например, еженедельно), и это будет сделано правильно.


Сначала сделайте резервную копию, затем создайте базу данных за каждый год и восстановите базу данных из файла резервной копии за один год. затем очистить весь файл журнала после выполнения всего процесса.

licensed under cc by-sa 3.0 with attribution.