本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
透過資料庫連結使用直接的 Oracle 資料汲取匯入,將現場部署 Oracle 資料庫遷移到適用於甲骨文的 Amazon RDS
創建者:里茲旺德 (AWS)
環境:生產 | 來源:內部部署 Oracle 資料庫 | 目標:Amazon RDS for Oracle |
R 類型:重新平台 | 工作量:甲骨文 | 技術:移轉;資料庫 |
AWS 服務:AWS DMS;AWS Direct Connect;Amazon RDS |
Summary
許多模式涵蓋了使用 Oracle 資料泵 (一種原生 Oracle 公用程式),將現場部署 Oracle 資料庫遷移到亞馬遜 RDS for Oracle 工作負載,這是遷移大型 Oracle 工作負載的首選方式。這些模式通常涉及將應用程式結構描述或表格匯出到傾印檔案,將傾印檔案傳輸到 Amazon RDS for Oracle 上的資料庫目錄,然後從傾印檔案匯入應用程式結構描述和資料。
使用這種方法,移轉可能需要更長的時間,具體取決於資料大小以及將傾印檔案傳輸到 Amazon RDS 執行個體所需的時間。此外,傾印檔案位於 Amazon RDS 執行個體的 Amazon Elastic Block Store (Amazon EBS) 磁碟區上,該磁碟區必須足夠容納資料庫和傾印檔案。匯入後刪除傾印檔案時,無法擷取空白空間,因此您會繼續支付未使用的空間費用。
此模式透過資料庫連結使用 Oracle 資料泵 API (DBMS_DATAPUMP
),在 Amazon RDS 執行個體上執行直接匯入,以減輕這些問題。此模式會在來源與目標資料庫之間同時啟動匯出和匯入管線。此模式不需要調整傾印檔案的 EBS 磁碟區大小,因為磁碟區上不會建立或儲存傾印檔案。此方法可節省未使用磁碟空間的每月成本。
先決條件和限制
先決條件
有效的 Amazon Web Services (AWS) 帳戶。
透過至少兩個可用區域的私有子網路設定的虛擬私有雲端 (VPC),以提供 Amazon RDS 執行個體的網路基礎設施。
內部部署資料中心中的 Oracle 資料庫。
單一可用區域中的現有 Amazon RDS Oracle
執行個體。使用單一可用區域可改善移轉期間的寫入效能。異地同步備份部署可在切換前 24—48 小時啟用。 AWS Direct Connect
(建議用於大型資料庫)。 內部部署的網路連線和防火牆規則,設定為允許從 Amazon RDS 執行個體到現場部署 Oracle 資料庫的輸入連線。
限制
Amazon RDS for Oracle 文的數據庫大小限制為 64 TiB(截至 2022 年 12 月)。
產品版本
來源資料庫:Oracle 資料庫版本 10g 版本 1 及更新版本。
目標資料庫:如需 Amazon RDS 上支援的最新版本和版本清單,請參閱 AWS 文件中的 Amazon RDS for Oracle 文件。
架構
源, 技術, 堆棧
內部部署或雲端中的自我管理 Oracle 資料庫
目標技術堆疊
Amazon RDS for Oracle
目標架構
下圖顯示在單一可用區域環境中從現場部署 Oracle 資料庫遷移到 Amazon RDS for Oracle 的架構。箭頭方向描繪了架構中的數據流。圖表不會顯示啟動連線的元件。
![""](images/pattern-img/d54e7777-dcd2-4039-9b76-97e1019ef112/images/78429a29-e110-485a-a501-9764decd7e92.png)
適用於 Oracle 執行個體的 Amazon RDS 會連接到現場部署來源 Oracle 資料庫,以透過資料庫連結執行全負載遷移。
AWS DMS 會連接到現場部署來源 Oracle 資料庫,以使用變更資料擷取 (CDC) 執行持續複寫。
CDC 變更會套用至 Amazon RDS for Oracle 資料庫。
工具
AWS 服務
AWS Database Migration Service (AWS DMS) 可協助您將資料存放區遷移到 AWS 雲端,或在雲端和現場部署設定的組合之間遷移資料存放區。此病毒碼使用 CDC 和僅複製資料變更設定。
AWS Direct Connect 會透過標準乙太網路光纖纜線將您的內部網路連結到直接 Connect 位置。透過此連線,您可以直接建立公有 AWS 服務的虛擬界面,同時略過網路路徑中的網際網路服務供應商。
適用於甲骨文的 Amazon Relational Database Service 服務 (Amazon RDS) 可協助您在 AWS 雲端中設定、操作和擴展 Oracle 關聯式資料庫。
其他工具
「Oracle 資料汲
取」可協助您以高速將資料和中繼資料從一個資料庫移至另一個資料庫。 Oracle 即時客戶端
或 SQL 開發人員 等客戶端工具用於在數據庫上連接和運行 SQL 查詢。
最佳實務
雖然 AWS Direct Connect
史诗
任務 | 描述 | 所需技能 |
---|---|---|
設定從目標資料庫到來源資料庫的網路連線。 | 設定現場部署網路和防火牆,以允許從目標 Amazon RDS 執行個體連入到現場部署來源 Oracle 資料庫的連入連線。 | 網路管理員、安全工程師 |
建立具有適當權限的資料庫使用者。 | 在內部部署來源 Oracle 資料庫中建立資料庫使用者,並具有使用「Oracle 資料汲取」在來源和目標之間移轉資料的權限。
| DBA |
準備用於 AWS DMS CDC 移轉的現場部署來源資料庫。 | (選擇性) 在完成 Oracle 資料泵完整負載之後,準備用於 AWS DMS CDC 移轉的現場部署來源 Oracle 資料庫: | DBA |
安裝和設定 SQL 開發人員。 | 安裝並設定 SQL 開發人員 | DBA,移民工程師 |
產生命令檔以建立表格空間。 | 使用下列範例 SQL 查詢,在來源資料庫上產生指令碼。
該腳本將應用於目標數據庫。 | DBA |
產生指令碼以建立使用者、設定檔、角色和權限。 | 若要產生命令檔來建立資料庫使用者、設定檔、角色和權限,請使用「Oracle 客戶 Support 務部」文件「如何擷取使用者的 DDL」(包括使用 dbms_metadata.get_ddl (文件識別碼 2739952.1) 中的指令集 (需要 該腳本將應用於目標數據庫。 | DBA |
任務 | 描述 | 所需技能 |
---|---|---|
建立來源資料庫的資料庫連結,並驗證連線能力。 | 若要建立內部部署來源資料庫的資料庫連結,您可以使用下列範例命令。
若要驗證連線能力,請執行下列 SQL 命令。
如果響應是成功的連接 | DBA |
執行指令碼以準備目標執行個體。 | 執行先前產生的指令碼以準備適用於 Oracle 執行個體的目標 Amazon RDS:
這有助於確保「Oracle 資料汲取」移轉可以建立綱要及其物件。 | DBA,移民工程師 |
任務 | 描述 | 所需技能 |
---|---|---|
移轉必要的結構描述。 | 若要將必要的結構描述從來源現場部署資料庫遷移到目標 Amazon RDS 執行個體,請使用其他資訊一節中的程式碼:
若要調整移轉的效能,您可以執行下列命令來調整 parallel 處理程序的數目。
| DBA |
收集綱要統計資料以改善效能。 | 「收集綱要統計資料」命令會傳回為資料庫物件收集的 Oracle 查詢最佳化處理程 使用此資訊,最佳化處理程式可以針對這些物件選取任何查詢的最佳執行計劃。
| DBA |
任務 | 描述 | 所需技能 |
---|---|---|
擷取來源內部部署 Oracle 資料庫上的 SCN。 | 擷取來源內部部署 Oracle 資料庫上的系統變更編號 (SCN) 若要在來源資料庫上產生目前的 SCN,請執行下列 SQL 敘述句。
| DBA |
執行結構描述的完整負載移轉。 | 若要將所需的結構描述 (
在程式碼中,取代
若要調整移轉的效能,您可以調整 parallel 程序的數目。
| DBA |
停用已移轉結構描述下的觸發器。 | 在您開始執行 AWS DMS 僅限 CDC 的任務之前,請先停用遷移的結構描述 | DBA |
收集綱要統計資料以改善效能。 | 「收集綱要統計資料」命令會傳回為資料庫物件收集的 Oracle 查詢最佳化處理程 使用此資訊,最佳化處理程式可以針對這些物件選取任何查詢的最佳執行計劃。
| DBA |
使用 AWS DMS 執行從來源到目標的持續複寫。 | 使用 AWS DMS 執行從來源 Oracle 資料庫到目標 Amazon RDS (適用於甲骨文執行個體) 的持續複寫。 如需詳細資訊,請參閱使用 AWS DMS 建立持續複寫的任務和部落格文章如何在 AWS DMS 中使用原生 CDC 支援 | DBA,移民工程師 |
任務 | 描述 | 所需技能 |
---|---|---|
在切換前 48 小時在執行個體上啟用異地同步備份。 | 如果這是生產執行個體,建議您在 Amazon RDS 執行個體上啟用異地同步備份部署,以提供高可用性 (HA) 和災難復原 (DR) 的優點。 | DBA,移民工程師 |
停止僅限 AWS DMS 光碟的任務 (如果 CDC 已開啟)。 |
| DBA |
啟用觸發器。 | 啟用您在 CDC 工作建立之前停用的觸發器。 | DBA |
相關資源
AWS
甲骨文文件
其他資訊
程式碼 1:僅限全負載移轉,單一應用程式結構描述
DECLARE v_hdnl NUMBER; BEGIN v_hdnl := DBMS_DATAPUMP.OPEN(operation => 'IMPORT', job_mode => 'SCHEMA', remote_link => '<DB LINK Name to Source Database>', job_name => null); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'import_01.log', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_log_file); DBMS_DATAPUMP.METADATA_FILTER(v_hdnl,'SCHEMA_EXPR','IN (''<schema_name>'')'); -- To migrate one selected schema DBMS_DATAPUMP.METADATA_FILTER (hdnl, 'EXCLUDE_PATH_EXPR','IN (''STATISTICS'')'); -- To prevent gathering Statistics during the import DBMS_DATAPUMP.SET_PARALLEL (handle => v_hdnl, degree => 4); -- Number of parallel processes performing export and import DBMS_DATAPUMP.START_JOB(v_hdnl); END; /
程式碼 2:僅限全負載移轉、多個應用程式結構描述
DECLARE v_hdnl NUMBER; BEGIN v_hdnl := DBMS_DATAPUMP.OPEN(operation => 'IMPORT', job_mode => 'SCHEMA', remote_link => '<DB LINK Name to Source Database>', job_name => null); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'import_01.log', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_log_file); DBMS_DATAPUMP.METADATA_FILTER (v_hdnl, 'SCHEMA_LIST', '''<SCHEMA_1>'',''<SCHEMA_2>'', ''<SCHEMA_3>'''); -- To migrate multiple schemas DBMS_DATAPUMP.METADATA_FILTER (v_hdnl, 'EXCLUDE_PATH_EXPR','IN (''STATISTICS'')'); -- To prevent gathering Statistics during the import DBMS_DATAPUMP.SET_PARALLEL (handle => v_hdnl, degree => 4); -- Number of parallel processes performing export and import DBMS_DATAPUMP.START_JOB(v_hdnl); END; /
程式碼 3:僅限 CDC 工作之前的全負載移轉,單一應用程式結構描述
DECLARE v_hdnl NUMBER; BEGIN v_hdnl := DBMS_DATAPUMP.OPEN(operation => 'IMPORT', job_mode => 'SCHEMA', remote_link => '<DB LINK Name to Source Database>', job_name => null); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'import_01.log', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_log_file); DBMS_DATAPUMP.METADATA_FILTER(v_hdnl,'SCHEMA_EXPR','IN (''<schema_name>'')'); -- To migrate one selected schema DBMS_DATAPUMP.METADATA_FILTER (v_hdnl, 'EXCLUDE_PATH_EXPR','IN (''STATISTICS'')'); -- To prevent gathering Statistics during the import DBMS_DATAPUMP.SET_PARAMETER (handle => v_hdnl, name => 'FLASHBACK_SCN', value => <CURRENT_SCN_VALUE_IN_SOURCE_DATABASE>); -- SCN required for AWS DMS CDC only task. DBMS_DATAPUMP.SET_PARALLEL (handle => v_hdnl, degree => 4); -- Number of parallel processes performing export and import DBMS_DATAPUMP.START_JOB(v_hdnl); END; /
代碼 4:僅限 CDC 任務之前的全負載遷移,多個應用程序模式
DECLARE v_hdnl NUMBER; BEGIN v_hdnl := DBMS_DATAPUMP.OPEN (operation => 'IMPORT', job_mode => 'SCHEMA', remote_link => '<DB LINK Name to Source Database>', job_name => null); DBMS_DATAPUMP.ADD_FILE (handle => v_hdnl, filename => 'import_01.log', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_log_file); DBMS_DATAPUMP.METADATA_FILTER (v_hdnl, 'SCHEMA_LIST', '''<SCHEMA_1>'',''<SCHEMA_2>'', ''<SCHEMA_3>'''); -- To migrate multiple schemas DBMS_DATAPUMP.METADATA_FILTER (v_hdnl, 'EXCLUDE_PATH_EXPR','IN (''STATISTICS'')'); -- To prevent gathering Statistics during the import DBMS_DATAPUMP.SET_PARAMETER (handle => v_hdnl, name => 'FLASHBACK_SCN', value => <CURRENT_SCN_VALUE_IN_SOURCE_DATABASE>); -- SCN required for AWS DMS CDC only task. DBMS_DATAPUMP.SET_PARALLEL (handle => v_hdnl, degree => 4); -- Number of parallel processes performing export and import DBMS_DATAPUMP.START_JOB(v_hdnl); END; /
混合移轉方法可以更好地運作的案例
在極少數情況下,來源資料庫包含具有數百萬個資料列的資料表和非常大型的 LOBLOSEGION 資料行,此模式會拖慢移轉速度。Oracle 會透過網路連結,一次移轉一個大區段。它會從來源表格擷取單一資料列 (連同 LOB 資料欄資料),然後將資料列插入目標資料表中,重複此程序直到所有資料列都移轉為止。透過資料庫連結的 Oracle 資料汲取不支援 LOB 區段的大量載入或直接路徑載入機制。
在這種情況下,我們建議您執行以下操作:
新增下列中繼資料篩選器,可在「Oracle 資料汲取」移轉期間略過已識別的表格。
dbms_datapump.metadata_filter(handle =>h1, name=>'NAME_EXPR', value => 'NOT IN (''TABLE_1'',''TABLE_2'')');
使用 AWS DMS 任務 (全負載遷移,必要時搭配 CDC 複寫) 遷移已識別的資料表。AWS DMS 會從來源 Oracle 資料庫擷取多個資料列,然後將它們以批次形式插入目標 Amazon RDS 執行個體,進而提升效能。