web-dev-qa-db-ja.com

SQL Server 2008データベースのトランザクションログを切り捨てる方法を教えてください。

SQL Server 2008データベースのトランザクションログを切り捨てる方法を教えてください。

可能な最善の方法は何ですか?

私は次のようにブログからこれを試しました:

1)データベースの設定から単純な復元、ファイルの圧縮、そしてもう一度完全な復元に設定すると、実際には貴重なログデータが失われ、特定の時点に復元することができなくなります。それだけでなく、後続のログファイルを使用することもできなくなります。

2)データベースファイルまたはデータベースを縮小すると、断片化が追加されます。

できることはたくさんあります。最初に、ログを切り捨てて頻繁に失うのではなく、次のコマンドを使用して適切なログバックアップを開始します。

BACKUP LOG [TestDb] TO  DISK = N'C:\Backup\TestDb.bak'
GO

ファイルを縮小するコードを削除します。適切なログバックアップを行っている場合、ログファイルは通常(通常、特殊なケースは除外されます)大きくなりません。

9
Neo

データベースが完全復旧モードの場合にログファイルを切り捨てる最も安全で正しい方法は、トランザクションログバックアップを実行することです(_TRUNCATE_ONLY_なし。これは将来のリリースで非推奨になるため、お勧めできません)。

後でログファイルを縮小したいようですが、その場合はDBCC SHRINKFILE(yourTLogName)コマンドを実行します。縮小する要求されたサイズのオプションの2番目のパラメーターがあります。

4
Thomas Stringer

ログをnullデバイスにバックアップできます。

backup log [databasename] to disk = 'nul';

または、復旧モデルをシンプルに切り替えてから、再びフル/バルクに戻すこともできます。

8
Luis Gonzalez

ログデータを気にせず、単に削除したい場合:

復旧モデルを完全から単純に変更してから、完全に戻します。 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ログファイルを切り捨てるコマンドは何ですか? を参照してください。

6
Alex