AWS RDS Oracle資料遷移

lhrbest發表於2021-02-20


官網:

https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Oracle.Procedural.Importing.html#Oracle.Procedural.Importing.DataPump.DBLink

https://amazonaws-china.com/cn/blogs/china/oracle-data-pump-rds-oracle/



https://blog.csdn.net/zhangyongze_z/article/details/80407601

https://www.cnblogs.com/hmwh/p/13582037.html




Oracle Data Pump

長期來看,Oracle Data Pump 最終會取代 Oracle Export/Import 實用工具,成為將大量資料從 Oracle 安裝遷移到 Amazon RDS 資料庫例項的首選方法。有幾種情況可以使用 Oracle Data Pump:

  • 將資料從一個 Oracle 資料庫 (可以為本地或 Amazon EC2 例項) 匯入到另一個 Amazon RDS Oracle 資料庫例項

  • 將資料從一個 Amazon RDS Oracle 資料庫例項匯入到 Oracle 資料庫 (可以為本地或 Amazon EC2 例項)

  • 在 Amazon RDS Oracle 資料庫例項之間匯入資料 (例如,將資料從 EC2-Classic 遷移到 VPC)

要下載 Oracle Data Pump 實用程式,請轉到  http://www.oracle.com/technetwork/database/features/instant-client

以下過程使用 Oracle Data Pump 和  DBMS_FILE_TRANSFER 包。該過程連線到源 Oracle 例項 (可以為本地或 Amazon EC2 例項,或者為 Amazon RDS Oracle 資料庫例項) 並使用  DBMS_DATAPUMP 包匯出資料。然後使用 DBMS_FILE_TRANSFER.PUT_FILE 方法,將轉儲檔案從 Oracle 例項中複製到通過資料庫連結來連線的目標 Amazon RDS Oracle 資料庫例項上的 DATA_PUMP_DIR 目錄。最後一步是,使用 DBMS_DATAPUMP 包,將資料從複製的轉儲檔案中匯入到 Amazon RDS Oracle 資料庫例項。

此過程有以下要求:

  • 您必須具有 DBMS_FILE_TRANSFER 包和 DBMS_DATAPUMP 包的執行特權。

  • 目標資料庫例項必須為 11.2.0.2 .v6 版本或更高版本.

  • 您必須具有源資料庫例項上的 DATA_PUMP_DIR 目錄的寫入特權.

  • 您必須確保有足夠的儲存空間來儲存源例項和目標資料庫例項上的轉儲檔案.

注意

此過程將轉儲檔案匯入到 DATA_PUMP_DIR 目錄 (這是所有 Oracle 資料庫例項上的預配置目錄) 中。此目錄位於您的資料檔案所在的儲存捲上。在匯入轉儲檔案時,現有的 Oracle 資料檔案將佔用更多空間,因此您應確保資料庫例項也能提供額外空間。匯入的轉儲檔案不會自動從 DATA_PUMP_DIR 目錄中刪除或清除。使用  UTL_FILE.FREMOVE 可移除匯入的轉儲檔案。

使用 Oracle Data Pump 和 DBMS_FILE_TRANSFER 包的匯入過程包含以下步驟:

  • 步驟 1:向使用者授予 Amazon RDS 目標例項上的特權

  • 步驟 2:向使用者授予源資料庫的特權

  • 步驟 3:使用 DBMS_DATAPUMP 建立轉儲檔案

  • 步驟 4:建立目標資料庫例項的資料庫連結

  • 步驟 5:使用 DBMS_FILE_TRANSFER 將匯出的轉儲檔案複製到目標資料庫例項

  • 步驟 6:在目標資料庫例項上使用 DBMS_DATAPUMP 匯入資料檔案

  • 步驟 7:清除

步驟 1:向使用者授予 Amazon RDS 目標例項上的特權

  1. 使用 SQL Plus 或 Oracle SQL Developer 連線到要匯入的資料的 Amazon RDS 目標 Oracle 資料庫例項。以 Amazon RDS 主使用者的身份連線。有關連線到資料庫例項的資訊,請參閱 與執行 Oracle 資料庫引擎的資料庫例項連線

  2. 在匯入資料之前,建立所需的表空間。有關更多資訊,請參閱  建立表空間並配置其大小

  3. 如果要匯入資料的使用者賬戶不存在,請建立使用者賬戶並授予必需的許可權和角色。如果您將資料匯入到多個使用者架構,請建立各個使用者賬戶並向其授予所需的特權和角色。

    例如,以下命令建立新的使用者並授予所需許可權和角色,以將資料匯入到使用者架構中

    create user schema_1 identified by password;grant create session, resource to schema_1;alter user schema_1 quota 100M on users;

     

    此示例授予新使用者 CREATE SESSION 特權和 RESOURCE 角色。根據您要匯入的資料庫物件,可能需要其他特權和角色。

步驟 2:向使用者授予源資料庫的特權

使用 SQL Plus 或 Oracle SQL Developer 連線到包含要匯入的資料的 Oracle 例項。如有必要,可建立使用者賬戶並授予必要許可權。

注意

如果源資料庫是 Amazon RDS 例項,則可以跳過此步驟。您將使用您的 Amazon RDS 主使用者賬戶來執行匯出。

以下命令建立新使用者並授予必要許可權:

1
2
3
4
5
6
7
create  user  export_user identified  by  < password >;
grant  create  session,  create  table create  database  link  to  export_user;
alter  user  export_user quota 100M  on  users;
grant  read , write  on  directory data_pump_dir  to  export_user;
grant  select_catalog_role  to  export_user;
grant  execute  on  dbms_datapump  to  export_user;
grant  execute  on  dbms_file_transfer  to  export_user;

步驟 3:使用 DBMS_DATAPUMP 建立轉儲檔案

使用 SQL Plus 或 Oracle SQL Developer,以管理使用者或步驟 2 中建立的使用者的身份連線到源 Oracle 例項。如果源資料庫是 Amazon RDS Oracle 資料庫例項,請使用 Amazon RDS 主使用者身份連線。然後,使用 Oracle Data Pump 實用工具建立轉儲檔案。

以下指令碼在 DATA_PUMP_DIR 目錄中建立一個名為  sample.dmp 的轉儲檔案。

1
2
3
4
5
6
7
8
9
10
DECLARE
hdnl NUMBER;
BEGIN
hdnl := DBMS_DATAPUMP. OPEN ( operation =>  'EXPORT' , job_mode =>  'SCHEMA' , job_name=> null );
DBMS_DATAPUMP.ADD_FILE( handle => hdnl, filename =>  'sample.dmp' , directory =>  'DATA_PUMP_DIR' , filetype => dbms_datapump.ku$_file_type_dump_file);
DBMS_DATAPUMP.ADD_FILE( handle => hdnl, filename =>  'exp.log' , directory =>  'DATA_PUMP_DIR' , filetype => dbms_datapump.ku$_file_type_log_file);
DBMS_DATAPUMP.METADATA_FILTER(hdnl, 'SCHEMA_EXPR' , 'IN (' 'SCHEMA_1' ')' );
DBMS_DATAPUMP.START_JOB(hdnl);
END ;
/

步驟 4:建立目標資料庫例項的資料庫連結

在源例項和目標資料庫例項之間建立資料庫連結。請注意,您的本地 Oracle 例項必須具有至資料庫例項的網路連線,然後才能建立資料庫連結以及傳輸匯出轉儲檔案。

執行此步驟,使用與上一步中相同的使用者賬戶連線。

如果您將在同一 VPC 或對等 VPC 中的兩個資料庫例項之間建立資料庫連結,則這兩個資料庫例項之間應具有有效路由。每個資料庫例項的安全組必須允許另一個資料庫例項的傳入和傳出。安全組入站和出站規則可引用同一 VPC 或對等 VPC 中的安全組。有關更多資訊,請參閱  在 VPC 中調整用於資料庫例項的資料庫連結

以下命令建立名為  to_rds 的資料庫連結,連線到位於目標資料庫例項中的 Amazon RDS 主使用者:

1
2
create  database  link to_rds  connect  to  <master_user_account> identified  by  < password >
using  '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<dns or ip address of remote db>)(PORT=<listener port>))(CONNECT_DATA=(SID=<remote SID>)))' ;

步驟 5:使用 DBMS_FILE_TRANSFER 將匯出的轉儲檔案複製到目標資料庫例項

使用 DBMS_FILE_TRANSFER 將轉儲檔案從源資料庫例項複製到目標資料庫例項。以下指令碼將名為 sample.dmp 的轉儲檔案從源例項複製到名為  to_rds 的目標資料庫連結 (已在上一步中建立):

1
2
3
4
5
6
7
8
9
10
BEGIN
DBMS_FILE_TRANSFER.PUT_FILE(
source_directory_object       =>  'DATA_PUMP_DIR' ,
source_file_name              =>  'sample.dmp' ,
destination_directory_object  =>  'DATA_PUMP_DIR' ,
destination_file_name         =>  'sample_copied.dmp' ,
destination_database          =>  'to_rds'
);
END ;
/

步驟 6:在目標資料庫例項上使用 DBMS_DATAPUMP 匯入資料檔案

在資料庫例項中可使用 Oracle Data Pump 匯入架構。請注意,可能需要額外選項 (例如,METADATA_REMAP)。

使用 Amazon RDS 主使用者賬戶連線到資料庫例項來執行匯入。

1
2
3
4
5
6
7
8
9
DECLARE
hdnl NUMBER;
BEGIN
hdnl := DBMS_DATAPUMP. OPEN ( operation =>  'IMPORT' , job_mode =>  'SCHEMA' , job_name=> null );
DBMS_DATAPUMP.ADD_FILE( handle => hdnl, filename =>  'sample_copied.dmp' , directory =>  'DATA_PUMP_DIR' , filetype => dbms_datapump.ku$_file_type_dump_file);
DBMS_DATAPUMP.METADATA_FILTER(hdnl, 'SCHEMA_EXPR' , 'IN (' 'SCHEMA_1' ')' );
DBMS_DATAPUMP.START_JOB(hdnl);
END ;
/

您可以通過檢視資料庫例項上使用者的表來驗證資料匯入。例如,以下查詢會返回 schema_1 的表的編號:

 
1
select  count (*)  from  dba_tables  where  owner= 'SCHEMA_1' ;

步驟 7:清除

匯入資料後,可以刪除不再需要保留的檔案。通過使用以下命令,可列出 DATA_PUMP_DIR 中的檔案:

1
select  from  table (RDSADMIN.RDS_FILE_UTIL.LISTDIR( 'DATA_PUMP_DIR' ))  order  by  mtime;

注意

RDSADMIN.RDS_FILE_UTIL.LISTDIR 不可用於版本 11.2.0.2。

以下命令可用於刪除 DATA_PUMP_DIR 中不再需要的檔案:

1
exec  utl_file.fremove( 'DATA_PUMP_DIR' , '<file name>' );

例如,以下命令可刪除名為“sample_copied.dmp”的檔案:

1
exec  utl_file.fremove( 'DATA_PUMP_DIR' , 'sample_copied.dmp' );




About Me

........................................................................................................................

● 本文作者:小麥苗,部分內容整理自網路,若有侵權請聯絡小麥苗刪除

● 本文在個人微 信公眾號( DB寶)上有同步更新

● QQ群號: 230161599 、618766405,微信群私聊

● 個人QQ號(646634621),微 訊號(db_bao),註明新增緣由

● 於 2021年2月完成

● 最新修改時間:2021年2月

● 版權所有,歡迎分享本文,轉載請保留出處

........................................................................................................................

小麥苗的微店https://weidian.com/s/793741433?wfr=c&ifr=shopdetail

● 小麥苗出版的資料庫類叢書: http://blog.itpub.net/26736162/viewspace-2142121/

小麥苗OCP、OCM、高可用、MySQL、DBA學習班http://blog.itpub.net/26736162/viewspace-2148098/

● 資料庫筆試面試題庫及解答: http://blog.itpub.net/26736162/viewspace-2134706/

........................................................................................................................

請掃描下面的二維碼來關注小麥苗的微 信公眾號( DB寶)及QQ群(230161599、618766405)、新增小麥苗微 信(db_bao), 學習最實用的資料庫技術。

........................................................................................................................

 

 



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26736162/viewspace-2757940/,如需轉載,請註明出處,否則將追究法律責任。

相關文章