質問

別のシステムからのデータは、Goldengateを使用して、リアルタイム(1日あたり数百トランザクション/秒)でSQL Server 2005データベースに複製されます。最近トランザクションが発生したかどうかを確認したいと思います。これにより、レプリケーションが現在発生しているかどうかがわかります。営業時間外であっても、数分ごとにトランザクションが発生する可能性がありますが、400のテーブルのうちどのテーブルに入るかわかりません。

現在のプロセスは次のとおりです。

  1. 最も一般的な複製テーブルでのIUDトリガー
  2. 「同期通知」の日付を更新そのテーブルでアクティビティがあるたびにテーブル
  3. SQLエージェントジョブは数分ごとに実行され、この日付をGETDATE()と比較します。長すぎる場合は、メールで通知されます。

これはほとんどの場合は機能しますが、他のテーブルにアクティビティがあり、監視対象のものではない場合に誤検出が発生します。これは夜間に発生する可能性があります。

データベース内のすべてのテーブルにこの同じトリガーを追加する以外の提案はありますか?トリガーを追加する場合、「同期通知」のデッドロックと競合を防ぐ方法表?競合の激しい期間に最新の日付が正確であるかどうかは気にしないので、SQLに日付の更新を試行させる方法はありますか?

唯一の「アプリケーションレベル」私が選択できるのは、GoldengateモニターにTELNETし、レプリカの遅延を確認してから、結果をスクリーンスクレイピングすることです。私はそれを受け入れますが、もっと可能であればSQL側で何かしたいです。

役に立ちましたか?

解決

これは自動化されたジョブですか、それとも時々見たいものですか?後者の場合は、トランザクションログ調査ツール(Redgate Log Rescue、Apex SQLLog、おそらくその他)を使用できます。

別のオプションとして、sysindexes(SQL Server 2000:dbo.sysindex; 2005:sys.sysindexes)があります。 rowmodctr列(MSDNを引用)は、テーブルの統計が最後に更新されてから挿入、削除、または更新された行の総数をカウントします。 。知る必要のあるすべてを返すとは限りませんが、インデックスをカバーしていれば、定期的にサンプリングした場合、変更の数と場所が示されます。

他のヒント

SELECT * FROM :: fn_dblog(@startLSN、NULL)を確認して、最後のチェック以降に LOP_MODIFY_ROW 操作が発生したかどうかを確認できます(最後にチェックしたLSN以降) 。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top