資料庫移轉服務會利用 Oracle LogMiner API (屬於 Oracle Database 的一部分) 來查詢封存的重做記錄檔。Redo 記錄檔案包含資料庫活動記錄的相關資訊。如要進一步瞭解資料庫移轉服務如何與這些記錄檔搭配運作,請參閱「 關於 Oracle 遷移作業的資料流程」。
設定 Oracle 來源資料庫
如要透過資料庫移轉服務從來源 Oracle 資料庫提取資料,您必須先設定資料庫,步驟如下:
設定 封存記錄,以便追蹤資料庫中的變更,例如
INSERT
、UPDATE
、DELETE
和RENAME
作業。請授予適當權限給使用者帳戶,以便連結資料庫及存取結構定義和程式碼物件。
根據預設,資料庫移轉服務會嘗試透過
DBA_VIEWS
存取所有物件定義。DBA_VIEWS
的存取權會透過SELECT ANY DICTIONARY
權限授予。如果遷移使用者帳戶無法存取 DBA 檢視畫面,資料庫移轉服務會改用ALL_VIEWS
。這種做法可讓您在定義最符合需求的安全性模型時,享有最高程度的彈性。如果您希望資料庫遷移服務只存取特定的物件定義子集,請授予遷移使用者角色,並設定更精細的權限,而非
SELECT ANY DICTIONARY
。為資料庫定義資料保留政策,以決定要封存哪些資料、封存多久,以及在保留期限結束時,封存或銷毀資料。
資料庫移轉服務支援下列 Oracle 資料庫類型:
設定 Amazon RDS for Oracle 資料庫
確認資料庫是以
ARCHIVELOG
模式運作。如要進行此操作,請執行以下指令:SELECT LOG_MODE FROM V$DATABASE;
如果結果是
ARCHIVELOG
,請繼續執行步驟 c。如果結果是
NOARCHIVELOG
,則必須為資料庫啟用ARCHIVELOG
模式。封存的記錄檔會佔用磁碟空間,因此建議您為資料庫設定
DB_RECOVERY_FILE_DEST_SIZE
參數。使用這個參數,指定目標資料庫復原檔案可使用的總空間上限 (以位元組為單位)。設定這個參數後,您就能在資訊可用性和磁碟空間之間取得平衡。執行以下指令,定義資料庫的資料保留政策:
exec rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours',96);
建議您將備份和封存記錄檔保留至少 4 天,建議值為 7 天。
設定 Oracle 記錄檔輪替政策。建議您將記錄檔大小上限設為不超過 512 MB。如要進一步瞭解如何管理記錄輪替,請參閱「 使用 Oracle 資料庫記錄檔」。
啟用 輔助記錄資料。如要進行這項操作,請先執行下列指令,在資料庫上啟用輔助記錄功能:
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');
請授予適當權限給用來連結您資料庫的使用者帳戶。如需設定,請執行下列指令:
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 資料庫
確認資料庫是以
ARCHIVELOG
模式運作。如要進行此操作,請執行以下指令: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
參數。使用這個參數,指定目標資料庫復原檔案可使用的總空間上限 (以位元組為單位)。設定這個參數後,您就能在資訊可用性和磁碟空間之間取得平衡。
請執行下列 Oracle Recovery Manager (RMAN) 指令,定義資料庫的資料保留政策:
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 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 可插入資料庫,以便與資料庫遷移服務搭配使用,請執行下列步驟:
確認資料庫是以
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
容器和可插入資料庫中的身分相同。一般使用者可以連線至根目錄,並在該目錄中執行作業,也可以在任何具有權限的可插入資料庫中執行作業。一般使用者名稱開頭必須為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 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;