設定可插拔式 Oracle 資料庫

Datastream 支援 Oracle 多租戶架構,其中單一容器資料庫 (CDB) 包含一或多個可插入資料庫 (PDB)。每個可插入式資料庫都是獨立的資料庫,具有不重複的 ID 和名稱,且可獨立管理。

您可以設定可插入式 Oracle 資料庫,以便搭配下列 CDC 方法使用:

如要進一步瞭解二進位記錄讀取器和 LogMiner API,請參閱「使用 Oracle 資料庫的重做記錄檔」。

如要進一步瞭解如何針對每種方法設定 Oracle 來源資料庫,請參閱後續各節。

為二進位記錄檔讀取器設定可插入的 Oracle 資料庫

如要設定可插拔的 Oracle 資料庫,以便與二進位記錄讀取器 CDC 方法搭配使用,請執行下列步驟:

  1. 請選取下列任一方法存取記錄檔:

    • 儲存空間自動管理 (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存取權的資料庫使用者名稱。

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

  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 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 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 搭配使用,請執行下列步驟:

  1. 確認資料庫是以 ARCHIVELOG 模式運作。如要這麼做,請在 CDB$ROOT 容器中執行下列指令:

    SELECT LOG_MODE FROM V$DATABASE;

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

      SHUTDOWN IMMEDIATE;
      STARTUP MOUNT;
      ALTER DATABASE ARCHIVELOG;
      ALTER DATABASE OPEN;
      
    4. 封存的記錄檔會佔用磁碟空間,因此建議您為資料庫設定 DB_RECOVERY_FILE_DEST_SIZE 參數。使用這個參數,指定目標資料庫復原檔案可使用的總空間上限 (以位元組為單位)。設定這個參數後,您就能在保護資料庫免於磁碟空間不足的情況下,管理因記錄位置遺失而導致串流失敗的情況。

  2. 請在 CDB$ROOT 容器中執行下列 Oracle Recovery Manager (RMAN) 指令,定義資料庫的資料保留政策:

    CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 4 DAYS;
    

    這項指令會為容器資料庫中的所有可插入資料庫定義資料保留政策。

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

  3. 返回您要使用的資料庫工具的 SQL 提示,設定 Oracle 記錄檔輪替政策。建議您將記錄檔大小上限設為 512 MB 以下。

  4. 啟用增補記錄資料。如要啟用這項功能,請先執行下列指令,在 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;
    
  5. 建立一般使用者。一般使用者在 CDB$ROOT 容器和可插入資料庫中的身分相同。一般使用者可以連線至 CDB$ROOT 容器,並在該容器中執行作業,也可以在任何具有權限的可插入資料庫中執行作業。一般使用者名稱的開頭必須為 C##c##

  6. 請授予適當權限給要用來連結您資料庫的一般使用者。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;
    
  7. 授予一般使用者 SELECT 對資料庫中 DBA_EXTENTS 檢視表的存取權。這項權限可讓您為 Oracle 來源使用 ROWID 為基礎的回補作業:

    GRANT SELECT ON DBA_EXTENTS TO USER_NAME;

後續步驟

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