本節說明 Oracle CDC 服務的一些重要概念。 本節中包含的概念如下:
-
本節描述此資料庫中所包含的數據表,以及 CDC 的重要性。
-
本節提供 CDC 資料庫的簡短描述。 這些資料庫是使用 Oracle CDC 設計工具控制台建立的。 如需 CDC 資料庫的詳細資訊,請參閱 CDC 設計工具控制台安裝隨附的檔。
-
本節描述可用來設定 Oracle CDC 服務的命令行命令。
MSXDBCDC 資料庫
MSXDBCDC (Microsoft External-Database CDC) 資料庫是搭配 SQL Server 實例使用 Oracle CDC 服務時所需的特殊資料庫。
無法變更此資料庫的名稱。 如果名為 MSXDBCDC 的資料庫存在於主機 SQL Server 實例上,而且包含 Oracle CDC 服務所定義的數據表,則無法使用主機 SQL Server 實例。
此資料庫的主要用途是:
做為與 SQL Server 實例相關聯之 Oracle CDC 服務的登錄。 這項資訊用於服務元件和設計元件,並支援在作用中節點的不同節點上,以相同名稱協調多個 CDC 服務。
做為 SQL Server 實例中包含的 Oracle CDC 實例登錄、處理每個實例的 CDC 服務,以及每個使用的組態版本。 這項信息相當於 master 資料庫 sys.databases 數據表中的 is_cdc_enabled 數據行。 CDC 服務會定期掃描 dbo.xdbcdc_databases 數據表,以識別對 CDC 設定或擷取實例清單所做的變更。
保留 sysadmin 擁有的預存程式,以協助建立和維護 CDC 實例。 這些類似於用於實作 SQL Server CDC 功能的系統程式。
建立 MSXDBCDC 資料庫
必須先建立 MSXDBCDC 資料庫,才能定義 Oracle CDC 服務。 您只能在 SQL Server 實例上建立一個 MSXDBCDC 資料庫。 當您為 Oracle CDC 準備 SQL Server 資料庫時,會建立 MSXDBCDC 資料庫。 這可以透過使用 Oracle CDC 服務組態主控台或執行 CDC 服務組態主控台所產生的建立腳本來完成。
此資料庫的擁有者是 Oracle CDC 服務管理員,可控制裝載在 SQL Server 實例下的所有 Oracle CDC 實例。
另請參閱:
MSXDBCDC 資料庫數據表
本節描述 MSXDBCDC 資料庫中的下表。
dbo.xdbcdc_trace
此數據表會儲存 Oracle CDC 服務的追蹤資訊。 此數據表中儲存的資訊包括值得注意的狀態變更和追蹤記錄。
Oracle CDC 服務會將錯誤記錄和一些資訊記錄寫入 Windows 事件記錄檔和追蹤資料表。 在某些情況下,追蹤數據表可能無法存取,在此情況下,錯誤資訊可從事件記錄檔存取。
下列描述 dbo.xdbcdc_trace 數據表中包含的項目。
| 項目 | 說明 |
|---|---|
| 時間戳 | 寫入追蹤記錄時的確切 UTC 時間戳。 |
| 類型 | 包含下列其中一個值。 錯誤 資訊 追踪 |
| 節點 | 寫入記錄的節點名稱。 |
| 地位 | 狀態數據表所使用的狀態代碼。 |
| 子狀態 | 狀態數據表所使用的子狀態代碼。 |
| status_message | 狀態數據表所使用的狀態消息。 |
| 來源 | 產生追蹤記錄的 Oracle CDC 元件名稱。 |
| text_data | 當錯誤或追蹤記錄包含文字承載時,提供額外的文字數據。 |
| 二進位資料 | 當錯誤或追蹤記錄包含二進位承載時,增加的二進位數據。 |
Oracle CDC 實例會根據變更數據表保留原則刪除舊的追蹤數據表數據列。
dbo.xdbcdc_databases
下表包含目前 SQL Server 實例中 Oracle CDC 資料庫的 CDC 服務名稱。 每個資料庫都會對應至 Oracle CDC 實例。 Oracle CDC 服務會使用此數據表來判斷要啟動或停止的實例,以及要重新設定的實例。
下表描述 dbo.xdbcdc_databases 數據表中包含的項目。
| 項目 | 說明 |
|---|---|
| 名稱 | SQL Server 實例中的 Oracle 資料庫名稱。 |
| config_version | 對應 CDC 資料庫中 xdbcdc_config 數據表的最後一次變更的時間戳(UTC),或此表中目前列的時間戳(UTC)。 UPDATE 觸發程式會針對此項目強制執行 GETUTCDATE() 的值。 config_version 可讓 CDC 服務識別需要檢查組態變更或啟用/停用的 CDC 實例。 |
| cdc_service_name | 此項目會決定哪個 Oracle CDC 服務會處理選取的 Oracle 資料庫。 |
| 已啟用 | 指出 Oracle CDC 實例為作用中 (1) 或已停用 (0)。 當 Oracle CDC 服務啟動時,只會啟動標示為 enable (1) 的實例。 注意:Oracle CDC 實例可能會因為無法重試的錯誤而停用。 在此情況下,必須在解決錯誤之後手動重新啟動實例。 |
dbo.xdbcdc_services
下表列出與主機 SQL Server 實例相關聯的 CDC 服務。 CDC 設計工具主控台會使用此資料表來判斷針對本機 SQL Server 實例所設定的 CDC 服務清單。 CDC 服務也會使用它來確保只有一個執行中的 Windows 服務會處理指定的 Oracle CDC 服務名稱。
下列描述 dbo.xdbcdc_databases 表中所包含的擷取狀態項目。
| 項目 | 說明 |
|---|---|
| cdc_service_name | Oracle CDC 服務的名稱(Windows 服務名稱)。 |
| cdc_service_sql_login | Oracle CDC 服務用來連線到 SQL Server 實例的 SQL Server 登入名稱。 系統已建立新的 SQL 使用者 cdc_service,並且與此登入名稱相關聯。然後,cdc_service 會被新增為服務所處理的每個 CDC 資料庫中固定資料庫角色 db_ddladmin、db_datareader 和 db_datawriter 的成員。 |
| 參考計數 | 此項目會計算安裝相同 Oracle CDC 服務的電腦數目。 它會隨著同名 Oracle CDC 服務的每個新增而遞增,並在移除這類服務時遞減。 當計數器達到零時,就會刪除此數據列。 |
| 活動服務節點 | 目前處理 CDC 服務的 Windows 節點名稱。 當服務正確停止時,此數據行會設定為 null,表示不再有作用中的服務。 |
| 主動服務心跳信號 | 此項目會追蹤目前的 CDC 服務,以判斷它是否仍在作用中。 此項目會定期使用當前資料庫的 UTC 時間戳以更新使用中的 CDC 服務。 默認間隔為 30 秒,但間隔可設定。 當待定 CDC 服務偵測到心跳在設定的間隔過後未更新時,待定服務會嘗試接管作用中的 CDC 服務角色。 |
| 選項 | 此項目會指定次要選項,例如追蹤或微調。 它會以 name[=value][; ]的形式撰寫。 選項字串會使用與 ODBC 連接字串相同的語意。 如果選項為 Boolean (值為 yes/no),則值只能包含名稱。 trace 具有下列可能的值: 是 開 假的 關閉 <類別名稱>[,類別名稱>] 預設值為 false。 service_heartbeat_interval 是服務更新active_service_heartbeat數據行的時間間隔(以秒為單位)。 預設值為 30 。 最大值為 3600。 service_config_polling_interval 是 CDC 服務檢查組態變更的輪詢間隔(以秒為單位)。 預設值為 30 。 最大值為 3600。 sql_command_timeout 是與 SQL Server 搭配運作的命令逾時。 預設值為 1。 最大值為 3600。 |
MSXDBCDC 資料庫預存程式
本節描述 MSXDBCDC 資料庫中的下列預存程式。
dbo.xcbcdc_reset_db(資料庫名稱)
此程式會清除 Oracle CDC 實例的數據。 其使用方式:
若要重新啟動數據擷取並忽略先前的數據,例如在源資料庫復原之後或因不活動導致某些 Oracle 事務日誌不可用之後。
當 CDC 狀態發生損毀時(特別是在任何 cdc.*tables 數據中)。
dbo.xcbcdc_reset_db程式會執行下列工作:
停止 CDC 實例(如果正在運行)。
截斷變更數據表、 cdc_lsn_mapping 數據表和 cdc_ddl_history 數據表。
清除 cdc_xdbcdc_state 數據表。
清除cdc_change_table每個數據列的start_lsn數據行。
若要使用 dbo.xcbcdc_reset_db 程式,用戶必須是所命名之 CDC 實例資料庫的 db_owner 資料庫角色成員,或是 sysadmin 或 serveradmin 固定伺服器角色的成員。
如需 CDC 資料表的詳細資訊,請參閱 CDC 設計工具控制台中說明系統中的 CDC 資料庫 。
dbo.xdbcdc_disable_db(dbname)
dbo.xcbcdc_disable_db程式會執行下列工作:
- 刪除 MSXDBCDC.xdbcdc_databases 資料表中所選 CDC 資料庫的條目。
若要使用 dbo.xcbcdc_disable_db 程式,用戶必須是所命名 CDC 實例 db_owner資料庫角色 的成員,或是 系統管理員 或 serveradmin 固定伺服器角色的成員。
如需 CDC 資料表的詳細資訊,請參閱 CDC 設計工具控制台中說明系統中的 CDC 資料庫。
dbo.xcbcdc_add_service(svcname,sqlusr)
dbo.xcbcdc_add_service程式會將一個項目新增至MSXDBCDC.xdbcdc_services數據表,並將MSXDBCDC.xdbcdc_services數據表中服務名稱的ref_count欄位增加1。 當 ref_count 為 0 時,它會刪除資料列。
若要使用dbo.xcbcdc_add_service<服務名稱、用戶>名稱程式,用戶必須是所命名之 CDC 實例資料庫的db_owner資料庫角色成員,或是系統管理員或 serveradmin 固定伺服器角色的成員。
dbo.xdbcdc_start(dbname)
dbo.xdbcdc_start程式會將啟動要求傳送至 CDC 服務,以處理選取的 CDC 實例以啟動變更處理。
若要使用dbo.xcdcdc_start程式,用戶必須是 CDC 資料庫db_owner資料庫角色的成員,或是 SQL Server 實例之系統管理員或 serveradmin 角色的成員。
dbo.xdbcdc_stop(dbname)
dbo.xdbcdc_stop程式會將停止要求傳送至 CDC 服務,以處理選取的 CDC 實例以停止變更處理。
若要使用dbo.xcdcdc_stop程式,用戶必須是 CDC 資料庫db_owner資料庫角色的成員,或是 SQL Server 實例的系統管理員或 serveradmin 角色的成員。
CDC 資料庫
CDC 服務中使用的每個 Oracle CDC 實例都會與稱為 CDC 資料庫的特定 SQL Server 資料庫相關聯。 此 SQL Server 資料庫裝載於與 Oracle CDC 服務相關聯的 SQL Server 實例中。
CDC 資料庫包含特殊的 cdc 架構。 Oracle CDC 服務會使用此架構,並以表名稱前綴 xdbcdc_ 作為特徵。 此架構用於安全性和一致性用途。
Oracle CDC 實例和 CDC 資料庫都是使用 Oracle CDC 設計工具控制台來建立。 如需 CDC 資料庫的詳細資訊,請參閱 Oracle CDC 設計工具主控台安裝隨附的檔。
使用命令行設定 CDC 服務
您可以從命令行作 Oracle CDC 服務程式 (xdbcdcsvc.exe)。 CDC 服務程式是原生 32 位/64 位 Windows 可執行檔。
另請參閱
服務程式命令
本節描述用來設定 CDC 服務的下列命令。
設定
使用 Config 從腳本更新 Oracle CDC 服務組態。 命令只能用來更新 CDC 服務組態的特定部分(例如,只有連接字串而不知道非對稱密鑰密碼)。 命令必須由電腦管理員執行。 以下是命令的 Config 範例。
"<path>xdbcdcsvc.exe" config
<cdc-service-name>
[connect= <sql-server-connection-string>]
[key= <asym-key-password>]
[svcacct= <windows-account> <windows-password>]
[sqlacct= <sql-username> <sql-password>]
地點:
cdc-service-name 是要更新之 CDC 服務的名稱。 這是必要參數。
sql-server-connection-string 是要更新的連接字串。 如果連接字串包含空格或引號,則必須以雙引號括住 。」。 內嵌引號會藉由加倍引號來逸出。
asym-key-password 是要更新的密碼。
windows-account、 windows-password 是正在更新之服務的 Windows 帳戶認證。
sql-username、 sql-password 是正在更新的 SQL Server 驗證認證。 如果 sqlacct 同時有空的使用者名稱和空白密碼,則 Oracle CDC 服務會使用 Windows 驗證連線到 SQL Server。
注意:包含空格或雙引號的任何參數都必須以雙引號包裝()。 內嵌雙重引號必須加倍(例如,使用 “A#B” D 作為密碼來輸入 ““A#B”“ D”)。
創造
使用 Create 從腳本建立 Oracle CDC 服務。 命令必須由電腦管理員執行。 以下是命令的 Create 範例:
"<path>xdbcdcsvc.exe" create
<cdc-service-name>
[connect= "<sql-server-connection-string>"]
[key= <asym-key-password>]
[svcacct <windows-account> <windows-password>]
[sqlacct <sql-username> <sql-password>]
地點:
cdc-service-name 是新建立的服務名稱。 如果已經有具有此名稱的服務,則程式會傳回錯誤。 不應使用過長的名稱或含有空格的名稱。 “/” 和 “\” 字元不是服務名稱中的有效字元。 這是必要參數。
sql-server-connection-string 是用來連接到與新 Oracle CDC 服務相關聯的 SQL Server 實例的連接字串。
asym-key-password 是保護用來儲存源資料庫記錄採礦認證的非對稱密鑰的密碼。
windows-account、 windows-password 是與所建立 Oracle CDC 服務相關聯的帳戶名稱和密碼。
sql-username、 sql-password 是用來連線到 SQL Server 實例的 SQL Server 帳戶名稱和密碼。 如果這兩個參數都是空的,則 Oracle CDC 服務會使用 Windows 驗證連線到 SQL Server。
注意:包含空格或雙引號的任何參數都必須以雙引號包裝()。 內嵌雙引號必須加倍(例如,若要使用 “A#B” D 做為密碼輸入 “”A#B“” D“。
刪除
使用 Delete 從腳本中清除 Oracle CDC 服務。 此命令必須由電腦管理員執行。 以下是命令的 Delete 範例。
"<path>xdbcdcsvc.exe" delete
<cdc-service-name>
地點:
cdc-service-name 是要刪除之 CDC 服務的名稱。
注意:包含空格或雙引號的任何參數都必須以雙引號包裝()。 內嵌的雙引號必須加倍(例如,使用 “A#B” D 作為密碼時,輸入 “”“A#B”“” D“)。