使用EXPDP和IMPDP時應該注意的事項:
EXP和IMP是客戶端工具程序,它們既可以在客戶端使用,也可以在服務端使用。
EXPDP和IMPDP是服務端的工具程序,他們只能在ORACLE服務端使用,不能在客戶端使用。
IMP只適用於EXP導出的文件,不適用於EXPDP導出文件;IMPDP只適用於EXPDP導出的文件,而不適用於EXP導出文件。
expdp或impdp命令時,可暫不指出用戶名/密碼@實例名 as 身份,然后根據提示再輸入,如:
expdp schemas=scott dumpfile=expdp.dmp DIRECTORY=dpdata1;
一、創建邏輯目錄,該命令不會在操作系統創建真正的目錄,最好以system等管理員創建。
create directory dpdata1 as 'd:\test\dump';
二、查看管理理員目錄(同時查看操作系統是否存在,因為Oracle並不關心該目錄是否存在,如果不存在,則出錯)
select * from dba_directories;
三、給scott用戶賦予在指定目錄的操作權限,最好以system等管理員賦予。
grant read,write on directory dpdata1 to scott;
四、導出數據(在CMD窗口下執行以下執行)
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;
五、還原數據(在CMD窗口下執行以下執行)
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
自己的實踐:(導入導出表空間)
/***0.登錄數據庫*********/ C:\Windows\system32>sqlplus sys/123456@orcl as sysdba
/**1創建表空間**/ create tablespace sbgl datafile 'F:\Oracle\sbgl.dbf'size 200M autoextend on next 50M force logging; /**2.創建用戶***/ create user sbgl identified by sbgl default tablespace sbgl; /**3.授予sbgl操作權限**/ grant connect,resource,dba to sbgl; /***4.創建導出目錄(之后手動創建目錄)**/ create or replace directory pump_dir as 'F:\expdp'; /********5.向新創的用戶授權******/ grant read,write on directory pump_dir to sbgl; /*******6.查看管理理員目錄****/ select * from dba_directories; /*導入數據*/ 1、將SBGL20180129.EXPDP文件拷貝到d:\expdp; 2、在CMD窗口下執行以下命名 impdp sbgl/sbgl@orcl dumpfile=pump_dir:SBGL20180129.EXPDP table_exists_action=replace nologfile=y /*導出數據:*/ 在CMD窗口下執行以下命名: expdp sbgl/sbgl@orcl dumpfile=pump_dir:SBGL20180129.expdp schemas=sbgl nologfile=y
3.簡單給出expdp命令行選項的注釋 1)ATTACH 該選項用於與已存在導出作業建立關聯。語法如下: ATTACH [=[schema_name.]job_name] schema_name表示用戶名,job_name表示導出的作業名。注意,如果使用ATTACH選項,在命令行除了連接字符串和ATTACH選項外,不能指定任何其他選項。可以通過查詢DBA_DATAPUMP_JOBS獲得系統中現有的作業信息。 示例如下: expdp secooler/secooler ATTACH=secooler.export_job 2)COMPRESSION 表示是否壓縮數據庫對象的元數據,這里只提供兩個選項:METADATA_ONLY和NONE。在10g這個版本中這個選項的意義不大,因為元數據本身很小,壓縮與否對最終導出的文件大小的影響甚微。11g中對這個選項進行了增強,真正的提供了數據壓縮的功能。具體請參考文章《【COMPRESS】11g中表壓縮技術的長足進步》(http://space.itpub.net/519536/viewspace-662005)。 COMPRESSION=(METADATA_ONLY | NONE) 3)CONTENT 該選項用於指定要導出的內容。默認值為ALL。 CONTENT={ALL | DATA_ONLY | METADATA_ONLY} 當設置CONTENT為ALL時,會導出對象元數據及對象數據;當設置為DATA_ONLY時,只導出對象數據;當設置為METADATA_ONLY時,只導出對象元數據。 示例如下: expdp secooler/secooler DIRECTORY=dump_dir DUMPFILE=test.dump CONTENT=METADATA_ONLY 4)DIRECTORY 指定轉儲文件和日志文件所在的目錄,給定的參數是一個DIRECTORY數據庫對象,是通過CREATE DIRECTORY語句建立的。后文會有這方面的演示。 DIRECTORY=directory_object 示例如下: expdp secooler/secooler DIRECTORY=dump_dir DUMPFILE=test.dump 5)DUMPFILE 用於指定轉儲文件的名稱,默認名稱為expdat.dmp。 DUMPFILE=[directory_object:]file_name [, ...] directory_object用於指定目錄對象名,file_name用於指定轉儲文件名。如果不給定directory_object,導出工具會自動使用DIRECTORY選項指定的目錄對象。 這個參數可以結合FILESIZE參數一起使用,達到生成多個轉儲文件的目的。 注意,如果指定路徑下已經存在待生成的導出文件,導出過程中將會報錯退出。 expdp secooler/secooler DIRECTORY=dump_dir1 DUMPFILE=dump_dir2:test.dmp 6)ENCRYPTION_PASSWORD 該參數需要和Oracle的透明數據加密特性(TDE)一同使用,因為expdp本身是不支持加解密的。 ENCRYPTION_PASSWORD = password 7)ESTIMATE 用於估算被導出的表占用的空間大小(不包含表的元數據)。默認值是BLOCKS。 ESTIMATE={BLOCKS | STATISTICS} 設置為BLOCKS時,oracle會按照目標對象所占用的數據塊個數乘以數據塊尺寸估算對象占用的空間;設置為STATISTICS時,會根據最近的統計值給出對象占用空間,這種方法的誤差會比較大。無論使用哪種選項值,都會有誤差。 示例如下: expdp secooler/secooler DIRECTORY=dump_dir ESTIMATE=STATISTICS DUMPFILE=test.dump 8)EXTIMATE_ONLY 指定是否只估算導出作業所占用的磁盤空間,默認值為N ESTIMATE_ONLY={y | n} 設置為Y時,導出操作僅估算對象所占用的磁盤空間,不會執行導出作業,注意此時不要使用DUMPFILE選項;設置為N時,會估算對象所占用的磁盤空間,同時還會執行導出操作。 示例如下: expdp secooler/secooler ESTIMATE_ONLY=y 9)EXCLUDE 用於控制在導出過程中哪些數據庫對象不被導出。 EXCLUDE=object_type[:name_clause] [, ...] object_type用於指定要排除的對象類型,name_clause用於指定要排除的具體對象名稱。注意EXCLUDE選項和INCLUDE選項不能同時使用。 該選項支持模糊匹配,非常好用的功能。另外,被指定不被導出的表上的約束、索引、觸發器等均不會被導出。 示例如下: expdp secooler/secooler DIRECTORY=dump_dir DUMPFILE=a.dup EXCLUDE=VIEW 10)FILESIZE 限定單個轉儲文件的最大容量,默認值是0,表示沒有文件尺寸的限制。該選項與DUMPFILE選項一同使用。 FILESIZE=integer[B | K | M | G] 11)FLASHBACK_SCN 使用Flashback Query特性指定導出特定SCN時刻的表數據。 FLASHBACK_SCN=scn_value scn_value用於給出SCN值。注意:FLASHBACK_SCN選項和FLASHBACK_TIME選項不能同時使用。 示例如下: expdp secooler/secooler DIRECTORY=dump_dir DUMPFILE=test.dmp FLASHBACK_SCN=358523 12)FLASHBACK_TIME 使用Flashback Query特性指定導出特定時間點的表數據。 FLASHBACK_TIME="TO_TIMESTAMP(time-value)" 注意:FLASHBACK_TIME選項和FLASHBACK_SCN選項不能同時使用。 示例如下: expdp secooler/secooler DIRECTORY=dump_dir DUMPFILE=test.dmp FLASHBACK_TIME="TO_TIMESTAMP('23-09-2010 14:35:00','DD-MM-YYYY HH24:MI:SS')" 13)FULL 是否以全庫模式導出數據庫。默認為N。 FULL={y | n} 為Y時,表示執行數據庫的全庫導出。 14)HELP 指定是否顯示expdp命令行選項的幫助信息,默認為N HELP = {y | n} 當設置為y時。會給出expdp的幫助信息,正如文章開始處使用的方法一樣。 15)INCLUDE 指定導出哪些數據庫對象類型或數據庫對象。與EXCLUDE選項用法相同,功能相反。 注意INCLUDE選項和EXCLUDE選項不能同時使用。 INCLUDE = object_type[:name_clause] [, ...] 16)JOB_NAME 指定要導出作業的名稱。默認為SYS_EXPORT_[mode]_[nn] JOB_NAME=jobname_string 對應的作業信息可以通過DBA_DATAPUMP_JOBS視圖獲得。 17)LOGFILE 指定導出過程中日志文件的名稱,默認值為export.log。 LOGFILE=[directory_object:]file_name directory_object指定目錄對象的名稱,file_name用於指定導出日志文件的名稱。如果不指定directory_object,會自動使用DIRECTORY選項的值。 expdp secooler/secooler DIRECTORY=dump_dir DUMPFILE=test.dmp logfile=test.log 18)NETWORK_LINK 結合數據庫鏈,完成遠程數據庫對象的導出。 NETWORK_LINK=source_database_link 19)NOLOGFILE 控制是否禁止生成導出日志文件,默認值為N。 如果設置為Y,表示不輸出日志。 NOLOGFILE={y | n} 20)PARALLEL 指定執行導出操作的並行度,默認值為1。 PARALLEL=integer 注意,這個參數給出的並行度是一個真正能啟用進程數的最大值。具體會啟用多少個進程並行處理會受很多因素影響,例如生成轉儲文件的多少(不能多於文件數)、導出的數據量大小、CPU資源還有系統I/O資源等因素影響。另外,這個參數只有在Oracle 10g的企業版本中才可以使用。 21)PARFILE 指定導出操作使用到的參數文件的名稱。使用這個參數可以編寫出比較通用的導出腳本。 PARFILE=[directory_path]file_name 22)QUERY 用來指定類似where語句限定導出的記錄。相比exp命令的QUERY選項,這里更加的靈活,可以同時針對每張表進行條件限制。 QUERY = [schema.][table_name:] query_clause 因為該參數目的是限制導出數據的多少,因此不能和CONTENT=METADATA_ONLY、ESTIMATE_ONLY還有TRANSPORT_TABLESPACES一起使用。 示例如下: expdp secooler/secooler directory=dump_dir dumpfiel=test.dmp tables=emp query='WHERE deptno=66' 23)SAMPLE 給出導出表數據的百分比,參數值可以取.000001~100(不包括100)。不過導出過程不會和這里給出的百分比一樣精確,是一個近似值。 語法如下: SAMPLE=[[schema_name.]table_name:]sample_percent 示例如下: SAMPLE="HR"."EMPLOYEES":50 24)SCHEMAS 按照SCHEMA模式導出,默認為當前用戶。很常用,不做更多的解釋。 SCHEMAS=schema_name [, ...] 25)STATUS 指定顯示導出作業進程的詳細狀態,默認值為0。 STATUS=[integer] 示例如下: expdp hr/hr DIRECTORY=dpump_dir1 SCHEMAS=hr,sh STATUS=300 26)TABLES 以表模式導出數據。可以同時導出多個表;支持通配符格式的導出;也支持只導出分區表中的某個分區。 TABLES=[schema_name.]table_name[:partition_name] [, ...] schema_name用於指定用戶名,table_name用於指定導出的表名,partition_name用於指定要導出的分區名。 27)TABLESPACES 指定需要導出哪個表空間中的表數據。注意:Only the tables contained in a specified set of tablespaces are unloaded.也就是說,只有表空間里的表數據會被導出。 TABLESPACES=tablespace_name [, ...] 28)TRANSPORT_FULL_CHECK 用來檢查被傳輸的表空間是否為嚴格的自包含,默認為N。 29)TRANSPORT_TABLESPACES 指定傳輸表空間指定的表空間列表。 TABLESPACES=tablespace_name [, ...] 30)VERSION 該選項用來指定數據庫生成的轉儲文件最低兼容的版本,默認值為COMPATIBLE。 VERSION={COMPATIBLE | LATEST | version_string} 當值為COMPATIBLE時,會以初始化參數中COMPATIBLE參數內容為准;為LATEST時,表示最高版本與數據庫版本保持一致;version_string是用於指定具體數據庫版本的字符串。