12c 資料泵匯入匯出級別

snowdba發表於2015-02-25
資料泵匯入匯出十分靈活,可以分為以下級別:
  • 全庫級別
  • schema級別
  • 表級別
  • 表空間級別

一,全庫級別
全庫級別資料泵匯出也可以理解為邏輯全庫備份。生成的匯出檔案含有重建資料庫的所有必要資訊。並且在schema級別或者表級別等匯入操作時也可以使用全庫匯出檔案。在生產環境中體積較小的資料庫常常採用這種方法做備份。和rman相比才用資料泵全庫匯出不包含SYS schema下的表,這個做法是防止在資料遷移時修改了目標庫的SYS schema下的資料字典內部的表和試圖,導致資料庫不可用。還有一點就是不會匯出用於重建索引的DDL語句。

下面的例子執行了全庫匯出操作:

[root@snow ~]# su - oracle
[oracle@snow ~]$ export ORACLE_SID=ora12c
[oracle@snow ~]$ sqlplus / as sysdba
建立資料泵使用者dp
SYS@ora12c >grant dba to dp identified by dp;

建立資料泵目錄dp_dir
SYS@ora12c >create or replace directory dp_dir as '/home/oracle';

資料泵使用者dp在目錄dp_dir下有讀寫許可權
SYS@ora12c >grant read,write on directory dp_dir to dp;

SYS@ora12c >exit

執行全庫匯出操作
[oracle@snow ~]$ expdp dp/dp directory=dp_dir dumpfile=full.dmp logfile=full.log full=y

接下來做些破壞工作,刪除使用者hr,再使用impdp恢復該使用者
[oracle@snow ~]$ sqlplus / as sysdba
SYS@ora12c >drop user hr cascade;
SYS@ora12c >exit

[oracle@snow ~]$ imp dp/dp directory=dp_dir dumpfile=full.dmp logfile=full.log full=y

由於我們只是刪除了一個使用者hr,在執行全庫匯入時就不會跳過這些已經存在的物件,節省時間。但是這些已經存在的物件會出現各種抱錯資訊,例如ORA-39151: Table "SH"."COSTS" exists. 等等


二,schema級別
schemas引數可以設定一個或者多個要匯出的schema。
匯入時可以選擇從schema級別的匯出檔案中提取,也可以從全庫級別的匯出檔案提取。需要注意的是如果使用者已經存在系統會顯示錯誤提示,而匯入作業會繼續執行下一個任務。
[oracle@snow ~]$ expdp dp/dp directory=dp_dir dumpfile=shhr.dmp logfile=shhr.log schemas=hr,sh

[oracle@snow ~]$ impdp dp/dp directory=dp_dir dumpfile=shhr.dmp logfile=shhr.log schemas=sh,hr

[oracle@snow ~]$ impdp dp/dp directory=dp_dir dumpfile=full.dmp logfile=shhr.log schemas=sh,hr


三,表級別
使用tables引數可以選擇多個表。在生產環境中經常使用該方法,比如ogg表級別初始化。如果表的數量較多推薦使用parfile.

[oracle@snow ~]$ vi tables_exp.par
userid=dp/dp
directory=dp_dir
dumpfile=tables.dmp
logfile=tables.log
tables=
HR.REGIONS,
HR.LOCATIONS,
HR.DEPARTMENTS,
HR.JOBS,
HR.EMPLOYEES,
HR.JOB_HISTORY,
SH.TIMES,
SH.PRODUCTS,
SH.CHANNELS,
SH.PROMOTIONS,
SH.CUSTOMERS,
SH.COUNTRIES

[oracle@snow ~]$ expdp parfile=tables_exp.par

匯入時如果表已經存在可以使用TABLE_EXISTS_ACTION引數跳過(skip)、替換(replace)或者截斷(truncate)
[oracle@snow ~]$ vi tables_imp.par
userid=dp/dp
directory=dp_dir
dumpfile=tables.dmp
logfile=tables.log
tables=
HR.REGIONS,
HR.LOCATIONS,
HR.DEPARTMENTS,
HR.JOBS,
HR.EMPLOYEES,
HR.JOB_HISTORY,
SH.TIMES,
SH.PRODUCTS,
SH.CHANNELS,
SH.PROMOTIONS,
SH.CUSTOMERS,
SH.COUNTRIES
table_exists_action=replace


[oracle@snow ~]$ impdp parfile=tables_imp.par

四,表空間級別
表空間級別匯入操作會建立表空間中包含的所有表和索引,但是匯入操作不會重建表空間本身。和前面的例子一樣,impdp也可以使用全庫匯出的dmp檔案。
[oracle@snow ~]$ expdp dp/dp directory=dp_dir dumpfile=tbs.dmp logfile=tbs.log tablespaces=example

[oracle@snow ~]$ impdp dp/dp directory=dp_dir dumpfile=tbs.dmp logfile=tbs.log tablespaces=example



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

相關文章