共用方式為


錯誤處理

Oracle CDC 實例會從單一 Oracle 源資料庫(Oracle RAC 叢集被視為單一資料庫)進行採礦變更,並將認可的變更寫入目標 SQL Server 實例中 CDC 資料庫中的變更數據表。

CDC 實例會在名為 cdc.xdbcdc_state 的系統數據表中維護其狀態。 您可以隨時查詢此資料表,以尋找 CDC 實例的狀態。 如需cdc.xdbcdc_state數據表的詳細資訊,請參閱 cdc.xdbcdc_state

下表描述 xdbcdc_state 數據表中的 CDC 實例狀態。

針對每個州,在 cdc.xdbcdc_state 表中對應的數據列會顯示下列兩個指標:

  • 實例沒有作用中(目前沒有 Windows 進程正在處理它)。 如果 啟用欄位的值為 1,則正在處理該特定 Oracle CDC 實例的 Oracle CDC 服務子進程目前正在運行。

  • 如果 錯誤 數據行值為 0,Oracle CDC 實例就不會處於錯誤狀況。 如果 錯誤 數據行值為 1,就會發生錯誤,導致 Oracle CDC 實例無法處理變更。

    如果 錯誤 欄位的值是 1,且 啟動 欄位的值也是 1,則 Oracle CDC 實例發生可復原的錯誤,該錯誤可以自動解決。 如果錯誤數據行的值為 1 且使用中數據行值為 0,則在大多數情況下,可能需要手動因應措施來解決問題,才能繼續處理。

下表描述 Oracle CDC 實例在其狀態數據表中報告的各種狀態代碼。

地位 活躍狀態代碼 錯誤狀態代碼 說明書
中止 0 1 Oracle CDC 實例未執行。 ABORTED 次狀態表示 Oracle CDC 實例最初為 ACTIVE,但後來意外停止。

ABORTED 子狀態是由 Oracle CDC 服務主要實例在偵測到 Oracle CDC 實例在狀態為 ACTIVE 時未執行時所建立。
錯誤 0 1 Oracle CDC 實例未執行。 ERROR 狀態表示 CDC 實例是 ACTIVE 狀態,但隨後遇到了無法恢復的錯誤,並因此停用了自身功能。 ERROR 狀態包含下列子狀態代碼:

MISCONFIGURED:偵測到無法復原的設定錯誤。

PASSWORD-REQUIRED:Attunity 針對 Oracle 的異動數據擷取設計工具沒有密碼設定,或設定的密碼無效。 這是因為服務非對稱密鑰密碼的變更。
跑步 1 0 CDC 實例正在執行,並正在處理變更記錄。 RUNNING 狀態包含下列子狀態代碼:

IDLE:所有變更記錄都已處理並儲存至目標控件 (_CT) 數據表。 控制表沒有進行中的交易。

處理:正在處理的變更記錄尚未寫入控件 (_CT) 數據表。
停止 0 0 CDC 實例未運行。 STOP 子狀態表示 CDC 實例狀態為 ACTIVE,然後已正確停止。
已暫停 1 1 CDC 實例正在執行,但處理因可復原錯誤而暫停。 SUSPENDED 狀態包含下列子狀態代碼:

DISCONNECTED:無法建立與來源 Oracle 資料庫的連線。 還原連接之後,處理將會繼續。

記憶體:記憶體已滿。 當記憶體變成可用時,處理將會繼續。 在某些情況下,此狀態可能不會顯示,因為無法更新狀態數據表。

LOGGER:記錄器已連線到 Oracle,但因為暫時問題而無法讀取 Oracle 事務歷史記錄。
資料錯誤 x x 此狀態代碼僅用於 xdbcdc_trace 數據表。 它不會出現在 xdbcdc_state 數據表中。 此狀態的追蹤記錄表示 Oracle 記錄檔記錄發生問題。 不正確的記錄檔記錄會以 BLOB 的形式儲存在 數據 行中。 DATAERROR 狀態包含下列子狀態代碼:

BADRECORD:無法剖析附上的記錄檔。

CONVERT-ERROR:某些數據行中的數據無法轉換成擷取數據表中的目標數據行。 只有當組態指定轉換錯誤應該產生追蹤記錄時,才會顯示此狀態。

因為 Oracle CDC 服務狀態儲存在 SQL Server 中,因此資料庫中的狀態值可能不會反映服務的實際狀態。 最常見的案例是當服務失去與 SQL Server 的連線,且無法繼續它時(基於任何原因)。 在此情況下,儲存在 cdc.xdbcdc_state 中的狀態會變成過時。 如果上次更新時間戳 (UTC) 超過一分鐘,狀態可能已過時。 在此情況下,請使用 Windows 事件查看器來尋找服務狀態的其他資訊。

錯誤處理

本節說明 Oracle CDC 服務如何處理錯誤。

森林伐木業

Oracle CDC 服務會在下列其中一個地方建立錯誤資訊。

  • Windows 事件記錄檔,用於記錄錯誤,並指出 Oracle CDC 服務生命週期事件(啟動、停止、重新連線至目標 SQL Server 實例)。

  • MSXDBCDC.dbo.xdbcdc_trace 資料表,用於 Oracle CDC 服務主程序進行一般性記錄和追蹤。

  • <cdc-database>.cdc.xdbcdc_trace 數據表,用於 Oracle CDC 實例的一般記錄和追蹤。 這表示與特定 Oracle CDC 實例相關的錯誤會記錄至該實例的追蹤數據表。

當 Oracle CDC 服務執行時,會記錄相關資訊。

  • 由服務控制管理員啟動或停止。

  • 無法連線到相關聯的 SQL Server 實例,並在失敗后成功建立連線時。

  • 啟動 Oracle CDC 服務實例時遇到錯誤。

  • 偵測 Oracle CDC 實例已中止。

  • 遇到非預期的錯誤。

當 CDC 實例在以下情況下運行時,會記錄資訊:

  • 已啟用或停用。

  • 遇到錯誤。

  • 從可恢復的錯誤中復原。

追蹤數據表也用於記錄詳細的追蹤資訊以進行疑難解答。

處理 Oracle 資料來源連線錯誤

Oracle CDC 服務需要與來源 Oracle 資料庫的持續連線。 許多與服務組態無關的連線錯誤(例如網路錯誤)都會被視為暫時性。 因此,如果 Oracle CDC 服務無法建立與 Oracle 資料庫的連線(在中斷連線後於啟動時或工作期間),服務就會將其狀態變更為 SUSPENDED/DISCONNECTED,並輸入重試迴圈,以定期重試連線。 重新建立連線時,處理會繼續。

其他類型的連線錯誤不是暫時性的(例如,不正確的認證、許可權不足和資料庫地址錯誤)。 發生這些錯誤時,Oracle CDC 服務狀態會設定為 ERROR/MISCONFIGURED 或 ERROR/PASSWORD-REQUIRED,且服務已停用。 當使用者修正基礎錯誤時,應該手動重新啟用 Oracle CDC 實例,以便繼續處理。

當不清楚錯誤是否為暫時性時,最好假設它是暫時性的。

處理目標 SQL Server 連線錯誤

Oracle CDC 服務需要與目標 SQL Server 實例的持續連線。 此連線可用來:

  • 請確定目前沒有其他相同名稱的服務使用此 SQL Server 實例。

  • 檢查哪些 Oracle CDC 實例已啟用或停用,並啟動(或停止)其子進程。

當服務與目標 SQL Server 實例建立連線,並確認它是唯一使用此名稱的 Oracle CDC 服務時,它可以檢查哪些 Oracle CDC 實例已啟用並啟動其處理進程(之後服務會在停用時停止這些進程)。 Oracle CDC 實例會使用其 SQL Server 連線來處理 Oracle CDC 實例的 CDC 資料庫。

當目標 SQL Server 的連線失敗時,如何處理錯誤取決於錯誤是否為暫時性。

對於已知的非暫時性錯誤(例如不正確的認證、許可權不足、連線資訊不正確),服務會將錯誤記錄至 Windows 事件記錄檔並停止(無法寫入追蹤數據表,因為它無法連線到 SQL Server)。 在此情況下,用戶必須解決錯誤,然後重新啟動 Oracle CDC Windows 服務。

針對暫時性錯誤和未預期的錯誤,作業會重試數次,如果失敗持續長時間,CDC 服務會停止其 CDC 實例子進程,並返回其初始連線嘗試(此時,另一部計算機上的 Oracle CDC 服務可能已經控制了具名 CDC 服務)。

處理目標 SQL Server 儲存空間已滿錯誤

當 Oracle CDC 服務偵測到它無法將新的變更數據插入目標 SQL Server CDC 資料庫時,它會將警告寫入事件記錄檔,並嘗試插入追蹤記錄(雖然這可能會因為相同原因而失敗)。 然後它會在特定間隔內重試作業,直到作業成功為止。

處理 Oracle CDC 錯誤

Oracle CDC 實例會讀取 Oracle 事務歷史記錄並加以處理。 如果 CDC 處理發生錯誤,則會在 cdc.xdbcdc_state 數據表中報告,而且用戶必須根據回報的錯誤手動介入。

例如,Oracle CDC 實例可能在長時間內不活躍,因此所需的 Oracle 事務記錄檔已不再可用。 在此情況下,Oracle DBA 必須還原 Oracle CDC 實例所需的記錄,才能繼續處理。

處理非預期的 Oracle CDC 實例失敗

Oracle CDC 服務會監視其 CDC 實例子程序。 當 CDC 實例子處理中止時,CDC 服務會在 MSXDBCDC.dbo.xdbcdc_databases 數據表中將其停用,並將其 cdc.xdbcdc_state 狀態更新為 ABORTED。 在此情況下,標準 Windows 錯誤報告對話框是用來報告此錯誤以進行進一步分析。

另請參閱

Attunity Oracle 異動資料擷取設計工具
Oracle CDC 實例