10

2 つのデータベース間でトランザクション レプリケーションを実行しています。少し同期がずれているのではないかと思いますが、影響を受けるレコードはわかりません。知っていれば、加入者側で手動で修正できました。

SQL Server から次のメッセージが表示されます。

レプリケートされたコマンドを適用するときに、サブスクライバーで行が見つかりませんでした。(ソース: MSSQLServer、エラー番号: 20598)

問題の原因となっているテーブル、またはさらに良いのはどのレコードであるかを調べてみましたが、その情報はどこにも見つかりません。

これまでに見つけた最も詳細なデータは次のとおりです。

トランザクション シーケンス番号: 0x0003BB0E000001DF000600000000、コマンド ID: 1

しかし、そこからテーブルと行を見つけるにはどうすればよいでしょうか? 何か案は?

4

8 に答える 8

11

これにより、エラーが発生しているテーブルが得られます

use distribution
go

select * from dbo.MSarticles
where article_id in (
    select article_id from MSrepl_commands
    where xact_seqno = 0x0003BB0E000001DF000600000000)

これにより、コマンド(およびコマンドが実行された主キー(つまり行))が得られます

exec sp_browsereplcmds 
@xact_seqno_start = '0x0003BB0E000001DF000600000000', 
@xact_seqno_end = '0x0003BB0E000001DF000600000000'
于 2010-04-21T05:15:37.330 に答える
9

私が最終的に使用した回避策で、私自身の質問に答えます。

残念ながら、SQL Server レプリケーション インターフェイス (またはイベント ログ) を介して、どのテーブルが問題を引き起こしているかを特定できませんでした。言わなかっただけです。

次に考えたのは、「エラーが発生してもレプリケーションを継続できるとしたら?」ということでした。そして見よ、方法がある。実際、それは簡単です。「データ整合性エラーが発生しても続行」という特別なディストリビューション エージェント プロファイルがあります。これを有効にすると、これらのタイプのエラーはログに記録されて渡されます。トランザクションを適用し、潜在的にエラーをログに記録したら (2 つしか発生しませんでした)、戻って RedGate SQL Data Compare (または他のツール) を使用して 2 つのデータベースを比較し、サブスクライバーに修正を加えてから、レプリケーションの実行を再開します。

これが機能するためには、サブスクライバー データベースの差分と修正を行うプロセスの一部の間、パブリケーション データベースが "静か" である必要があることに注意してください。幸いなことに、この場合、私にはその余裕がありました。

于 2009-02-20T04:51:22.163 に答える
3

データベースが極端に大きくない場合は、レプリケーションを停止し、スナップショットを再作成してから、レプリケーションを再開します。このTechnet 記事では、手順について説明します。

ユーザーが誤ってレプリカのデータを変更したために同期が取れなくなった場合は、これを防ぐために必要なアクセス許可を設定します。

この複製記事は読む価値があります。

于 2009-02-19T22:50:07.803 に答える
1

次のクエリを使用して、同期していない記事を見つけます。

USE [distribution]

select * from dbo . MSarticles 
where article_id IN ( SELECT Article_id from MSrepl_commands 
where xact_seqno = 0x0003BB0E000001DF000600000000)
于 2012-07-31T20:13:12.743 に答える
0

もちろん、レプリケーションが失敗したときにエラーを確認すると、どのレコードに障害があるかがわかるため、コア システムからそのデータを抽出してサブスクライバーに挿入することができます。

これは、エラーをスキップするよりも優れています。SQL データ比較では、比較のためにテーブルがロックされ、何百万もの行がある場合、実行に時間がかかる可能性があるためです。

トリス

于 2009-07-08T03:51:07.563 に答える
0

プロファイルを「データ整合性エラーで続行」に変更しても、常に機能するとは限りません。明らかに、エラーを減らしたり無効にしたりしますが、適切なデータ全体を取得することはできません。エラーが発生した行をスキップするため、正確なデータを取得できません。

于 2010-01-25T14:07:25.770 に答える