1. 概述
必須為擷取的表或資料庫啟動補充日誌記錄,以便資料更改能夠擷取已更改的資料庫行之前的狀態。下面將說明如何在表/資料庫級別上配置它。 一般建議對庫進行啟動。
使用者根據實際的資料庫版本,參考下面文檔進行操作。
2. Oracle 10g、11g
使用者根據實際情況,選擇其中一種方案:
| 方案 | 說明 | 步驟 |
|---|---|---|
| 開啟單表補全日誌 | 同步某張表時,就需要開啟該表的補全日志 優勢:操作比較精準 開啟單表的全補充得在運作管道任務前,不然有可能會出現資料丟失 劣勢:需要一張一張開啟 | |
| 開啟全庫補全日誌 | 若使用者庫裏的表資料量可控,且希望一勞永逸(不想每同步一張表就開啟一次),可開啟全庫補全日志 劣勢:會佔用較多資料庫空間 |
|
3. Oracle 12c、18c、19c、21c、Oracle RAC叢集
3.1 資料庫是否支援CDB/PDB
Oracle12c 及之後版本引入了多租使用者環境,其中包含兩個核心概念:容器資料庫-CDB(Container Database)和可插拔資料庫-PDB(Pluggable Database)。
CDB 是一個包含零個或多個 PDB 的資料庫;PDB 是一個獨立的資料庫,可以插入或拔出 CDB,每個 PDB 都有自己的資料檔案和使用者資料;CDB 管理多個 PDB,PDB 共享 CDB 中的系統資源,但資料和物件是隔離的。

在使用上二者與非多租戶資料庫實體沒有任何差別,差別主要在於獲取資料變更時,只能從CDB中擷取到,基於此要對其進行適配。
1)判斷當前連結的資料庫是否是CDB
以具有 DBA 權限的使用者身分登入資料庫,使用如下命令查看資料庫是否開啟多租戶:

如果查詢結果中的 CDB 列值為 YES,則當前連結的資料庫是容器資料庫(CDB)。如果值為 NO,則當前連結的資料庫是非容器資料庫(非 CDB)
2)判斷當前連結的是根容器還是 PDB

若傳回的是 CDB$ROOT,則表示當前連結的是 CDB 的根容器;若傳回的是其他名稱,則表示當前連結的是 PDB。
3.2 場景一:非多租戶
使用以下命令,確認 supplemental logging 是否開啟:

如果傳回的三列都是 Yes 或者 Implicit
如果傳回的三列都是 Yes 或者 Implicit ,則表示 identification key logging(標識鍵日誌)和 full supplemental logging(全補充日誌)已同時開啟,可以直接查看第五章資料庫帳號相關內容。
如果傳回的前兩列是 Yes 或者 Implicit
如果傳回的前兩列是 Yes 或者 Implicit,則表示只開啟了 identification key logging(標識鍵日誌),需要開啟全補充日誌。
單表開啟 full supplemental logging(全補充日誌),使用如下命令:
所有表開啟 full supplemental logging(全補充日誌),使用如下命令:

提交更改的配置:
然後可以使用命令查看單表的補全日誌權限是否開啟:
3.3 場景二:CDB/PDB
使用者根據實際情況,選擇其中一種方案:
| 方案 | 說明 | 步驟 |
|---|---|---|
| 開啟單表補全日誌 | 同步某張表時,就需要開啟該表的補全日志 優勢:操作比較精準 開啟單表的全補充得在運作管道任務前,不然有可能會出現資料丟失 劣勢:需要一張一張開啟 | |
| 開啟全庫補全日誌 | 若使用者庫裏的表資料量可控,且希望一勞永逸(不想每同步一張表就開啟一次),可開啟全庫補全日志 劣勢:會佔用較多資料庫空間 |
