
У меня есть задание, которое я запускаю каждый день, чтобы сделать резервную копию моей базы данных SQL. Я только что купил новый сервер и собирался перенести резервную копию базы данных на новый сервер и восстановить ее. Наша база данных не такая большая, как у большинства компаний, ее размер всего 40 ГБ. Когда я пошел, чтобы скопировать резервную копию, я заметил, что жесткий диск, на котором она хранилась, был заполнен, а резервная копия была размером 900 ГБ. Я использовал это же задание на разных версиях SQL, и резервная копия базы данных никогда не росла так сильно.
- Работает на Windows Server 2008 R2
- Работает SQL Server 2008 R2 Ent
- 64 бит
Я не уверен, что я что-то неправильно написал в скрипте задания, вот код для этого:
РЕЗЕРВНОЕ КОПИРОВАНИЕ БАЗЫ ДАННЫХ [DATABASE] НА ДИСК = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.COMPANY\MSSQL\Backup\DATABASE.BAK' С NOFORMAT, NOINIT, NAME = N'DATABASE', SKIP, NOREWIND, NOUNLOAD, STATS = 10 GO declare @backupSetId as int select @backupSetId = position from msdb..backupset where database_name=N'DATABASE' and backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=N'DATABASE' ) if @backupSetId is null begin raiserror(N'Проверка не удалась. Информация о резервной копии базы данных ''DATABASE'' не найдена.', 16, 1) end RESTORE VERIFYONLY FROM DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.COMPANY\MSSQL\Backup\DATABASE.BAK' WITH FILE = @backupSetId, NOUNLOAD, NOREWIND GO
(Я добавляю теги кода, но по какой-то причине они не применялись)
Может кто-нибудь сказать, почему резервная копия моей базы данных продолжает расти? Спасибо за помощь заранее.
решение1
NOINIT = Указывает, что резервный набор добавляется к указанному набору носителей, сохраняя существующие резервные наборы.
Ваши резервные копии добавляются. Если вы не хотите, чтобы резервная копия продолжала расти, вам нужно использовать INIT.
решение2
Он добавляется в конец каждый раз при резервном копировании.
решение3
Как сказали DanBig и joeqwerty, ваши резервные копии добавляются к одному и тому же файлу. Если вы хотите сохранить версии без добавления или перезаписи, создайте отдельные датированные файлы. Например:
Declare @DBname varchar(255),
@SQL nvarchar(max),
@today nvarchar(50),
@servername nvarchar(50)
set @today = convert(nvarchar,GETDATE(),12)
set @servername = REPLACE(@@SERVERNAME,'\','-')
set @DBName = 'YourDB'
set @SQL='BACKUP DATABASE [' + @DBName + '] TO DISK = N''c:\some backup path\' + @servername + '-' + @DBName + '-' + @today + '.bak'' WITH FORMAT, INIT, NAME = N''Full ' + @DBName + ' Database Backup'', SKIP, NOREWIND, NOUNLOAD, STATS = 10'
EXEC SP_EXECUTESQL @SQL