Datastream 支援 Oracle 多租戶架構,其中單一容器資料庫 (CDB) 包含一或多個可插式資料庫 (PDB)。每個可插拔資料庫都是獨立的資料庫,具有專屬 ID 和名稱,且可獨立管理。
本頁說明如何設定變更資料擷取 (CDC),將資料從可外掛的 Oracle 資料庫串流至支援的目的地,例如 BigQuery 或 Cloud Storage。您可以設定可插式 Oracle 資料庫,搭配下列 CDC 方法使用:
如要進一步瞭解二進位記錄讀取器和 LogMiner API,請參閱「使用 Oracle 資料庫的重做記錄檔」。
如需每種方法的詳細設定說明,請參閱下方的各節。
設定可插式 Oracle 資料庫,以供二進位記錄檔讀取器使用
如要設定可插式 Oracle 資料庫,以搭配二進位記錄讀取器 CDC 方法使用,請按照下列步驟操作:
- 選取下列其中一種方法來存取記錄檔: - 儲存空間自動管理 (ASM):選取這個選項時,您需要建立專屬的 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 天。 
- 返回您用來設定 Oracle 記錄檔輪替政策的資料庫工具 SQL 提示。建議將記錄檔大小上限設為不超過 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 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 天。 
- 返回您用來設定 Oracle 記錄檔輪替政策的資料庫工具 SQL 提示。建議將記錄檔大小上限設為不超過 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 SYS.V_$LOG TO USER_NAME; -- for primary databases GRANT SELECT ON SYS.V_$STANDY_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 來源搭配運作。