2012年3月8日木曜日

SQLServer2005のトランザクションログ切捨ての結果

さて、この間の続きですが、無事ログの切捨てと圧縮はされたのでしょうか。

まずは、ログの切り捨てを妨げている原因がどうなったかを確認。
SELECT  name, log_reuse_wait, log_reuse_wait_desc FROM  sys.databases WHERE name = 'データベース名')
GO
log_reuse_wait_desc⇒NOTHING

問題は払拭されたようです。
念のため、実行中のトランザクションがあるか確認。

DBCC OPENTRAN('データベース名'')
GO
開かれたアクティブなトランザクションがありません。
DBCC の実行が完了しました。DBCC がエラー メッセージを出力した場合は、システム管理者に相談してください。
よし、ないです。

ではディスク容量を確認。残り15GBが50GBへ増えてました。


2012年3月6日火曜日

SQLServer2005のトランザクションログの切捨て

SQLServer2005のトランザクションログが肥大化したのでメモ。

復旧モデル:完全
ミラーリング動作モード:高パフォーマンス(非同期)
レプリケーション:スナップショットレプリケーション(パブリッシャー)

毎晩完全バックアップをとっているが、どうもトランザクションログの切捨てが行われてない模様。
というのは、データベースの圧縮をして気づいたこと。
ちなみに、自分だけかもしれないがデータベース圧縮すると、ミラーリングが停止してしまう?!(その時は再開しましょう)

まずはこれを試してみた。

「HowTo: Management Studio を使ってトランザクションログファイル (ldf) のサイズを小さくする方法」
http://blogs.msdn.com/b/jpsql/archive/2011/12/20/manegement-studio-ldf.aspx

結果、小さくならないのでその記事の中の
「この手順を実施してもトランザクションログファイルが小さくならない場合」をやってみた。

DBCC OPENTRAN(‘データベース名’) 
をやったらこうなった。

データベース 'データベース名' のトランザクション情報。
レプリケートされたトランザクション情報:
        配布された最も古い LSN       : (0:0:0)
        配布されなかった最も古い LSN : (13658:19580:1)
DBCC の実行が完了しました。DBCC がエラー メッセージを出力した場合は、システム管理者に相談してください。

あれ?これがログ切捨てできない原因??もう一つ試す。

SELECT  name, log_reuse_wait, log_reuse_wait_desc FROM  sys.databases WHERE name = 'データベース名'
をやったらこうなった。

| name| log_reuse_wait| log_reuse_wait_desc
KanzaiApplications, 6, REPLICATION

レプリケーションが悪さをしているようですね。

このメッセージがでないようになればよいので、いくつか試してみた。
1.「レプリケーションモニタ」から「すねてのサブスクリプションの再初期化」⇒結果変わらず
2.サブスクリプションの「同期の停止」⇒結果かわらず
3.パブリケーションを削除(ぉぃ)してから再作成⇒悪いメッセージはでなくなった。

うーん、パブリケーションとサブスクリプションを再作成すると直ったという理由がよくわかりませんが、現状はこうなりました。

DBCC OPENTRAN(‘データベース名’) 
GO
開かれたアクティブなトランザクションがありません。
DBCC の実行が完了しました。DBCC がエラー メッセージを出力した場合は、システム管理者に相談してください。
SELECT name, log_reuse_wait, log_reuse_wait_desc FROM sys.databases WHERE name = 'データベース名'
GO
| name| log_reuse_wait| log_reuse_wait_desc
KanzaiApplications, 2, LOG_BACKUP


これでトランザクションログが切捨てられるか、また後程。