設定自行管理的 Oracle 資料庫以進行 CDC

如要將變更資料擷取 (CDC) 更新從自行管理的 Oracle 資料庫串流至支援的目的地 (例如 BigQuery 或 Cloud Storage),您可以設定 Datastream,使用二進位記錄讀取器 (預先發布版) 或 LogMiner API 讀取重做記錄檔。您必須啟用 ARCHIVELOG 模式、設定資料保留政策、啟用補充記錄,以及授予使用者權限,才能準備好資料庫。如要進一步瞭解這些 CDC 方法,請參閱「使用 Oracle 資料庫重做日誌檔」。

設定自行管理的 Oracle 資料庫,以便使用二進位記錄讀取器

如要設定自行管理的 Oracle 資料庫,以便與二進位記錄讀取器 CDC 方法搭配使用,請按照下列步驟操作:

  1. 建立資料庫使用者帳戶,供 Datastream 連線至資料庫:

    CREATE USER USER_NAME IDENTIFIED BY USER_PASSWORD;

    更改下列內容:

    • USER_NAME:要用來連線至資料庫的資料庫使用者帳戶名稱。
    • USER_PASSWORD:資料庫使用者帳戶的密碼。
  2. 選取下列其中一種方法來存取記錄檔:

    • 儲存空間自動管理 (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:先前建立的資料庫使用者帳戶名稱。

    如果選取二進位記錄讀取器方法,並使用資料庫目錄,則必須在建立串流時提供重做日誌檔和封存日誌檔目錄名稱。

  3. 確認資料庫是以 ARCHIVELOG 模式運作。

    請登入 Oracle 資料庫,並在 SQL 提示中執行下列指令:

    SELECT LOG_MODE FROM V$DATABASE;

    1. 如果結果是 ARCHIVELOG,即可繼續進行下一個步驟。
    2. 如果結果為 NOARCHIVELOG,則必須為資料庫啟用 ARCHIVELOG 模式。
    3. 以 SYSDBA 身分登入後,執行下列指令:

      SHUTDOWN IMMEDIATE;
      STARTUP MOUNT;
      ALTER DATABASE ARCHIVELOG;
      ALTER DATABASE OPEN;
    4. 封存的記錄檔會占用磁碟空間,因此請務必為資料庫設定 DB_RECOVERY_FILE_DEST_SIZE 參數。使用這個參數,指定目標資料庫復原檔案可使用的總空間硬性限制 (以位元組為單位)。設定這項參數後,您就能在保護資料庫免於磁碟空間不足,以及串流因記錄位置遺失而失敗之間取得平衡。

  4. 執行下列 Oracle Recovery Manager (RMAN) 指令,定義資料庫的資料保留政策:

    TARGET /
    CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 4 DAYS;

    建議您將備份和封存記錄檔至少保留 4 天,最好是 7 天。

  5. 返回資料庫工具的 SQL 提示,設定 Oracle 記錄檔輪替政策。建議將記錄檔大小上限設為不超過 512 MB。

  6. 啟用增補記錄檔資料。請先執行下列指令,啟用最低資料庫層級增補記錄功能:

    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;
  7. 直接將適當權限授予用來連結資料庫的使用者帳戶。請注意,如果將這些授權指派給角色,授權就不會生效。如需設定,請執行下列指令:

    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;

    將 USER_NAME 替換為先前建立的資料庫使用者帳戶名稱。

設定自行管理的 Oracle 資料庫,以便使用 LogMiner

  1. 建立資料庫使用者帳戶,供 Datastream 連線至資料庫:

    CREATE USER USER_NAME IDENTIFIED BY USER_PASSWORD;

    更改下列內容:

    • USER_NAME:要用來連線至資料庫的資料庫使用者帳戶名稱。
    • USER_PASSWORD:資料庫使用者帳戶的密碼。
  2. 確認資料庫是以 ARCHIVELOG 模式運作。

    請登入 Oracle 資料庫,並在 SQL 提示中執行下列指令:

    SELECT LOG_MODE FROM V$DATABASE;

    1. 如果結果是 ARCHIVELOG,即可繼續進行下一個步驟。
    2. 如果結果為 NOARCHIVELOG,則需要為資料庫啟用 ARCHIVELOG 模式。
    3. 以 SYSDBA 身分登入後,執行下列指令:

      SHUTDOWN IMMEDIATE;
      STARTUP MOUNT;
      ALTER DATABASE ARCHIVELOG;
      ALTER DATABASE OPEN;
    4. 封存的記錄檔會占用磁碟空間,因此請務必為資料庫設定 DB_RECOVERY_FILE_DEST_SIZE 參數。使用這個參數,指定目標資料庫復原檔案可使用的總空間硬性限制 (以位元組為單位)。設定這項參數後,您就能在保護資料庫免於磁碟空間不足,以及串流因記錄位置遺失而失敗之間取得平衡。

  3. 執行下列 Oracle Recovery Manager (RMAN) 指令,定義資料庫的資料保留政策:

    TARGET /
    CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 4 DAYS;

    建議您將備份和封存記錄檔至少保留 4 天,最好是 7 天。

  4. 返回資料庫工具的 SQL 提示,設定 Oracle 記錄檔輪替政策。建議將記錄檔大小上限設為不超過 512 MB。

  5. 啟用增補記錄檔資料。請先執行下列指令,啟用最低資料庫層級增補記錄功能:

    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;
  6. 直接將適當權限授予用來連結資料庫的使用者帳戶。請注意,如果將這些授權指派給角色,授權就不會生效。如需設定,請執行下列指令:

    GRANT EXECUTE_CATALOG_ROLE TO USER_NAME;
    GRANT CONNECT TO USER_NAME;
    GRANT CREATE SESSION 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_$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 SYS.V_$LOGMNR_CONTENTS TO USER_NAME;
    GRANT SELECT ON SYS.V_$PARAMETER TO USER_NAME;
    GRANT EXECUTE ON DBMS_LOGMNR TO USER_NAME;
    GRANT EXECUTE ON DBMS_LOGMNR_D TO USER_NAME;
    GRANT SELECT ANY TRANSACTION TO USER_NAME;
    GRANT SELECT ANY TABLE TO USER_NAME;

    如果資料庫使用透明資料加密 (TDE),請授予下列權限:

    GRANT SELECT ON DBA_TABLESPACES TO USER_NAME;
    GRANT SELECT ON DBA_ENCRYPTED_COLUMNS TO USER_NAME;

    如果貴組織不允許授予 GRANT SELECT ANY TABLE 權限,請使用 Datastream 常見問題頁面「Oracle 變更資料擷取 (CDC)」一節所述的解決方案。

    如果來源資料庫是 Oracle 12c 以上版本,則請額外授予下列權限:

    GRANT LOGMINING TO USER_NAME;
  7. 將資料庫中 DBA_EXTENTS 檢視表的存取權授予使用者帳戶 SELECT。這項權限可讓您對 Oracle 來源使用以 ROWID 為基礎的回填:

    GRANT SELECT ON DBA_EXTENTS TO USER_NAME;

後續步驟

  • 進一步瞭解 Datastream 如何與 Oracle 來源搭配運作。