2013/10/04

Published 10月 04, 2013 by

Oracle Export/Import DB(含Oracle Data Pump)


Export/Import DB


1.        確認空間大小
2.        export tablespace,並確認是否要更改路徑
3.        create user/grant resource
4.        export data
5.        import data

範列二:
Oracle Data Pump




範列一:export production spc data to test spcdb
一、確認空間大小,空間約23+14+14+15+4.4G=70.4G


二、export tablespace

確認要匯出的Tablespace, 可以透過滑鼠右鍵,Create Script的方式產生

Copy Clipboard,並貼到記事本上做編輯


修改需要存放的tablespace路徑
PS.存放路徑的最後面, maxsize 32000M後沒有",",從 toad出來的資料有",",請把它拿掉

三、Create User & Grant

把我們所需要的權限,copy test db

四、export data
方法一、

[root@C5TSPCDB1 oracle]# cat exp.sh
exp spc/spc@c5pspc parfile=exp.par log=impspc.log compress=n
[root@C5TSPCDB1 oracle]# cat exp.par
file=/home/oracle/spc.dmp
statistics=none
tables=
(
R3_ARRAY_PDS_SAMPLE_ATTREX,
PDSPRE_PROCESSSTEP_TEST,
CHART_DEF_FORALARMCONFIG,
CHART_RULE_FORALARMCONFIG,
C5_ARRAY_FILE_CHART_CRIT,
C5_ARRAY_FILE_SAMPLE_ATTR,
SYSTEM_CONFIG,
FAB_DEF
)

方法二:
exp sim/sim file=sim.dmp rows=y owner=sim log=sim.log compress=n

若沒有加compress=n(Default=Yes),建立Table的initial_extent值即會等於匯出資料量的大小
影響:之後若要把oracle上的datafile縮小,無法縮小此datafile

compress此參數與壓縮完全無關…

五、Import Data
imp spc/spc file= spc.dmp full=y


備註:
Create User 操作

1. 新增帳號: CREATE USER 使用者名稱  IDENTIFIED BY 密碼;
ex: CREATE USER WFE3_SPC  IDENTIFIED BY wfe3_spc  DEFAULT TABLESPACE CONFIG;

2. 權限設定: GRANT 權限 ON 資料庫物件 TO 使用者名稱;
                      GRANT 角色 TO 使用者名稱
3. 取消權限: REVOKE 權限 ON 資料庫物件 FROM 使用者名稱;
4. 新增角色: CREATE ROLE 角色名稱 [ NOT IDENTIFIED | IDENTIFIED { BY 密碼 | USING [ 鋼要 .] PACKAGE | EXTERNALLY | GLOBALLY } ] ;
5. 取消角色: DROP ROLE 角色名稱
6. 更改密碼: ALTER USER  使用者名稱 IDENTIFIED BY 密碼;
7. 強制變更密碼: ALTER USER 使用者名稱 PASSWORD EXPIRE;
8. 鎖住現有的使用者: ALTER USER 使用者名稱 ACCOUNT LOCK;
9. 解鎖現有的使用者: ALTER USER 使用者名稱 ACCOUNT UNLOCK;
10. 刪除現有的使用者: DROP USER 使用者名稱;

高速的資料匯出/匯入:Oracle Data Pump

1.確認備份的User是否有CREATE ANY DIRECTORY的權限

SQL> select * from user_sys_privs;


假設沒有權限:
grant create any directory to scott;

2.建立Directory,在os的權限下,要選擇oracle權限的目錄(使用ORACLE DBA權限)
Create or replace directory dir_name as '/oradata1';  
create or replace directory test  as '/oradata1';
查詢Directory
SELECT * FROM dba_directories;


3.設定讀取權限
grant read, write on directory TEST to scott;
grant read, write on directory TEST to system;


4.資料Import/Export(同一帳號import/export)
Table Exports/Imports
若不同Schema,需要再加個remap_schema=src_account:dst_account
若不同的Tablespace(多個對應到不同的TableSpace),需要加
REMAP_TABLESPACE=src1:dst1 REMAP_TABLESPACE=src2:dst2

expdp scott/tiger@ora10g tables=SALES directory=TEST dumpfile=DP_SALES.dmp logfile=expdpDP_SALES.log

impdp scott/tiger@ora10g tables=SALES directory=TEST dumpfile=DP_SALES.dmp logfile=impdpDP_SALES.log


Schema Exports/Imports

expdp scott/tiger@ora10g schemas=scott directory=TEST dumpfile=SH.dmp logfile=expdpSH.log

impdp scott/tiger@ora10g schemas=scott directory=TEST dumpfile=SH.dmp logfile=impdpSH.log

不同帳號的話:
impdp scott/tiger@ora10g schemas=scott directory=TEST dumpfile=SH.dmp logfile=impdpSH.log remap_schema=ea:scott remap_tablespace=USERS:scott;


Database Exports/Imports

expdp system/oracle@ora10g full=Y directory=TEST dumpfile=DB10G.dmp logfile=expdpDB10G.log

impdp system/oracle@ora10g full=Y directory=TEST dumpfile=DB10G.dmp logfile=impdpDB10G.log


5.dump出來的資料轉換成sql file
impdp scott/tiger directory=test dumpfile=t_user.dmp sqlfile=t_user.sql


6.        Drop directory
DROP DIRECTORY <directory_name>;

7.砍掉 datapump jobs
以前用 exp 做 export 時, 如果臨時要 cancel 的話, 就把 shell script kill 掉, 然後去 v$session 看看有沒有 session 還在做 exp, 如果有的話就 alter system kill session ..... 就 OK 了, 現在用了 datapump 做 export 的話就得這樣做
SELECT o.status, o.object_id, o.object_type,
o.owner||'.'||object_name "OWNER.OBJECT"
FROM dba_objects o, dba_datapump_jobs j
WHERE o.owner=j.owner_name AND o.object_name=j.job_name ;
這樣可以找出目前還在執行的 datapump, 要看的是 OWNER.OBJECT 這個欄位, 會長的像 USER.SYS_EXPORT_FULL_01
這時要終結這個 job 的話, 要下
drop table USER.SYS_EXPORT_FULL_01 purge;
這樣才能把 datapump jobs 給砍掉

參考資料:
http://tw.myblog.yahoo.com/stevencheng-blog/article?mid=228&prev=235&next=222

http://psoug.org/reference/directories.html

http://blog.xuite.net/misgarlic/weblogic/43337153

備註:
imp/exp 若使用不同版本,會出現錯誤,通常是高的版本匯到低的版本
IMP-00010: not a valid export file, header failed verification

IMP-00000: Import terminated

DataPump也同樣會有這個問題:
ORA-39001: invalid argument value
ORA-39000: bad dump file specification

ORA-39142: incompatible version number 3.1 in dump file "/home/oracle/hr.dmp"