12c 使用資料泵複製資料庫結構的注意事項

shilei1發表於2018-01-23
剛剛結束了一個使用資料泵複製資料庫結構的工作,將過程和注意事項記錄下來以供參考。

源端
1. 建立目錄

create or replace directory dp_dir as '/u02/files';

2. 匯出使用者SH,HR的所有結構,不需要資料

vi scott_meta.par
userid="/ as sysdba"
directory=dp_dir
dumpfile=scott_expdp.dmp
schemas=sh,hr
content=metadata_only

開啟4個並行來執行匯出
expdp parfile=scott_meta.par parallel=4

3. 匯出資料庫表空間結構

vi scott_tbs.par
userid="/ as sysdba"
directory=dp_dir
dumpfile=scott_tbs.dmp
include=tablespace
full=y
content=metadata_only

開啟2個並行來執行匯出
expdp parfile=scott_tbs.par parallel=2

4. 複製密碼校驗規則指令碼

源庫使用了密碼規則,透過修改下面的檔案可以獲得。

cd $ORACLE_HOME/rdbms/admin
cp utlpwdmg.sql scott_utlpwdmg.sql

根據需要修改指令碼內容,如果只是需要一個密碼驗證的話可以按照下面的方式來修改。

vi scott_utlpwdmg.sql

...省去部分內容
ALTER PROFILE DEFAULT LIMIT
/*
PASSWORD_LIFE_TIME 90
PASSWORD_GRACE_TIME 3
PASSWORD_REUSE_TIME 365
PASSWORD_REUSE_MAX 20
FAILED_LOGIN_ATTEMPTS 3
PASSWORD_LOCK_TIME 1
*/
PASSWORD_VERIFY_FUNCTION ora12c_verify_function;
...省去部分內容


5. 複製profile指令碼

源庫使用者有app_profile限制,需要手工匯出

SYS@cdb > select distinct profile from dba_profiles;

PROFILE
---------------
APP_PROFILE
DEFAULT


select profile,resource_name,limit from dba_profiles where profile='APP_PROFILE';

透過上面的查詢結構修改指令碼為
vi app_profile.sql

CREATE PROFILE "APP_PROFILE" LIMIT
CPU_PER_SESSION UNLIMITED
CPU_PER_CALL UNLIMITED
CONNECT_TIME UNLIMITED
IDLE_TIME UNLIMITED
SESSIONS_PER_USER UNLIMITED
LOGICAL_READS_PER_SESSION UNLIMITED
LOGICAL_READS_PER_CALL UNLIMITED
PRIVATE_SGA UNLIMITED
COMPOSITE_LIMIT UNLIMITED
FAILED_LOGIN_ATTEMPTS UNLIMITED
PASSWORD_LOCK_TIME UNLIMITED
PASSWORD_GRACE_TIME UNLIMITED
PASSWORD_LIFE_TIME UNLIMITED
PASSWORD_REUSE_MAX UNLIMITED
PASSWORD_REUSE_TIME UNLIMITED
PASSWORD_VERIFY_FUNCTION NULL;


scp 表空間結構指令碼、schema指令碼、密碼校驗指令碼、profile指令碼到目標資料庫
scp scott_tbs.dmp scott_expdp.dmp scott_utlpwdmg.sql app_profile.sql  oracle@<ip address>:/home/oracle/files

目標端
5. 建立一個目錄

create or replace directory dp_dir as '/home/oracle/files';

6. 使用資料泵的sqlfile引數將表空間語句匯出

impdp \'/ as sysdba\' directory=dp_dir dumpfile=scott_tbs.dmp sqlfile=scott_tbs.sql

指令碼內容是create tablespace xxx ...

語句執行完畢後會生成名為scott_tbs.sql的指令碼,包含資料庫中建立所有表空間的語句。我們需要將業務所需的表空間(除去安裝系統時候自帶的system/sysaux/undo/users/temp)的指令碼提取出來。如果目標端磁碟空間較小,需要將資料檔案調小後再執行。

7. 建立表空間

SQL >@/home/oracle/files/scott_tbs.sql

8. 建立密碼約束

SQL >@/home/oracle/files/scott_utlpwdmg.sql

9. 建立使用者profile。如果沒有這個步驟在在匯入指令碼建立使用者的時候會找不到profile而報錯。

SQL > @/home/oracle/files/app_profile.sql

10. 匯入表結構。在這一步會建立使用者,授權,建立表等操作。

impdp \'/ as sysdba\' directory=dp_dir dumpfile=scott_expdp.dmp logfile=scott_expdp.log parallel 4


總結:
資料泵的content=metadata_only選項為匯出結構的需求提供了方便。匯出物件可以為全庫full=y,表空間inclue=tablespace等等。
使用impdp的sqlfile引數可以匯出dmp檔案中的建立語句。使用dbms_metadata.get_ddl也可以匯出表空間、表的建立語句。
在匯入具體使用者結構之前需要將建立使用者所需的密碼規則和相關profile建立好再impdp匯入,避免建立使用者時出錯。

全文完

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

相關文章