その質問に適切なタイトルを付けるのは少し難しいので、問題を説明しようと思います。Oracle --> JCCを使用したSQL Serverレプリケーションがあります。Oracle でトランザクション ログを読み取り、変更ごとにINSERT + UPDATEの2 つのステートメントを送信するという仕組みです。したがって、そのようなレコードがない場合は、SQL Serverにレコードが既に存在する場合に挿入されます。そのため、最初のINSERTはPK違反のために失敗し、レコードを更新しようとします。
現在、履歴追跡にSQL Server テンポラル テーブルを使用しようとしています。ログを再生する必要があるため、 JCC (レプリケーション) が失敗すると問題が発生します。たとえば、午前 11 時 1 分にレプリケーションが失敗したとします。レコードを見逃さないようにするために、たとえば午前 10 時 45 分から再生する必要があります。通常のテーブルではうまく機能しますが、一時的なテーブルを扱うと、履歴が台無しになり、履歴が不正確になります。
それで、今質問です。これらのレコードを特定してクリーンアップするにはどうすればよいですか?
CREATE TABLE #temptable ( [UPDATE_DATE] datetime, [SysStart] datetime2(7), [SysEnd] datetime2(7), [key_column] char(8) )
INSERT INTO #temptable
VALUES
( N'2017-10-23T17:21:34', N'2017-10-23T21:21:44.5514785', N'2017-10-25T10:24:23.604867', '41862277' ),
( N'2017-10-23T16:21:43', N'2017-10-25T10:24:23.604867', N'2017-10-25T10:24:24.4954892', '41862277' ),
( N'2017-10-23T16:49:02', N'2017-10-25T10:24:24.4954892', N'2017-10-25T10:24:25.5111274', '41862277' ),
( N'2017-10-23T17:20:58', N'2017-10-25T10:24:25.5111274', N'2017-10-25T10:24:25.5111274', '41862277' ),
( N'2017-10-23T17:21:34', N'2017-10-25T10:24:25.5111274', N'2017-10-25T10:24:25.5111274', '41862277' ),
( N'2017-10-10T14:17:49', N'2017-10-20T14:25:24.7135228', N'2017-10-23T20:21:52.6602561', '41862277' ),
( N'2017-10-23T16:21:43', N'2017-10-23T20:21:52.6602561', N'2017-10-23T20:49:08.6122864', '41862277' ),
( N'2017-10-23T16:49:02', N'2017-10-23T20:49:08.6122864', N'2017-10-23T21:20:58.7073273', '41862277' ),
( N'2017-10-23T17:20:58', N'2017-10-23T21:20:58.7073273', N'2017-10-23T21:21:34.426412', '41862277' ),
( N'2017-10-23T17:21:34', N'2017-10-23T21:21:34.426412', N'2017-10-23T21:21:44.5514785', '41862277' )
DROP TABLE #temptable