跳至內容
Astera Technology

同步紀錄寫成功,目標系統卻找不到資料,怎樣排查?

用外部固定編號對照目標紀錄,先查差異,再決定是否重試寫入。

先訂清楚要判斷甚麼,再準備資料

流程記錄寫「成功」,不等於目標資料現時一定存在。以固定編號查目標有沒有紀錄,再去除多次成功記錄造成的重複列項。排查前要確認目標匯出齊全、截數時間合適,才可判斷是否真正漏寫。

以下全部是假設資料。請在新的 SQLite 測試資料庫建立各表,再執行唯讀查詢。數量以件計,金額以港元的分作整數儲存;顯示港元時除以 100。

假設輸入節錄;完整相關資料見下方 SQL
編號外部編號結果代碼
1X1success
2X2success
3X3failed
下載可編輯 CSV ↓
可直接執行的完整假設資料(SQLite)
CREATE TABLE import_rows(id INTEGER PRIMARY KEY, external_id TEXT, email TEXT, amount_cents INTEGER, business_date TEXT);
CREATE TABLE sync_attempts(id INTEGER PRIMARY KEY, external_id TEXT, outcome TEXT);
CREATE TABLE target_records(id TEXT PRIMARY KEY, external_id TEXT UNIQUE);
INSERT INTO import_rows VALUES (1,'X1','a@example.test',10000,'2026-10-01'),(2,'X2',' ',20000,'03/04/2026'),(3,'X3',NULL,NULL,NULL),(4,'X4','d@example.test',0,'2026-02-30');
INSERT INTO sync_attempts VALUES (1,'X1','success'),(2,'X2','success'),(3,'X3','failed');
INSERT INTO target_records VALUES ('T1','X1');

執行查詢,核對實際結果

SQLite 唯讀查詢
SELECT DISTINCT a.external_id FROM sync_attempts a
WHERE a.outcome='success' AND NOT EXISTS (
 SELECT 1 FROM target_records t WHERE t.external_id=a.external_id
) ORDER BY a.external_id;
以上 SQLite 假設資料的查詢結果
外部編號
X2
下載可編輯 CSV ↓

X2 記錄成功,但目標沒有對應資料;X1 已有 T1,沒有差異。X3 本來失敗,應在失敗清單處理。重試 X2 前先查回覆及目標歷史,否則目標匯出只是慢了一步,也可能造成重複新增。

按資料範圍使用結果

例子目標快照完整,外部編號亦唯一。延遲同步、資料已刪除或匯出不齊,都可能造成假差異。唯讀對照表本身未實作防重複重試。

本例的建表、資料及結果已在 SQLite 執行。套用時先在系統測試副本調整欄位及狀態規則,再與流程負責人核對預期結果。其他資料庫平台未經測試。

相關資源