
私は毎日、SQL データベースをバックアップするジョブを実行しています。新しいサーバーを購入したばかりで、データベースのバックアップを新しいサーバーに転送して復元するつもりでした。私たちのデータベースは、ほとんどの会社ほど大きくなく、サイズは 40 GB しかありません。バックアップをコピーしようとしたところ、保存先のハード ドライブがいっぱいで、バックアップのサイズが 900 GB であることに気付きました。私は、異なる SQL バージョンで同じジョブを使用したことがありますが、データベースのバックアップがこのように大きくなることはありませんでした。
- Windows Server 2008 R2 の実行
- SQL Server 2008 R2 Ent の実行
- 64ビット
ジョブのスクリプトに何か問題があったかどうかはわかりませんが、そのコードは次のとおりです。
BACKUP DATABASE [DATABASE] TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.COMPANY\MSSQL\Backup\DATABASE.BAK' WITH NOFORMAT、NOINIT、NAME = N'DATABASE'、SKIP、NOREWIND、NOUNLOAD、STATS = 10 GO declaration @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'Verify failed. Backup information for database ''DATABASE'' not found.', 16, 1) end RESTORE VERIFYONLY FROM DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.COMPANY\MSSQL\Backup\DATABASE.BAK' 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