1、摘要 html
在日常備庫和數據庫遷移的時候,當遇到大的數據庫的時候在用exp的時候每每是須要好幾個小時,耗費大量時間。oracle10g之後能夠用expdp來導出數據庫花費的時間要遠小於exp花費的時間,並且文件也要小不少。 數據庫
2、exp/imp與expdp/impdp區別 服務器
(1) 把用戶usera的對象導到用戶userb,用法區別在於fromuser=usera touser=userb ,remap_schema=’usera’:'usera’ 。 oracle
例如:imp system/passwd fromuser=usera touser=userb file=/oracle/exp.dmp log=/oracle/exp.log; 性能
impdp system/passwd directory=expdp dumpfile=expdp.dmp remap_schema=’usera’:'userb’ logfile=/oracle/exp.log; 測試
(2) 更換表空間,用exp/imp的時候,要想更改表所在的表空間,須要手工去處理一下, ui
如alter table xxx move tablespace_new之類的操做。 spa
用impdp只要用remap_tablespace=’tabspace_old’:'tablespace_new’ 操作系統
(3) 當指定一些表的時候,使用exp/imp 時,tables的用法是 tables=(‘table1′,’table2′,’table3′)。 .net
expdp/impdp的用法是tables=’table1′,’table2′,’table3′
(4) 是否要導出數據行
exp (ROWS=Y 導出數據行,ROWS=N 不導出數據行)
expdp content(ALL:對象+導出數據行,DATA_ONLY:只導出對象,METADATA_ONLY:只導出數據的記錄)
(5) expdp是[10g]的新特性並且只能在服務器執行。而exp/imp是通用的。
(6) oracle11g中有個新特性,當表無數據時,不分配segment,以節省空間,因此exp導不出空表。解決的辦法是用expdp, 固然也能夠設置deferred_segment_creation 參數 或者 insert一行,再rollback,可是這樣很麻煩。
3、導出數據
1. 導出expdb的過程
(1). 按用戶導
expdp scott/tiger@orcl schemas=scott dumpfile=expdp.dmp DIRECTORY=dpdata1;
(2). 並行進程parallel
expdp scott/tiger@orcl directory=dpdata1 dumpfile=scott3.dmp parallel=40 job_name=scott3
(3). 按表名導
expdp scott/tiger@orcl TABLES=emp,dept dumpfile=expdp.dmp DIRECTORY=dpdata1;
(4). 按查詢條件導
expdp scott/tiger@orcl directory=dpdata1 dumpfile=expdp.dmp Tables=emp query='WHERE deptno=20';
(5). 按表空間導
expdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=temp,example;
(6). 導整個數據庫
expdp system/manager DIRECTORY=dpdata1 DUMPFILE=full.dmp FULL=y;
2. 參數說明 - 導出expdb
(1). CONTENT:該選項用於指定要導出的內容.默認值爲ALL
CONTENT={ALL | DATA_ONLY | METADATA_ONLY}
當設置CONTENT爲ALL 時,將導出對象定義及其全部數據.爲DATA_ONLY時,只導出對象數據,爲METADATA_ONLY時,只導出對象定義
(2). DIRECTORY:指定轉儲文件和日誌文件所在的目錄:DIRECTORY=directory_object
(3). EXCLUDE:該選項用於指定執行操做時釋放要排除對象類型或相關對象
EXCLUDE=object_type[:name_clause] [,….]
Object_type用於指定要排除的對象類型,name_clause用於指定要排除的具體對象.EXCLUDE和INCLUDE不能同時使用
Expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dup EXCLUDE=VIEW
(4). INCLUDE:導出時包含指定的類型
(例:INCLUDE=TABLE_DATA,
INCLUDE=TABLE:"LIKE 'TAB%'"
INCLUDE=TABLE:」NOT LIKE ‘TAB%’」…)
EXCLUDE:導出時排除的數據類型(例:EXCLUDE=TABLE:EMP)
(5). FILESIZE:指定導出文件的最大尺寸,默認爲0,(表示文件尺寸沒有限制)(單位爲bytes).
(6). JOB_NAME:這次導出進程使用的名稱,方便跟蹤查詢(可選)
(7). FLASHBACK_SCN:指定導出特定SCN時刻的表數據
FLASHBACK_SCN=scn_value:Scn_value用於標識SCN值.FLASHBACK_SCN和FLASHBACK_TIME不能同時使用
Expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dmp
FLASHBACK_SCN=358523
(8). FLASHBACK_TIME:指定導出特定時間點的表數據:FLASHBACK_TIME=「TO_TIMESTAMP(time_value)」
Expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dmp FLASHBACK_TIME=「TO_TIMESTAMP(’25-08-2004 14:35:00’,’DD-MM-YYYY HH24:MI:SS’)」
(9). TABLESPACE:指定一個表空間導出.
(10). QUERY=[schema.] [table_name:] query_clause
Schema用於指定方案名,table_name用於指定表名,query_clause用於指定條件限制子句.QUERY選項不能與 CONNECT=METADATA_ONLY,EXTIMATE_ONLY,TRANSPORT_TABLESPACES等選項同時使用.
Expdp scott/tiger directory=dump dumpfiel=a.dmp Tables=emp query=’WHERE deptno=20’
(11). PARALLEL:並行操做: 指定執行導出操做的並行進程個數,默認值爲1
能夠經過PARALLEL 參數爲導出使用一個以上的線程來顯著地加速做業。每一個線程建立一個單獨的轉儲文件,所以參數dumpfile 應當擁有和並行度同樣多的項目。
能夠指定通配符做爲文件名,而不是顯式地輸入各個文件名,例如:
expdp ananda/abc123 tables=CASES directory=DPDATA1 dumpfile=expCASES_%U.dmp parallel=4 job_name=Cases_Export
注意:dumpfile 參數擁有一個通配符%U,它指示文件將按須要建立,格式將爲expCASES_nn.dmp,其中nn 從01 開始,而後按須要向上增長。
在並行模式下,狀態屏幕將顯示四個工做進程。(在默認模式下,只有一個進程是可見的)全部的工做進程同步取出數據,並在狀態屏幕上顯示它們的進度。
分離訪問數據文件和轉儲目錄文件系統的輸入/輸出通道是很重要的。不然,與維護Data Pump 做業相關的開銷可能超過並行線程的效益,並所以而下降性能。並行方式只有在表的數量多於並行值而且表很大時纔是有效的。
4、還原數據
1. 導入impdp的過程
(1). 導到指定用戶下
impdp scott/tiger DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=scott;
(2). 改變表的owner
impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp TABLES=scott.dept REMAP_SCHEMA=scott:system;
(3). 導入表空間
impdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=example;
(4). 導入數據庫
impdb system/manager DIRECTORY=dump_dir DUMPFILE=full.dmp FULL=y;
(5). 追加數據
impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=system TABLE_EXISTS_ACTION
2. 參數說明 - 導入impdp
(1). TABBLE_EXISTS_ACTION={SKIP | APPEND | TRUNCATE | FRPLACE }
當設置該選項爲SKIP時,導入做業會跳過已存在表處理下一個對象;
當設置爲APPEND時,會追加數據;
當設置爲TRUNCATE時,導入做業會截斷表,而後爲其追加新數據;
當設置爲REPLACE時,導入做業會刪除已存在表,重建表病追加數據;
注意,TRUNCATE選項不適用與簇表和NETWORK_LINK選項;
(2). REMAP_SCHEMA
該選項用於將源方案的全部對象裝載到目標方案中:REMAP_SCHEMA=source_schema:target_schema
(3). REMAP_TABLESPACE
將源表空間的全部對象導入到目標表空間中:REMAP_TABLESPACE=source_tablespace:target:tablespace
(4). REMAP_DATAFILE
該選項用於將源數據文件名轉變爲目標數據文件名,在不一樣平臺之間搬移表空間時可能須要該選項.
REMAP_DATAFIEL=source_datafie:target_datafile
4、案例 - 從PROD中導出數據,後導入SIT環境中
Step1. 建立邏輯目錄,該命令不會在操做系統建立真正的目錄,最好以system等管理員建立。
create directory dpdata as '/home/oracle/expdb';
Step2. 查看管理理員目錄(同時查看操做系統是否存在,由於Oracle並不關心該目錄是否存在,若是不存在,則出錯)
select * from dba_directories;
Step3. 給scott用戶賦予在指定目錄的操做權限,最好以system等管理員賦予。
grant read,write on directory dpdata to oracle;
Step4. 在PROD測試表中導入10條記錄,並導出
create table scott.emp ( emp_id number, name varchar2(50), sex varchar(2), age number, country varchar(10), salary number );
begin insert into scott.emp values (1, 'baoxinjian1', 'M', 27, 'China', 10000); insert into scott.emp values (1, 'baoxinjian1', 'M', 27, 'China', 20000); insert into scott.emp values (1, 'baoxinjian1', 'M', 27, 'China', 30000); insert into scott.emp values (1, 'baoxinjian1', 'M', 27, 'China', 40000); insert into scott.emp values (1, 'baoxinjian1', 'M', 27, 'China', 50000); insert into scott.emp values (1, 'baoxinjian1', 'M', 27, 'China', 60000); insert into scott.emp values (1, 'baoxinjian1', 'M', 27, 'China', 70000); insert into scott.emp values (1, 'baoxinjian1', 'M', 27, 'China', 80000); insert into scott.emp values (1, 'baoxinjian1', 'M', 27, 'China', 90000); end; commit;
Step5. 導出爲dmp文件,上傳至SIT
expdp sys/oracle@gavinprod TABLES=scott.emp dumpfile=empexpdp.dmp DIRECTORY=dpdata;
Step6. 查看導出log內容
Step7. 將數據文件上傳至SIT環境
Step8. 進行上傳
impdp sys/oracle DIRECTORY=dpdata DUMPFILE=empexpdp.dmp SCHEMAS=sys;
Step9. 查看導入Log日誌內容
Step10. 查看數據庫表是否成功
參考: http://blog.chinaunix.net/uid-16844439-id-3213672.html
參考:http://www.2cto.com/database/201202/120126.html
參考:http://czmmiao.iteye.com/blog/2041703