如要將變更資料擷取 (CDC) 更新從可插入的 Oracle 資料庫串流至支援的目的地 (例如 BigQuery 或 Cloud Storage),可以將資料庫連結至 Datastream。每個可插式資料庫都會在多租戶容器資料庫 (CDB) 中執行。如要準備來源,請在 CDB 上設定 ARCHIVELOG 模式和記錄保留,並在兩個容器中設定補充記錄和使用者權限。
設定二進位記錄檔讀取器的可插式 Oracle 資料庫
如要設定可插式 Oracle 資料庫,以便使用二進位記錄讀取器 CDC 方法,請按照下列步驟操作:
選取下列其中一種方法來存取記錄檔:
儲存空間自動管理 (ASM):如果選取這個選項,您必須建立專屬 ASM 連線,並在建立連線設定檔時提供詳細資料。用於 ASM 連線的使用者帳戶必須具備
SYSASM權限。如要建立具有
SYSASM權限的新 ASM 使用者,請執行下列指令:CREATE USER ASM_USER_NAME IDENTIFIED BY ASM_PASSWORD; GRANT SYSASM TO ASM_USER_NAME;
更改下列內容:
- ASM_USER_NAME:ASM 使用者名稱。
- ASM_PASSWORD:ASM 使用者的密碼。
資料庫目錄:如果選取這個選項,您必須建立指向重做日誌檔和封存記錄檔的資料庫目錄物件,並將目錄的
READ存取權授予資料庫使用者:
CREATE DIRECTORY DIRECTORY_NAME_1 as 'ONLINE_REDO_LOGS_PATH'; CREATE DIRECTORY DIRECTORY_NAME_2 as 'ARCHIVED_REDO_LOGS_PATH'; GRANT READ ON DIRECTORY DIRECTORY_NAME_1 to USER_NAME; GRANT READ ON DIRECTORY DIRECTORY_NAME_2 to USER_NAME;
更改下列內容:
- DIRECTORY_NAME_1:線上重做記錄檔的目錄名稱。
- DIRECTORY_NAME_2:封存重做記錄檔的目錄名稱。
- ONLINE_REDO_LOGS_PATH:儲存線上重做記錄檔的目錄路徑。
- ARCHIVED_REDO_LOGS_PATH:封存記錄檔的儲存目錄路徑。
- USER_NAME:要授予
READ存取權的資料庫使用者名稱。
如果選取二進位記錄讀取器方法,並使用資料庫目錄,則必須在建立串流時提供重做日誌檔和封存日誌檔目錄名稱。
確認資料庫是以
ARCHIVELOG模式運作。請登入 Oracle 資料庫,並在 SQL 提示中執行下列指令:
SELECT LOG_MODE FROM V$DATABASE;- 如果結果是
ARCHIVELOG,即可繼續進行下一個步驟。 - 如果結果為
NOARCHIVELOG,則必須為資料庫啟用ARCHIVELOG模式。 以
SYSDBA身分登入後,執行下列指令:SHUTDOWN IMMEDIATE; STARTUP MOUNT; ALTER DATABASE ARCHIVELOG; ALTER DATABASE OPEN;
封存的記錄檔會耗用磁碟空間,因此請務必為資料庫設定
DB_RECOVERY_FILE_DEST_SIZE參數。使用這個參數,指定目標資料庫復原檔案可使用的總空間硬性限制 (以位元組為單位)。設定這項參數後,您就能在保護資料庫免於磁碟空間不足,以及串流因記錄位置遺失而失敗之間取得平衡。
- 如果結果是
執行下列 Oracle Recovery Manager (RMAN) 指令,定義資料庫的資料保留政策:
TARGET / CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 4 DAYS;
建議您將備份和封存記錄檔至少保留 4 天,最好是 7 天。
返回資料庫工具的 SQL 提示,設定 Oracle 記錄檔輪替政策。建議將記錄檔大小上限設為不超過 512 MB。
啟用增補記錄檔資料。請先執行下列指令,啟用最低資料庫層級增補記錄功能:
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
接著,選擇要為特定資料表或整個資料庫啟用記錄功能。
如要只記錄特定資料表的變更,請對要複製的各個資料表執行下列指令:
ALTER TABLE SCHEMA.TABLE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
更改下列內容:
- SCHEMA:資料表所在的結構定義名稱。
- TABLE:要記錄變更的資料表名稱。
如要複製資料庫中的大部分或所有資料表,建議為整個資料庫啟用記錄功能。執行下列指令,為整個資料庫啟用增補記錄檔資料:
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
請將適當權限授予要用來連結至可插式資料庫的使用者帳戶。如需設定,請執行下列指令:
GRANT SELECT ON GV_$LOG TO USER_NAME; GRANT SELECT ON GV_$LOGFILE TO USER_NAME; GRANT SELECT ON GV_$ARCHIVED_LOG TO USER_NAME; GRANT SELECT ON GV_$INSTANCE TO USER_NAME; GRANT SELECT ON GV_$STANDBY_LOG TO USER_NAME; GRANT SELECT ON V_$INSTANCE TO USER_NAME; GRANT SELECT ON V_$PDBS TO USER_NAME; GRANT SELECT ON V_$TRANSPORTABLE_PLATFORM TO USER_NAME; GRANT SELECT ON V_$DATABASE TO USER_NAME; GRANT SELECT ON V_$PARAMETER TO USER_NAME; GRANT SELECT ON COL$ TO USER_NAME; GRANT SELECT ON DBA_OBJECTS TO USER_NAME; GRANT SELECT ON DBA_TABLESPACES TO USER_NAME; GRANT SELECT ON DBA_ENCRYPTED_COLUMNS TO USER_NAME; GRANT SELECT ON DBA_EXTENTS TO USER_NAME; GRANT SELECT ON DBA_SUPPLEMENTAL_LOGGING TO USER_NAME; GRANT CONNECT TO USER_NAME; GRANT CREATE SESSION TO USER_NAME; GRANT SELECT ANY TABLE TO USER_NAME; GRANT READ ON DIRECTORY ONLINELOG_DIR TO USER_NAME; GRANT READ ON DIRECTORY ARCHIVELOG_DIR TO USER_NAME;
將 USER_NAME 替換為要用來連線至資料庫的使用者帳戶名稱。
設定 LogMiner 的可插式 Oracle 資料庫
如要設定自行託管的 Oracle 可插式資料庫,以便與 LogMiner API 搭配使用,請按照下列步驟操作:
確認資料庫是以
ARCHIVELOG模式運作。如要執行這項操作,請從CDB$ROOT容器執行下列指令:SELECT LOG_MODE FROM V$DATABASE;- 如果結果是
ARCHIVELOG,請繼續執行步驟 2。 - 如果結果為
NOARCHIVELOG,則必須為資料庫啟用ARCHIVELOG模式。 以
SYSDBA身分登入後,執行下列指令:SHUTDOWN IMMEDIATE; STARTUP MOUNT; ALTER DATABASE ARCHIVELOG; ALTER DATABASE OPEN;封存的記錄檔會耗用磁碟空間,因此請務必為資料庫設定
DB_RECOVERY_FILE_DEST_SIZE參數。使用這個參數,指定目標資料庫復原檔案可使用的總空間硬性限制 (以位元組為單位)。設定這項參數後,您就能在保護資料庫免於磁碟空間不足,以及串流因記錄位置遺失而失敗之間取得平衡。
- 如果結果是
請從
CDB$ROOT容器執行下列 Oracle Recovery Manager (RMAN) 指令,定義資料庫的資料保留政策:CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 4 DAYS;這個指令會定義容器資料庫中所有可外掛資料庫的資料保留政策。
建議您將備份和封存記錄檔至少保留 4 天,最好是 7 天。
返回資料庫工具的 SQL 提示,設定 Oracle 記錄檔輪替政策。建議將記錄檔大小上限設為不超過 512 MB。
啟用增補記錄檔資料。請先執行下列指令,在
CDB$ROOT容器層級啟用資料庫的增補記錄功能:ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;接著,選擇要為特定資料表或整個可插式資料庫啟用記錄功能。
如要只記錄特定資料表的變更,請連線至可外掛資料庫容器,並對要複製的各個資料表執行下列指令:
ALTER TABLE SCHEMA.TABLE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;更改下列內容:
- SCHEMA:資料表所在的結構定義名稱。
- TABLE:要記錄變更的資料表名稱。
如要複製資料庫中的多個或所有資料表,建議為整個資料庫啟用記錄功能。
執行下列指令,為整個資料庫啟用增補記錄檔資料:
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;建立一般使用者。一般使用者在
CDB$ROOT容器和可插式資料庫中具有相同身分。一般使用者可以連線至CDB$ROOT容器,並在該容器和任何具備權限的可插式資料庫中執行作業。一般使用者名稱的開頭必須是C##或c##。將適當權限授予要用來連結至資料庫的一般使用者。
CDB$ROOT容器和可插式資料庫層級需要不同的權限。- 連線至
CDB$ROOT容器,然後執行下列指令:
GRANT CREATE SESSION TO USER_NAME; GRANT SET CONTAINER TO USER_NAME; GRANT SELECT ON SYS.V_$DATABASE TO USER_NAME; GRANT SELECT ON SYS.V_$LOGMNR_CONTENTS TO USER_NAME; GRANT EXECUTE ON DBMS_LOGMNR TO USER_NAME; GRANT EXECUTE ON DBMS_LOGMNR_D TO USER_NAME; GRANT LOGMINING TO USER_NAME; GRANT EXECUTE_CATALOG_ROLE TO USER_NAME;- 連線至可插式資料庫,然後執行下列指令:
GRANT CREATE SESSION TO USER_NAME; GRANT SET CONTAINER TO USER_NAME; GRANT SELECT ANY TABLE TO USER_NAME; GRANT SELECT ON SYS.V_$DATABASE TO USER_NAME; GRANT SELECT ON V_$PDBS TO USER_NAME; GRANT SELECT ON SYS.V_$LOG TO USER_NAME; -- for primary databases GRANT SELECT ON SYS.V_$STANDBY_LOG TO USER_NAME; -- for standby databases GRANT SELECT ON SYS.V_$LOGFILE TO USER_NAME; GRANT SELECT ON SYS.V_$ARCHIVED_LOG TO USER_NAME; GRANT SELECT ON DBA_SUPPLEMENTAL_LOGGING TO USER_NAME; GRANT SELECT ON SYS.V_$PARAMETER TO USER_NAME;- 連線至
將資料庫中
DBA_EXTENTS檢視表的SELECT存取權授予一般使用者。這項權限可讓您對 Oracle 來源使用以ROWID為基礎的回填:GRANT SELECT ON DBA_EXTENTS TO USER_NAME;
如果資料庫使用透明資料加密 (TDE),請授予下列權限:
GRANT SELECT ON DBA_TABLESPACES TO USER_NAME; GRANT SELECT ON DBA_ENCRYPTED_COLUMNS TO USER_NAME;
後續步驟
- 進一步瞭解 Datastream 如何與 Oracle 來源搭配運作。