この記事は、CDC 対応データベースのトランザクション ログが継続的に増加する問題を解決するのに役立ちます。
元の製品バージョン: SQL Server 2012 以降のバージョン
元の KB 番号: 2871474
現象
以下のシナリオについて考えてみます。
- Windows では、SQL Server 2017、SQL Server 2016、SQL Server 2014、または SQL Server 2012 を使用します。
- Attunity 社の Change Data Capture for Oracle を使用します。
- CDC インスタンスを作成して、Oracle データベース テーブルからの変更をキャプチャします。
- 変更キャプチャの値は、SQL Server 変更キャプチャ データベースに格納されます。
- SQL Server データベースのトランザクション ログが大きくなり、データの変更がキャプチャされると、トランザクションは切り捨てのマークが付けられません。
このシナリオでは、SQL Server データベース トランザクション ログ ファイルの増加が蓄積され、時間の経過と同時に過剰なディスク領域が消費されます。
原因
Oracle インスタンスの変更データ キャプチャを構成すると、変更データを受け取る SQL データベースには、レプリケーション用にマークされたトランザクションを含むミラー化されたテーブルが含まれます。 この動作は、CDC for Oracle が、CDC for SQL Server で使用されているものに似た基礎システム ストアド プロシージャに依存しているために発生します。 ただし、CDC for Oracle を単独で使用する場合、SQL CDC レプリケーションは関係しないため、レプリケーション用にマークされたトランザクションをクリアするためのログ リーダーはありません。 トランザクションは SQL Server でレプリケートする必要がないため、この記事で後述する回避策を使用して、トランザクションを手動で分散としてマークしても安全です。
この正確な原因を確認するには、SQL Server CDC データベースに接続しているときに DBCC OPENTRAN コマンドを実行します。 次の例に示すように、非分散 LSN 番号が表示されます。
Replicated Transaction Information:
Oldest distributed LSN : (0:0:0)
Oldest non-distributed LSN : (38:272:1)
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
CDC for Oracle では SQL ストアド プロシージャに CDC が使用され、レプリケーション ログ リーダーが使用されるため、非分散 LSN が存在する可能性があります。 この非分散 LSN は、Attunity CDC データベースにミラー化されたテーブルを追加するログ エントリに対応します。
このクエリを実行すると、 log_reuse_wait_desc オプションは原因を示す REPLICATIONの値を返します。
SELECT log_reuse_wait_desc FROM sys.databases WHERE name = '<your_cdc_database>'
解決方法
SQL Server の CDC 対応データベースに接続されているクエリ ウィンドウで、次のコマンドを実行します。
EXEC sp_repltrans次のような出力が表示されます。
xdesid xact_seqno xact_seqno 0x000000260000012C0001 0x0000002A000001B50001次のコマンドの LSN トランザクション シーケンス番号をコピーします。
手順 1 の数値を使用して、次のように
sp_repldoneコマンドを実行して、BeginTran と CommitTran LSN のペアが既にレプリケートされていることを通知します。sp_repldone @xactid = 0x000000260000012C0001, @xact_segno = 0x0000002A000001B50001次のコマンドを実行して、トランザクションが CDC データベースにレプリケート済みとしてマークされていることを確認します。
DBCC OPENTRANこれにより、次のような出力が返されます。
No active open transactions. DBCC execution completed. If DBCC printed error messages, contact your system administrator.トランザクション ログを再利用できるようにするには、データベースに他の再利用理由が示されていないことを確認します。
SELECT log_reuse_wait_desc, NAME FROM sys.databases WHERE NAME = '<your_cdc_database>'これにより、次のような出力が返されます。
log_reuse_wait_desc name NOTHING <your_cdc_database>これで、ログ バックアップを使用してトランザクション ログを切り捨てることができるようになりました。 また、トランザクション ログ ファイルを圧縮して、消費されるディスク領域を減らすこともできます。 たとえば、次のように実行します。
BACKUP LOG <your_cdc_database> TO DISK='c:\folder\logbackup.trn' DBCC SHRINKFILE (yourcdcdatabase_log, 1024)
詳細については、「 トランザクション ログ ファイルのサイズを管理する」を参照してください。
詳細
詳細については、 Microsoft Change Data Capture for Oracle by Attunity での CDC インスタンス エラーのトラブルシューティングを参照してください。
この資料に記載されているサードパーティ製品は、マイクロソフトと関連のない他社の製品です。 明示的か黙示的かにかかわらず、これらの製品のパフォーマンスや信頼性についてマイクロソフトはいかなる責任も負わないものとします。