共用方式為


使用系統 CLR 數據類型處理數據表的變更時,CDC 擷取作業失敗(geometry、geography 或 hierarchyid)

本文可協助您解決 CDC 擷取作業在處理系統 CLR 數據類型(geometry、geography 或 hierarchyid) 數據表變更時失敗的問題。

適用於:SQL Server
原始 KB 編號: 4538384

徵兆

請參考下列案例:

  • 您可以在具有系統 CLR 數據類型的數據表上啟用異動數據擷取 (CDC) 功能,例如 geometry、geography 或 hierarchyid。
  • CDC 擷取 (scan) 作業正在處理與其他數據表相關的變更。 此程式尚未到達具有系統 CLR 數據類型的數據表。
  • 您對具有系統 CLR 資料類型的數據表進行一些資料操作語言 (DML) 變更。 然後,您會在同一個數據表上變更資料定義語言 (DDL) (例如,新增數據行)。

在此案例中,當 CDC 擷取作業開始處理具有系統 CLR 數據類型的數據表時,它會失敗並傳回下列錯誤訊息:

Msg 18805、Level 16、State 1、Procedure sp_replcmds、LineLineNumber[Batch Start Line LineNumber ]
記錄掃描程式無法從記錄序號 (LSN) {nnnnnnnn: nn: nn} 建構複寫的命令。 請備份發行集資料庫,並連絡客戶支援服務。
Msg 22859、Level 16、State 2、Procedure sp_replcmds、Line LineNumber [Batch Start Line LineNumber]
記錄檔掃描處理序無法處理記錄檔記錄。 請參閱目前工作階段中之前的錯誤,找出原因並改正任何相關問題。
Msg 3621,層級 16,狀態 6,程式sp_replcmds,Line LineNumber [Batch Start Line LineNumber]
陳述式已經結束。
Msg 22864, Level 16, State 1, Procedure sp_MScdc_capture_job, Line LineNumber[Batch Start Line LineNumber ]
資料庫 『DatabaseName』 的擷取作業呼叫sp_MScdc_capture_job失敗。 請查閱先前的錯誤尋找失敗的原因。

此外,錯誤記錄檔中可能會記錄下列專案:

錯誤:913,嚴重性:16,狀態:16。 找不到資料庫IDID。 資料庫可能尚未啟動,或者正在轉換。 請等到資料庫可用之後重新發出查詢。 如果您不認為此錯誤是因為資料庫正在轉換其狀態,而且此錯誤會繼續發生。

其他相關資訊

如果 CDC 擷取作業一開始只處理 DML,然後在下一次執行時處理 DDL 變更,就不會發生此問題。

因應措施

若要解決此問題,請嘗試下列其中一種方法:

  • 請避免搭配 CDC 使用有問題的數據類型(geometry、geography、hierarchyid)。

  • 當您對具有 geometry、geography 或 hierarchyid 數據類型的數據表進行 DDL 變更時,請確定您沒有任何內建 DML 變更。 若要避免此問題,請遵循下列步驟:

    1. 停止所有 DML 至數據表。
    2. 執行擷取作業來處理變更。
    3. 執行數據表的 DDL。
    4. 執行擷取作業以處理 DDL 變更。
    5. 重新啟用 DML 處理。

    注意

    如果您繼續遇到此問題,請停用數據表上的 CDC,然後重新啟用 CDC。