SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

SQL Server のログローテーション

leave a comment

Microsoft SQL Server Japan Support Team Blog さんのブログで [Tips] SQL Server エラーログとイベント ログを採取する (SQL 2000 ~ 2008 R2) についての記事がありましたので、私はログのローテーションについて書いてみたいと思います。

■SQL Server のログローテーション


今回のログは ERRORLOG を対象としています。

SQL Server の上記のログはサービスの起動時にローテーションが行われ、デフォルトでは最大で 7 世代分取得が行われます。
# ERRORLOG ~ ERRORLOG.6 の 7 ファイル

ログに出力している内容が多い場合、連続稼働が長いサーバーではファイルのサイズが大きくなり、開こうとした場合に時間がかかる、特定の日付のログを探すのに時間がかかることがあります。

サービスの再起動をせず、SQL Server が起動している状態でログをローテーションさせるためには、[sp_cycle_errorlog] を使用します。

このストアドは内部では [DBCC ERRORLOG] を実行しているシンプルな処理となっていますが、実行するとログが自動でローテーションされます。
ローテーションをすると一番古い世代 (ERRORLOG.6) のファイルが削除されますので、一定の世代数ファイルを保持したい場合は、ファイルのバックアップを取得してからストアドを実行するというような対応が必要となります。

SQL Server では SQLCMD コマンドを使用することでコマンドからも SQL を実行することができますので、バッチファイルでローテーションさせることも可能です。
# ファイル名の設定を考慮すると WSH や PowerShell で設定してしまったほうが楽だと思いますが。

SET LOGDIR=C:Program FilesMicrosoft SQL ServerMSSQL11.SQL2012MSSQLLog
CD %LOGDIR%
RENAME  ERRORLOG.6 ERRORLOG.%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%
SQLCMD -E -S “.SQL2012” -Q “sp_cycle_errorlog”

xx 日分、ERRORLOG を保存というのは、実際には難しいと思いますので、SQL Server のサービスの再起動が行われた際にローテーションされるということを注記したうえで、SSMS の SQL Server エラーログの構成から世代数を変更するのが妥当かと思いますが。

Written by masayuki.ozawa

4月 2nd, 2012 at 4:12 pm

Posted in SQL Server

Tagged with

Leave a Reply

*