在AWS RDS(Oracle)上執行資料匯入

2021-07-10 13:10:37 字數 3969 閱讀 1037

生成匯出資料。

傳輸匯出資料至aws rds。

遠端登入至aws rds並執行資料匯入操作。

為了方便管理,可將資料匯出目錄指定到特定資料夾,如:d:\dump_dir.

create

orreplace directory dump_dir as

'd:\dump_dir';

select * from dba_directories where directory_name='dump_dir';
目錄d:\dump_dir需要在檔案系統上真實存在,因為oracle不會替使用者在檔案系統中建立這個目錄。

create

user data_operator_001 identified by password_of_data_operator_001 default tablespace users;

grant

create

session, create

table, exp_full_database to data_operator_001;

alter

user data_operator_001 quota 100m on users;

grant

read, write

on directory dump_dir to data_operator_001;

grant

execute

on dbms_datapump to data_operator_001;

賦予使用者exp_full_database許可權是為了讓其能夠匯出其他使用者的資料庫資訊。

修改使用者在預設表空間users的額度是為了能讓dbms_datapump.open能夠建立jobs,否則會出現job不存在錯誤。

賦予使用者dbms_datapump 的執行許可權是為了下一步能通過dbms_datapump包api匯出資料。

這一步驟主要使用dbms_datapump包api完成.

declare

dp_handle number;

begin

--sepcified operation,job mode

dp_handle := dbms_datapump.open(operation => 'export',

job_mode => 'schema',

remote_link => null,

job_name => 'dump_database_data_operator_001',

version => 'latest');

--specified dumpfile and dump directory

dbms_datapump.add_file(handle => dp_handle,

filename => 'data_operator_001.dmp',

directory => 'dump_dir',

filetype => dbms_datapump.ku$_file_type_dump_file);

--specified log file and dump directory

dbms_datapump.add_file(handle => dp_handle,

filename => 'exp.log',

directory => 'dump_dir',

filetype => dbms_datapump.ku$_file_type_log_file);

--specified fliter for schema

dbms_datapump.metadata_filter(dp_handle, 'schema_expr', 'in ('

'need_to_export_schema'

')');

dbms_datapump.start_job(dp_handle);

dbms_datapump.detach(dp_handle);

end;

這一步利用 dbms_file_transfer 工具包完成。

begin

dbms_file_transfer.put_file(source_directory_object => 'dump_dir',

source_file_name => 'data_operator_001.dmp',

destination_directory_object => 'data_pump_dir',

destination_file_name => 'data_operator_001.dmp',

destination_database => 'aws_rds');

end;

source_directory_object、source_file_name 的值需要與上步對應,否則 dbms_file_transfer 無法找到匯出的資料檔案。

destination_directory_object設定成data_pump_dir,原因就是我們無法在aws rds上建立檔案系統目錄(如果發現怎麼建立請告知我,謝謝!),所以就用oracle的預設值:data_pump_dir。

destination_database 的值需要通過如下方式建立,其定義了乙個遠端oracle例項。

create

database link aws_rds connect

to user_on_aws_rds identified by password

using

'(description=(address=(protocol=tcp)(host=***xx.***xx.ap-southeast-1.rds.amazonaws.com)(port=1521))(connect_data=(sid=orcl)))'

這個步驟使用的工具:impdp

impdp user_on_aws_rds/password@aws_oracle remap_schema=source_schema:destination_schema remap_tablespace=source_space:destination_space dumpfile=data_operator_001.dmp directory=data_pump_dir  table_exists_action=replace
命令中的aws_oracle 為tns(transparent network substrate)節點名,這個需要事先在oracle安裝目錄下的network\admin\tnsnames.ora檔案中新增。以下附了乙個連線aws rds的tns節點名示例。

命令中destination_schema一般跟登入名相同。

命令中的destination_space需要事先在aws rds上建立。

table_exists_action=replace為匯入時的策略,請根據自己實際情況新增修改。

aws_oracle=(description=(address=(protocol=tcp)(host=***xx.***xx

.ap-southeast-1.rds.amazonaws

.com)(port=1521))(connect_data=(sid=orcl)))

references:

1. 使用 oracle datapump api 實現資料匯出:

3. oracle data pump 工具系列:data pump 使用許可權配置詳解:

4. importing data into oracle on amazon rds:

在ubuntu上安裝pascal,並編譯執行

安裝sudo apt install fp compiler 乙個簡單的程式 使用命令vi file.pas,將 寫入。program maxnumber input,output var num1,num2,num3,max integer begin read num1,num2,num3 if...

React Native提高在模擬器上的執行速度

最近在模擬器上執行專案的時候發現卡頓特別嚴重,在無數次的試驗中找到了乙個好的方法 在命令列執行命令 react native link 會出現如下提示 rnpm install info linking react native video ios dependency rnpm install i...

blueZ 5 37 交叉編譯可以在arm上執行

之前編譯過bluez4.95的,方法沒有記錄,現在又要不編譯5.37又要重新來一遍,中間各種依賴的庫,各種坑,現在要完完全全的記錄下來。5.37的bluez需要依賴的庫expat 2.0.1.tar.gz glib 2.45.3.tar.xz readline 5.2.tar.gz libical ...