2008年10月20日月曜日

トランザクション ログのサイズを縮小する方法

復旧モデルが単純復旧モデルじゃないとトランザクション ログはバックアップするタイミングでしか削除されずどんどん肥大化してしまうようだ。肥大化したログがドライブを圧迫してしまった場合の対応方法を示す。

肥大化しているログファイル及び復旧モードを調べる
> sqlcmd -S %computername%\Instance_name -E
1> exec sp_databases (データベース名を調べる)
2> go
1> select databasepropertyex('database_name', 'recovery') (復旧モデルを調べる)
2> go
1> select name, physical_name, state_desc from sys.master_files
2> where database_id = DB_ID(N'database_name')
(ログファイルの論理名を name 列で確認)
3> go

ログファイルを空き領域のあるドライブに移動する
> sqlcmd -S %computername%\Instance_name -E
1> alter database database_name set offline (offline にする。データベースへの接続を全て終了しないと offline にできないみたい)
2> go
// ログファイルを空き領域のあるドライブへ移動する。 //
1> alter database database_name modify file (name = logical_name, filename = 'new_path')
2> go
1> alter database database_name set online (online にする)
2> go
1> select name, physical_name, state_desc from sys.master_files
2> where database_id = DB_ID(N'database_name')
(ファイルが変更されたことを確認)
3> go

ログファイルを圧縮する
> sqlcmd -S %computername%\Instance_name -E
1> use database_name
2> go
1> alter database database_name set recovery simple (復旧モデルを simple に変更する)
2> go
1> dbcc shrinkfile (log_logical_name, 1) (1MB に圧縮する)
2> go

(参考)

0 件のコメント: