SQL Server 2008データベースのトランザクションログを切り捨てる方法を教えてください。
可能な最善の方法は何ですか?
私は次のようにブログからこれを試しました:
1)データベースの設定から単純な復元、ファイルの圧縮、そしてもう一度完全な復元に設定すると、実際には貴重なログデータが失われ、特定の時点に復元することができなくなります。それだけでなく、後続のログファイルを使用することもできなくなります。
2)データベースファイルまたはデータベースを縮小すると、断片化が追加されます。
できることはたくさんあります。最初に、ログを切り捨てて頻繁に失うのではなく、次のコマンドを使用して適切なログバックアップを開始します。
BACKUP LOG [TestDb] TO DISK = N'C:\Backup\TestDb.bak'
GO
ファイルを縮小するコードを削除します。適切なログバックアップを行っている場合、ログファイルは通常(通常、特殊なケースは除外されます)大きくなりません。
データベースが完全復旧モードの場合にログファイルを切り捨てる最も安全で正しい方法は、トランザクションログバックアップを実行することです(_TRUNCATE_ONLY
_なし。これは将来のリリースで非推奨になるため、お勧めできません)。
後でログファイルを縮小したいようですが、その場合はDBCC SHRINKFILE(yourTLogName)
コマンドを実行します。縮小する要求されたサイズのオプションの2番目のパラメーターがあります。
ログをnullデバイスにバックアップできます。
backup log [databasename] to disk = 'nul';
または、復旧モデルをシンプルに切り替えてから、再びフル/バルクに戻すこともできます。
ログデータを気にせず、単に削除したい場合:
復旧モデルを完全から単純に変更してから、完全に戻します。 TRUNCATEONLY引数を指定した DBCC SHRINKFILE を使用してファイルを縮小します
次のコマンドは、復旧モデルを完全から単純に変更します
ALTER DATABASE <databse_name> SET RECOVERY SIMPLE
次のコマンドは、復旧モデルを完全に変更します
ALTER DATABASE <databse_name> SET RECOVERY FULL
ログファイルの名前を見つけるには、次のクエリを使用できます。
SELECT name
FROM sys.master_files
WHERE database_id = DB_ID('<databse_name>')
ファイルを縮小する
DBCC SHRINKFILE (N'<logical_file_name_of_the_log>' , 0, TRUNCATEONLY)
これについての詳細は、 SQL Serverログファイルを切り捨てるコマンドは何ですか? を参照してください。