設定 Oracle 來源資料庫

資料庫移轉服務會運用 Oracle 資料庫內建的 Oracle LogMiner API,查詢封存的重做記錄檔。重做記錄檔包含資料庫活動記錄的相關資訊。如要進一步瞭解資料庫移轉服務如何與這些記錄檔搭配運作,請參閱 Oracle 遷移作業的資料流程簡介

設定 Oracle 來源資料庫

如要透過資料庫移轉服務從來源 Oracle 資料庫提取資料,您必須先設定資料庫,步驟如下:

  • 設定 封存記錄,追蹤資料庫中的變更,例如 INSERTUPDATEDELETERENAME 作業。

  • 授予適當權限給用來連結資料庫及存取結構定義和程式碼物件的使用者帳戶。

    根據預設,資料庫移轉服務會嘗試透過 DBA_VIEWS 存取所有物件定義。系統會授予 SELECT ANY DICTIONARY 權限,讓您存取 DBA_VIEWS。 如果遷移使用者帳戶無法存取 DBA 檢視畫面,資料庫遷移服務會改用 ALL_VIEWS。這個做法可讓您享有最大的彈性,定義最符合需求的安全性模型。

    如果希望資料庫移轉服務只存取部分物件定義,請為遷移使用者授予具有更精細權限設定的角色,而非 SELECT ANY DICTIONARY

  • 為資料庫定義資料保留政策,決定要封存哪些資料、保留時間長度,以及保留期限屆滿時是否要封存或銷毀資料。

資料庫移轉服務支援下列類型的 Oracle 資料庫:

設定 Amazon RDS for Oracle 資料庫

  1. 確認資料庫是以 ARCHIVELOG 模式運作。如要進行此操作,請執行以下指令:

    SELECT LOG_MODE FROM V$DATABASE;

    1. 如果結果是 ARCHIVELOG,請繼續執行步驟 c。

    2. 如果結果是 NOARCHIVELOG,則必須為資料庫啟用 ARCHIVELOG 模式。

    3. 封存的記錄檔會佔用磁碟空間,因此建議您為資料庫設定 DB_RECOVERY_FILE_DEST_SIZE 參數。使用這個參數指定目標資料庫復原檔案可使用的總空間硬性限制 (以位元組為單位)。設定這項參數後,您就能在資訊可用性和磁碟空間之間取得平衡。

    4. 執行下列指令,定義資料庫的資料保留政策:

      exec rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours',96);

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

    5. 設定 Oracle 記錄檔輪替政策。建議將記錄檔大小上限設為不超過 512 MB。如要進一步瞭解如何管理記錄檔輪替,請參閱 使用 Oracle 資料庫記錄檔

  2. 啟用增補記錄資料。如要這麼做,請先執行下列指令,啟用資料庫的增補記錄功能:

    exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD');

    接著,選擇要為特定表格或整個資料庫啟用記錄功能。

    如要只記錄特定資料表的變更,請針對要複製的每個資料表執行下列指令:

    ALTER TABLE SCHEMA.TABLE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS

    更改下列內容:

    • SCHEMA:包含資料表的結構定義名稱。
    • TABLE:要記錄變更的資料表名稱。

    如要複製資料庫中的大部分或所有資料表,請考慮為整個資料庫啟用記錄功能。

    在 SQL 提示中執行下列指令,為整個資料庫啟用增補記錄檔資料:

    exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD','ALL');
  3. 將適當權限授予連結至資料庫的使用者帳戶。如需設定,請執行下列指令:

    GRANT CONNECT TO USER_NAME;
    GRANT CREATE SESSION TO USER_NAME;
    exec rdsadmin.rdsadmin_util.grant_sys_object('V_$DATABASE','USER_NAME','SELECT');
    exec rdsadmin.rdsadmin_util.grant_sys_object('V_$ARCHIVED_LOG','USER_NAME','SELECT');
    exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGMNR_LOGS','USER_NAME','SELECT');
    exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGMNR_CONTENTS','USER_NAME','SELECT');
    exec rdsadmin.rdsadmin_util.grant_sys_object('DBMS_LOGMNR','USER_NAME','EXECUTE');
    exec rdsadmin.rdsadmin_util.grant_sys_object('DBMS_LOGMNR_D','USER_NAME','EXECUTE');
    GRANT SELECT ANY TRANSACTION TO USER_NAME;
    GRANT SELECT ANY TABLE TO USER_NAME;
    GRANT SELECT ANY DICTIONARY TO USER_NAME;
    GRANT SELECT ON DBA_EXTENTS TO USER_NAME;

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

    GRANT LOGMINING TO USER_NAME;

設定自行代管的 Oracle 資料庫

  1. 確認資料庫是以 ARCHIVELOG 模式運作。如要進行此操作,請執行以下指令:

    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. 執行下列 Oracle Recovery Manager (RMAN) 指令,定義資料庫的資料保留政策:

    CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 4 DAYS;

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

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

  4. 啟用增補記錄資料。如要這麼做,請先執行下列指令,啟用資料庫的增補記錄功能:

    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. 將適當權限授予連結至資料庫的使用者帳戶。如需設定,請執行下列指令:

    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_$ARCHIVED_LOG TO USER_NAME;
    GRANT SELECT ON SYS.V_$LOGMNR_CONTENTS TO USER_NAME;
    GRANT SELECT ON SYS.V_$LOGMNR_LOGS 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;
    GRANT SELECT ANY DICTIONARY TO USER_NAME;
    GRANT EXECUTE_CATALOG_ROLE TO USER_NAME;
    GRANT SELECT ON DBA_EXTENTS TO USER_NAME;

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

    GRANT LOGMINING TO USER_NAME;

設定自行託管的 Oracle 可插式資料庫

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

如要設定自行託管的 Oracle 可插式資料庫,以便與資料庫遷移服務搭配使用,請按照下列步驟操作:

  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. 返回您用來設定 Oracle 記錄檔輪替政策的資料庫工具 SQL 提示。建議將記錄檔大小上限設為不超過 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 容器和可插拔資料庫中具有相同身分。一般使用者可以連線至根目錄,並在其中執行作業,也可以在具有權限的任何可外掛資料庫中執行作業。通用使用者名稱開頭必須為 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 ANY DICTIONARY TO USER_NAME;
      GRANT SELECT ON SYS.V_$DATABASE 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 DBA_EXTENTS TO USER_NAME;