oracle 導入導出

轉載:

http://www.linuxidc.com/Linux/2014-04/99932p3.htm

http://www.cnblogs.com/jasonjiang/archive/2010/07/29/1787802.html

  

expdp使用

  使用EXPDP工具時,其轉儲文件只能被存放在DIRECTORY對象對應的OS目錄中,而不能直接指定轉儲文件所在的OS目錄。因此使用EXPDP工具時,,必須首先建立DIRECTORY對象,並且需要爲數據庫用戶授予使用DIRECTORY對象權限。

使用EXPDP和IMPDP時應該注意的事項:

       EXP和IMP是客戶端工具程序,它們既可以在客戶端使用,也可以在服務端使用。

EXPDP和IMPDP是服務端的工具程序,他們只能在ORACLE服務端使用,不能在客戶端使用。

IMP只適用於EXP導出的文件,不適用於EXPDP導出文件;IMPDP只適用於EXPDP導出的文件,而不適用於EXP導出文件。

expdp或impdp命令時,可暫不指出用戶名密碼@實例名 as 身份,然後根據提示再輸入,如:

expdp schemas=scott dumpfile=expdp.dmp DIRECTORY=dpdata1;

首先得建DIRECTORY:

  SQL> conn /as sysdba

  SQL> CREATE OR REPLACE DIRECTORY directory_name AS 'directory_path';

同樣可以更改directory的os路徑

  SQL> GRANT read,write ON DIRECTORY directory_name TOusername;

查詢directory目錄

SQL> select * from dba_directories;

SQL> select * from all_directories;

刪除directory目錄

SQL> drop directory directory_name;

 
expdp選項

1. ATTACH

  該選項用於在客戶會話與已存在導出作用之間建立關聯.語法如下:

  ATTACH=[schema_name.]job_name

  schema_name用於指定方案名,job_name用於指定導出作業名.注意,如果使用ATTACH選項,在命令行除了連接字符串和ATTACH選項外,不能指定任何其他選項,示例如下:

  expdp username/password ATTACH=username.job_name

2. CONTENT

  該選項用於指定要導出的內容.默認值爲ALL.語法如下:

  CONTENT={ALL | DATA_ONLY | METADATA_ONLY}

  當設置CONTENT爲ALL 時,將導出對象定義及其所有數據; 爲DATA_ONLY時,只導出對象數據; 爲METADATA_ONLY時,只導出對象定義,示例如下:

  expdp username/password DIRECTORY=directory_name DUMPFILE=dumpfile_name CONTENT=METADATA_ONLY

3. DIRECTORY

  指定轉儲文件和日誌文件所在的目錄.語法如下:

  DIRECTORY=directory_object

  directory_object用於指定目錄對象名稱.需要注意,目錄對象是使用CREATE DIRECTORY語句建立的對象,而不是OS 目錄,示例如下:

  expdp username/password DIRECTORY=directory_name DUMPFILE=dumpfile_name

  建立目錄:

  CREATE DIRECTORY directory_name as '/Oracle/dump';

  查詢創建了那些子目錄:

  SELECT * FROM dba_directories;

4. DUMPFILE

  用於指定轉儲文件的名稱,默認名稱爲expdat.dmp.語法如下:

  DUMPFILE=[directory_object:]file_name[,….]

  directory_object用於指定目錄對象名,file_name用於指定轉儲文件名.需要注意,如果不指定directory_object,導出工具會自動使用DIRECTORY選項指定的目錄對象,示例如下:

  expdp username/password DIRECTORY=directory_name DUMPFILE=directory_name:dumpfile_name

5. ESTIMATE

  指定估算被導出表所佔用磁盤空間的方法.默認值是BLOCKS.語法如下:

  EXTIMATE={BLOCKS | STATISTICS}

  設置爲BLOCKS時,oracle會按照目標對象所佔用的數據塊個數乘以數據塊尺寸估算對象佔用的空間,設置爲STATISTICS時,根據最近統計值估算對象佔用空間,示例如下:

  expdp scott/tiger TABLES=emp ESTIMATE=STATISTICS DIRECTORY=dumpDUMPFILE=a.dump

  一般情況下, 當用默認值(blocks)時, 日誌中估計的文件大小會比實際expdp出來的文件大, 用statistics時會跟實際大小差不多.

6. EXTIMATE_ONLY

  指定是否只估算導出作業所佔用的磁盤空間,默認值爲N.語法如下:

  EXTIMATE_ONLY={Y | N}

  設置爲Y時,導出作用只估算對象所佔用的磁盤空間,而不會執行導出作業,爲N時,不僅估算對象所佔用的磁盤空間,還會執行導出操作,示例如下:

  expdp username/password ESTIMATE_ONLY=y NOLOGFILE=y

7. EXCLUDE

  該選項用於指定執行操作時要排除的對象類型或相關對象.語法如下:

  EXCLUDE=object_type[:name_clause][,….]

  object_type用於指定要排除的對象類型,name_clause用於指定要排除的具體對象.EXCLUDE和INCLUDE不能同時使用,示例如下:

  expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dup EXCLUDE=VIEW

  在EXPDP的幫助文件中, 可以看到存在EXCLUDE和INCLUDE參數, 這兩個參數文檔中介紹的命令格式存在問題, 正確用法是:

  EXCLUDE=OBJECT_TYPE[:name_clause][,...]

  INCLUDE=OBJECT_TYPE[:name_clause][,...]

  示例:

Expdp <other_parameters> schema=username exclude=sequence,table:"in('TB','DTP')"

impdp <other_parameters> schema=username include = function,package, procedure, table:"='TB'"

  有了這些還不夠, 由於命令中包含了多個特殊字符, 在不同的操作系統下需要通過轉義字符才能使上面的命令順利執行,

  如:

  EXCLUDE=TABLE:"IN('BIGTALE')"

8. FILESIZE

  指定導出文件的最大尺寸,默認爲0(表示文件尺寸沒有限制).

9. FLASHBACK_SCN

  指定導出特定SCN時刻的表數據.語法如下:

  FLASHBACK_SCN=scn_value

  scn_value用於標識SCN值.FLASHBACK_SCN和FLASHBACK_TIME不能同時使用,示例如下:

  expdp username/password DIRECTORY=directory_name DUMPFILE=dumpfile_name FLASHBACK_SCN=scn_value

10. FLASHBACK_TIME

  指定導出特定時間點的表數據.語法如下:

  FLASHBACK_TIME="TO_TIMESTAMP(time_value)"

  示例如下:

 expdp username/password DIRECTORY=directory_name DUMPFILE=dumpfile_name FLASHBACK_TIME = "TO_TIMESTAMP('18-04-201412:05:00','DD-MM-YYYY HH24:MI:SS')"

11. FULL

  指定數據庫模式導出,默認爲N.語法如下:

  FULL={Y | N}

  爲Y時,標識執行數據庫導出.

12. HELP

  指定是否顯示EXPDP命令行選項的幫助信息,默認爲N.當設置爲Y時,會顯示導出選項的幫助信息,示例如下:

  expdp help=y

13. INCLUDE

  指定導出時要包含的對象類型及相關對象.語法如下:

  INCLUDE=object_type[:name_clause][,… ]

  示例如下:

  expdp username/password DIRECTORY=directory_name DUMPFILE=dumpfile_name INCLUDE=object_type

  1.1.2 expdp選項

14. JOB_NAME

  指定要導出作用的名稱,默認爲SYS_XXX.語法如下:

  JOB_NAME=jobname_string

  示例如下:

  expdp username/password DIRECTORY=directory_name DUMPFILE=dumpfile_name INCLUDE=triggerJOB_NAME=exp_trigger

  後面想臨時停止expdp任務時可以按Ctrl+C組合鍵,退出當前交互模式,退出之後導出操作不會停止,這不同於Oracle以前的EXP. 以前的EXP,如果退出交互式模式,就會出錯終止導出任務. 在Oracle10g中,由於EXPDP是數據庫內部定義的任務,已經與客戶端無關. 退出交互之後,會進入export的命令行模式,此時支持status等查看命令:

  Export> status

  如果想停止改任務,可以發出stop_job命令:

  Export> stop_job

  如果有命令行提示: "是否確實要停止此作業([Y]/N):" 或 "Are you sure you wish to stop this job ([yes]/no):", 回答應是yes或者no, 回答是YES以後會退出當前的export界面.

  接下來可以通過命令行再次連接到這個任務:

  expdp test/test@acf attach=expfull

  通過start_job命令重新啓動導出:

  Export> start_job

  Export> status

15. LOGFILE

  指定導出日誌文件文件的名稱,默認名稱爲export.log.語法如下:

  LOGFILE=[directory_object:]file_name

  directory_object用於指定目錄對象名稱,file_name用於指定導出日誌文件名.如果不指定directory_object.導出作用會自動使用DIRECTORY的相應選項值

16. NETWORK_LINK

  指定數據庫鏈名,如果要將遠程數據庫對象導出到本地例程的轉儲文件中,必須設置該選項.

  expdp中使用連接字符串和network_link的區別:

  expdp屬於服務端工具,而exp屬於客戶端工具,expdp生成的文件默認是存放在服務端的,而exp生成的文件是存放在客戶端.

  expdp username/password@connect_string //對於使用這種格式來說,directory使用源數據庫創建的,生成的文件存放在服務端。

  如何將生成的文件放在目標數據庫而不放在源數據庫呢,在expdp中使用network_link.比如在本機expdp遠程服務器的數據庫,先在本機創建到服務端的dblink,然後創建directory及授權,然後expdp.

a.創建到服務端的dblink

  conn aa/aacc

  create database link <link_name> connect to <username> identified by<password> using '<connect_string>' ;//username和password是server端的

b.創建directory

 conn / assysdba

  create or replace directory dir as '/home/oracle/dbbackup';

  grant read,write on directory dir to <username2>;

c.導出

expdpusername2/password2 directory=dirnetwork_link=link_name ... //這裏的username2用創建dblink的那個用戶aa,directory也是目標數據庫創建的

  比如在本機expdp遠程服務器的數據庫,先在本機創建到服務端的dblink,然後創建directory及授權,然後expdp useranme2/password2.....

  如果想不生成dmp文件而直接導入一個數據庫,原理和上面類似,直接使用impdp帶network_link ,這樣可以直接impdp,而繞過了expdp的步驟

  impdp network_link=tolink schemas=link remap_schema=link:link2

17. NOLOGFILE

  該選項用於指定禁止生成導出日誌文件,默認值爲N.

18. PARALLEL

  指定執行導出操作的並行進程個數,默認值爲1

19. PARFILE

  指定導出參數文件的名稱.語法如下:

  PARFILE=[directory_path:]file_name

20. QUERY

  用於指定過濾導出數據的where條件.語法如下:

  QUERY=[schema.][table_name:]query_clause

  schema 用於指定方案名,table_name用於指定表名,query_clause用於指定條件限制子句.QUERY選項不能 與 CONNECT = METADATA_ONLY, EXTIMATE_ONLY, TRANSPORT_TABLESPACES等選項同時使用,示例如下:

 expdp username/password directory=directory_name dumpfiel=dumpfile_name Tables=empquery='WHERE deptno=20'

21. SCHEMAS

  該方案用於指定執行方案模式導出,默認爲當前用戶方案.

22. STATUS

  指定顯示導出作用進程的詳細狀態,默認值爲0.

23. TABLES

  指定表模式導出.語法如下:

  TABLES=[schema_name.]table_name[:partition_name][,…]

  schema_name用於指定方案名,table_name用於指定導出的表名,partition_name用於指定要導出的分區名.

24. TABLESPACES

  指定要導出表空間列表.

25. TRANSPORT_FULL_CHECK

  該選項用於指定被搬移表空間和未搬移表空間關聯關係的檢查方式,默認爲N.

  當設置爲Y時,導出作用會檢查表空間直接的完整關聯關係,如果表所在表空間或其索引所在的表空間只有一個表空間被搬移,將顯示錯誤信息.

  當設置爲N時,導出作用只檢查單端依賴,如果搬移索引所在表空間,但未搬移表所在表空間,將顯示出錯信息,如果搬移表所在表空間,未搬移索引所在表空間,則不會顯示錯誤信息.

26. TRANSPORT_TABLESPACES

  指定執行表空間模式導出.

27. VERSION

  指定被導出對象的數據庫版本,默認值爲COMPATIBLE.語法如下:

  VERSION={COMPATIBLE | LATEST | version_string}

  爲COMPATIBLE時,會根據初始化參數COMPATIBLE生成對象元數據;爲LATEST時,會根據數據庫的實際版本生成對象元數據.version_string用於指定數據庫版本字符串.

 

1) 導出用戶整個schema

  --默認導出登陸賬號的schema

$ expdp username/password@oracle_sid DIRECTORY=directory_name DUMPFILE=dumpfile_name LOGFILE=logfile_name

  --其他賬號登陸, 在參數中指定schemas

$ expdp username/password@oracle_sid DIRECTORY=directory_name DUMPFILE=dumpfile_name LOGFILE=logfile_name SCHEMAS=username1,username2

 

2) 導出用戶下指定的表

$ expdp username/password@oracle_sid DIRECTORY=directory_name DUMPFILE=dumpfile_name LOGFILE=logfile_name TABLES=table_name1,table_name2

 

3) 導出用戶下除tb表之外的表

$ expdp username/password@oracle_sid DIRECTORY=directory_name DUMPFILE=dumpfile_name LOGFILE=logfile_name EXCLUDE=TABLE:"='tb'"

  

4) 導出用戶下的存儲過程

$ expdp username/password@oracle_sid DIRECTORY=directory_name DUMPFILE=dumpfile_name LOGFILE=logfile_name INCLUDE=PROCEDURE

 

5) 導出用戶下以'E'開頭的表

$ expdp username/password@oracle_sid DIRECTORY=directory_name DUMPFILE=dumpfile_name LOGFILE=logfile_name INCLUDE=TABLE:"LIKE 'E%'"

  

6) 帶QUERY導出

$ expdp username/password@oracle_sid DIRECTORY=directory_name DUMPFILE=dumpfile_name LOGFILE=logfile_name QUERY=查詢語句

注: 處理這樣帶查詢的多表導出, 如果多表之間有外健關聯, 可能需要注意查詢條件所篩選的數據是否符合這樣的外健約束, 比如TB中有一欄位是 deptno, 是關聯dept中的主鍵, 如果"whereempno>=8000"中得出的deptno=50的話, 那麼, 你的dept的條件"where deptno>=10 and deptno<=40"就不包含deptno=50的數據, 那麼在導入的時候就會出現錯誤.
附加:

 

1)按用戶導

expdp username/password schemas=scott dumpfile=dumpfile_name DIRECTORY=directory_name;

2)並行進程parallel

expdp username/password directory=directory_name dumpfile=dumpfile_name parallel=20 job_name=job_name

3)按表名導

expdp username/password TABLES=TB1,TB2 dumpfile=dumpfile_name DIRECTORY=directory_name;

4)按查詢條件導

expdp username/password directory=directory_name dumpfile=dumpfile_name Tables=TB query='WHERE deptno=20';

5)按表空間導

expdp username/password DIRECTORY=directory_name DUMPFILE=dumpfile_name TABLESPACES=TABLESPACE_NAME;

6)導整個數據庫

expdp username/password DIRECTORY=directory_name DUMPFILE=dumpfile_name FULL=y;

 

 

使用IMPDP

  IMPDP命令行選項與EXPDP有很多相同的,不同的有:

1、REMAP_DATAFILE

  該選項用於將源數據文件名轉變爲目標數據文件名,在不同平臺之間搬移表空間時可能需要該選項.

  REMAP_DATAFIEL=source_datafie:target_datafile

2、REMAP_SCHEMA

  該選項用於將源方案的所有對象裝載到目標方案中.

  REMAP_SCHEMA=source_schema:target_schema

3、REMAP_TABLESPACE

  將源表空間的所有對象導入到目標表空間中

  REMAP_TABLESPACE=source_tablespace:target_tablespace

4、REUSE_DATAFILES

  該選項指定建立表空間時是否覆蓋已存在的數據文件.默認爲N

  REUSE_DATAFIELS={Y | N}

5、SKIP_UNUSABLE_INDEXES

  指定導入是是否跳過不可使用的索引,默認爲N

6、SQLFILE

  指定將導入要指定的索引DDL操作寫入到SQL腳本中

  SQLFILE=[directory_object:]file_name

  Impdp username/password DIRECTORY=directory_name DUMPFILE=dumpfile_name SQLFILE=sqlfile_name

7、STREAMS_CONFIGURATION

  指定是否導入流元數據(Stream Matadata),默認值爲Y.

8、TABLE_EXISTS_ACTION

  該選項用於指定當表已經存在時導入作業要執行的操作,默認爲SKIP

  TABBLE_EXISTS_ACTION={SKIP | APPEND | TRUNCATE | FRPLACE }

  當設置該選項爲SKIP時,導入作業會跳過已存在表處理下一個對象;當設置爲APPEND時,會追加數據,爲TRUNCATE時,導入作業會截斷表,然後爲其追加新數據;當設置爲REPLACE時,導入作業會刪除已存在表,重建表病追加數據,注意,TRUNCATE選項不適用與簇表和NETWORK_LINK選項

9、TRANSFORM

  該選項用於指定是否修改建立對象的DDL語句

  TRANSFORM=transform_name:value[bject_type]

  Transform_name用於指定轉換名,其中SEGMENT_ATTRIBUTES用於標識段屬性(物理屬性,存儲屬性,表空間,日誌等信息),STORAGE用於標識段存儲屬性,VALUE用於指定是否包含段屬性或段存儲屬性,object_type用於指定對象類型.

Impdp username/password directory=directory_name dumpfile=dumpfile_name Transform = segment_attributes:n:table

10、TRANSPORT_DATAFILES

  該選項用於指定搬移空間時要被導入到目標數據庫的數據文件

  TRANSPORT_DATAFILE=datafile_name

  Datafile_name用於指定被複制到目標數據庫的數據文件

Impdp username/password DIRECTORY=directory_name DUMPFILE=dumpfile_name TRANSPORT_DATAFILES = '/Oracle/oradata/tbs1.f'

調用IMPDP

1、導入表

  Impdp scott/tiger DIRECTORY=dump_dir DUMPFILE=tab.dmpTABLES=dept,emp

Impdp system/password DIRECTORY=directory_name DUMPFILE=dumpfile_name TABLES=scott.dept,scott.emp  REMAP_SCHEMA=SCOTT:SYSTEM

  第一種方法表示將DEPT和EMP表導入到SCOTT方案中,第二種方法表示將DEPT和EMP表導入的SYSTEM

  注意,如果要將表導入到其他方案中,必須指定REMAPSCHEMA選項.

2、導入方案

  Impdp scott/tiger DIRECTORY=dump_dir DUMPFILE=schema.dmpSCHEMAS=scott

  Impdp system/manager DIRECTORY=directory_name DUMPFILE=dumpfile_name SCHEMAS=scott REMAP_SCHEMA=scott:system

3、導入表空間

Impdpsystem/manager DIRECTORY=directory_name DUMPFILE=dumpfile_name TABLESPACES=tablespace_name

4、導入數據庫

  Impdp system/manager DIRECTORY=directory_name DUMPFILE=dumpfile_name FULL=y

  --賦予expdp,impdp的權限

  SQL> grant exp_full_database,imp_full_database to username;

 

附加:

1)導到指定用戶下

impdp username/password DIRECTORY=directory_name DUMPFILE=dumpfile_name SCHEMAS= username;

2)改變表的owner

impdp system/manager DIRECTORY=directory_name DUMPFILE=dumpfile_name TABLES=scott.dept REMAP_SCHEMA=scott:system;

3)導入表空間

impdp username/password DIRECTORY=directory_name DUMPFILE=dumpfile_name TABLESPACES=TABLESPACE_NAME;

4)導入數據庫

impdb username/password DIRECTORY=directory_name DUMPFILE=dumpfile_name FULL=y;

5)追加數據

impdp username/password DIRECTORY=directory_name DUMPFILE=dumpfile_name SCHEMAS=username TABLE_EXISTS_ACTION=append;

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

一.說明

   oracle 的exp/imp命令用於實現對數據庫的導出/導入操作;
   exp命令用於把數據從遠程數據庫服務器導出至本地,生成dmp文件;
   imp命令用於把本地的數據庫dmp文件從本地導入到遠程的Oracle數據庫中。

二.語法

可以通過在命令行輸入 imp help=y 獲取imp的語法信息:
==========================================================
C:\Documents and Settings\auduser>imp help=y

Import: Release 9.0.1.1.1 - Production on 星期二 5月 20 18:21:57 2008

(c) Copyright 2001 Oracle Corporation. All rights reserved.

可以通過輸入 IMP 命令和您的用戶名/口令
後接用戶名/口令的命令:

例程: IMP SCOTT/TIGER

或者, 可以通過輸入 IMP 命令和各種參數來控制“導入”
按照不同參數。要指定參數,您可以使用關鍵字:

格式: IMP KEYWORD=value 或 KEYWORD=(value1,value2,...,vlaueN)
例程: IMP SCOTT/TIGER IGNORE=Y TABLES=(EMP,DEPT) FULL=N
或 TABLES=(T1: P1,T1: P2),如果 T1 是分區表

USERID 必須是命令行中的第一個參數。

關鍵字 說明(默認)        關鍵字      說明(默認)
--------------------------------------------------------------------------
USERID   用戶名/口令           FULL         導入整個文件 (N)
BUFFER   數據緩衝區大小         FROMUSER     所有人用戶名列表
FILE     輸入文件 (EXPDAT.DMP)    TOUSER       用戶名列表
SHOW     只列出文件內容 (N) TABLES      表名列表
IGNORE   忽略創建錯誤 (N)    RECORDLENGTH IO 記錄的長度
GRANTS 導入權限 (Y)           INCTYPE      增量導入類型
INDEXES 導入索引 (Y)          COMMIT       提交數組插入 (N)
ROWS    導入數據行 (Y)        PARFILE      參數文件名
LOG      屏幕輸出的日誌文件   CONSTRAINTS 導入限制 (Y)
DESTROY                覆蓋表空間數據文件 (N)
INDEXFILE              將表/索引信息寫入指定的文件
SKIP_UNUSABLE_INDEXES 跳過不可用索引的維護 (N)
FEEDBACK               每 x 行顯示進度 (0)
TOID_NOVALIDATE        跳過指定類型 ID 的驗證
FILESIZE               每個轉儲文件的最大大小
STATISTICS             始終導入預計算的統計信息
RESUMABLE              遇到與空格有關的錯誤時掛起 (N)
RESUMABLE_NAME         用來標識可恢復語句的文本字符串
RESUMABLE_TIMEOUT      RESUMABLE 的等待時間
COMPILE                編譯過程, 程序包和函數 (Y)

下列關鍵字僅用於可傳輸的表空間
TRANSPORT_TABLESPACE 導入可傳輸的表空間元數據 (N)
TABLESPACES 將要傳輸到數據庫的表空間
DATAFILES 將要傳輸到數據庫的數據文件
TTS_OWNERS 擁有可傳輸表空間集中數據的用戶

==============================================
同樣可以通過輸入 exp help=y 獲取exp的語法信息

Microsoft Windows XP [版本 5.1.2600]
(C) 版權所有 1985-2001 Microsoft Corp.

C:\Documents and Settings\auduser>exp help=y

Export: Release 9.0.1.1.1 - Production on 星期二 5月 20 18:26:34 2008

(c) Copyright 2001 Oracle Corporation. All rights reserved.

 

通過輸入 EXP 命令和用戶名/口令,您可以
後接用戶名/口令的命令:

例程: EXP SCOTT/TIGER

或者,您也可以通過輸入跟有各種參數的 EXP 命令來控制“導出”
按照不同參數。要指定參數,您可以使用關鍵字:

格式: EXP KEYWORD=value 或 KEYWORD=(value1,value2,...,valueN)
例程: EXP SCOTT/TIGER GRANTS=Y TABLES=(EMP,DEPT,MGR)
或 TABLES=(T1: P1,T1: P2),如果 T1 是分區表

USERID 必須是命令行中的第一個參數。

關鍵字 說明(默認)        關鍵字      說明(默認)
--------------------------------------------------------------------------
USERID   用戶名/口令           FULL         導出整個文件 (N)
BUFFER   數據緩衝區大小         OWNER     所有者用戶名列表
FILE       輸出文件 (EXPDAT.DMP) TABLES       表名稱列表
COMPRESS   導入到一個區 (Y) RECORDLENGTH IO 記錄的長度
GRANTS 導出權限 (Y)           INCTYPE      增量導出類型
INDEXES    導出索引 (Y)         RECORD       跟蹤增量導出 (Y)
DIRECT     直接路徑 (N)            TRIGGERS     導出觸發器 (Y)
LOG        屏幕輸出的日誌文件 STATISTICS   分析對象 (ESTIMATE)
ROWS    導出數據行 (Y)        PARFILE      參數文件名
CONSISTENT 交叉表一致性    CONSTRAINTS 導出約束條件 (Y)

FEEDBACK             每 x 行顯示進度 (0)
FILESIZE             每個轉儲文件的最大大小
FLASHBACK_SCN        用於回調會話快照的 SCN
FLASHBACK_TIME       用來獲得最接近於指定時間的 SCN 的時間
QUERY                用來導出表的子集的選擇子句
RESUMABLE            遇到與空格有關的錯誤時掛起 (N)
RESUMABLE_NAME       用來標識可恢復語句的文本字符串
RESUMABLE_TIMEOUT    RESUMABLE 的等待時間
TTS_FULL_CHECK       對 TTS 執行完全或部分相關性檢查
TABLESPACES          要導出的表空間列表
TRANSPORT_TABLESPACE 導出可傳輸的表空間元數據 (N)
TEMPLATE 調用 iAS 模式導出的模板名稱

三.使用示例

3.1 數據導出

1 將數據庫SampleDB完全導出,用戶名system 密碼manager 導出到E:\SampleDB.dmp中

   exp system/manager@TestDB file=E:\sampleDB.dmp full=y

2 將數據庫中system用戶與sys用戶的表導出

   exp system/manager@TestDB file=E:\sampleDB.dmp owner=(system,sys)

3 將數據庫中的表 TableA,TableB 導出

    exp system/manager@TestDB file=E:\sampleDB.dmp tables=(TableA,TableB)

4 將數據庫中的表tableA中的字段filed1 值爲 "王五" 的數據導出

   exp system/manager@TestDB file=E:\sampleDB.dmp tables=(tableA) query=' where filed1='王五'

   如果想對dmp文件進行壓縮,可以在上面命令後面 加上 compress=y 來實現。

3.2 數據的導入

1 將備份數據庫文件中的數據導入指定的數據庫SampleDB 中,如果 SampleDB 已存在該表,則不再導入;

   imp system/manager@TEST file=E:\sampleDB.dmp full=y ignore=y


2 將d:\daochu.dmp中的表table1 導入

imp system/manager@TEST file=E:\sampleDB.dmp tables=(table1)

3. 導入一個完整數據庫

imp system/manager file=bible_db log=dible_db full=y ignore=y

4. 導入一個或一組指定用戶所屬的全部表、索引和其他對象

imp system/manager file=seapark log=seapark fromuser=seapark imp
system/manager file=seapark log=seapark fromuser=(seapark,amy,amyc,harold)

5. 將一個用戶所屬的數據導入另一個用戶

imp system/manager file=tank log=tank fromuser=seapark touser=seapark_copy
imp system/manager file=tank log=tank fromuser=(seapark,amy)
touser=(seapark1, amy1)

6. 導入一個表

imp system/manager file=tank log=tank fromuser=seapark TABLES=(a,b)

7. 從多個文件導入

imp system/manager file=(paycheck_1,paycheck_2,paycheck_3,paycheck_4)
log=paycheck, filesize=1G full=y

8. 使用參數文件

imp system/manager parfile=bible_tables.par
bible_tables.par參數文件:
#Import the sample tables used for the Oracle8i Database Administrator's
Bible. fromuser=seapark touser=seapark_copy file=seapark log=seapark_import
參數文件示例見附錄


9. 增量導入

imp system./manager inctype= RECTORE FULL=Y FILE=A


不少情況下要先將表徹底刪除,然後導入。

 


四.參數說明

4.1、8i EXP常用選項
1、FULL,這個用於導出整個數據庫,在ROWS=N一起使用時,可以導出整個數據庫的結構。例如:
exp sys file=./db_str.dmp log=./db_str.log full=y rows=n compress=y direct=y
2、BUFFER和FEEDBACK,在導出比較多的數據時,我會考慮設置這兩個參數。例如:
exp new file=yw97_2003.dmp log=yw97_2003_3.log feedback=10000 buffer=100000000 tables=WO4,OK_YT
3、FILL和LOG,這兩個參數分別指定備份的DMP名稱和LOG名稱,包括文件名和目錄,例子見上面。
需要說明的是,EXP可以直接備份到磁帶中,即使用FILE=/dev/rmt0(磁帶設備名),但是一般我們都不這麼做,原因有

二:一、這樣做的速度會慢很多,二、現在一般都是使用磁帶庫的,不建議直接對磁帶進行操作。至於沒有使用磁帶庫

的朋友可以考慮和UNIX的TAR結合使用。
如果你真想使用EXP直接到磁帶,你可以參考Metalink文章“EXPORTING TO TAPE ON UNIX SYSTEMS”(文檔號:

30428.1),該文中有詳細解釋。
4、COMPRESS參數將在導出的同時合併碎塊,儘量把數據壓縮到initial的EXTENT裏,默認是N,一般建議使用。DIRECT

參數將告訴 EXP直接讀取數據,而不像傳統的EXP那樣,使用SELECT來讀取表中的數據,這樣就減少了SQL語句處理過程

。一般也建議使用。不過有些情況下 DIRECT參數是無法使用的。
5、如何使用SYSDBA執行EXP/IMP?
這是一個很現實的問題,有時候我們需要使用SYSDBA來執行EXP/IMP,如進行傳輸表空間的EXP/IMP,以及在9i下用SYS

用戶來執行EXP/IMP時,都需要使用SYSDBA纔可。


我們可以使用下面方式連入EXP/IMP:
exp "'sys/sys as sysdba'" file=1.dmp tables=gototop.t rows=n
6、QUERY參數後面跟的是where條件,值得注意的是,整個where子句需要使用""括起來,where子句的寫法和SELECT中

相同,如果是UNIX平臺所有"和'都需要使用\u26469屏蔽它們的特殊含義:
exp gototop/gototop file=1.dmp log=1.log tables=cyx.t query="where c1=20 and c2=gototop"
如果是windows平臺,則使用下面的格式:
      exp c/c@ncn file=c.dmp log=c.log tables=t query="""where id=1 and name='gototop'"""
4.2、8i IMP常用選項
1、FROMUSER和TOUSER,使用它們實現將數據從一個SCHEMA中導入到另外一個SCHEMA中。
2、IGNORE、GRANTS和INDEXES,其中IGNORE參數將忽略表的存在,繼續導入,這個對於需要調整表的存儲參數時很有用

,我們可以先根據實際情況用合理的存儲參數建好表,然後直接導入數據。而GRANTS和INDEXES則表示是否導入授權和

索引,如果想使用新的存儲參數重建索引,或者爲了加快到入速度,我們可以考慮將INDEXES設爲N,而GRANTS一般都是

Y。
另外一個EXP/IMP都有的參數是PARFILE,它是用來定義EXP/IMP的參數文件,也就是說,上面的參數都可以寫在一個參

數文件中,但我們一般很少使用。
4.4、Oracle9i EXP功能描述
Oracle9i EXP在原有的基礎上新增了部分新的參數,按功能主要分爲以下幾個部分:
1、OBJECT_CONSISTENT - 用於設置EXP對象爲只讀以保持對象的一致性。默認是N。
2、FLASHBACK_SCN和FLASHBACK_TIME - 用於支持FLASHBACK功能而新增。
3、RESUMABLE、RESUMABLE_NAME和RESUMABLE_TIMEOUT - 用於支持RESUMABLE空間分配而新增。
4、TTS_FULL_CHECK - 用於在傳輸表空間時使用依賴性檢查。
5、TEMPLATE - 用於支持iAS。
6、TABLESPACES - 設置表空間導出模式。個人覺得對於一般用戶而言,這個纔是新增參數中最實用的一個,可以讓用

戶在原來的FULL、OWNER、TABLES的基礎上多了一種選擇,使得EXP更加靈活。

五、不同版本的EXP/IMP問題?
一般來說,從低版本導入到高版本問題不大,麻煩的是將高版本的數據導入到低版本中,在Oracle9i之前,不同版本

Oracle之間的EXP/IMP可以通過下面的方法來解決:
1、在高版本數據庫上運行低版本的catexp.sql;
2、使用低版本的EXP來導出高版本的數據;
3、使用低版本的IMP將數據庫導入到底版本數據庫中;
4、在高版本數據庫上重新運行高版本的catexp.sql腳本。
但在9i中,上面的方法並不能解決問題。如果直接使用低版本EXP/IMP會出現如下錯誤:
EXP-00008: ORACLE error %lu encountered
ORA-00904: invalid column name
這已經是一個公佈的BUG,需要等到Oracle10.0才能解決,BUG號爲2261,你可以到METALINK上去查看有關此BUG的詳細

信息。
BUG歸BUG,我們的工作還是要做,在沒有Oracle的支持之前,我們就自己解決。在Oracle9i中執行下面的SQL重建

exu81rls視圖即可。
CREATE OR REPLACE view exu81rls
(objown,objnam,policy,polown,polsch,polfun,stmts,chkopt,enabled,spolicy)
AS select u.name, o.name, r.pname, r.pfschma, r.ppname, r.pfname,
decode(bitand(r.stmt_type,1), 0,'', 'SELECT,')
|| decode(bitand(r.stmt_type,2), 0,'', 'INSERT,')
|| decode(bitand(r.stmt_type,4), 0,'', 'UPDATE,')
|| decode(bitand(r.stmt_type,8), 0,'', 'DELETE,'),
r.check_opt, r.enable_flag,
DECODE(BITAND(r.stmt_type, 16), 0, 0, 1)
from user$ u, obj$ o, rls$ r
where u.user# = o.owner#
and r.obj# = o.obj#
and (uid = 0 or
uid = o.owner# or
exists ( select * from session_roles where role='SELECT_CATALOG_ROLE')
)
/
grant select on sys.exu81rls to public;
/

六、其他問題

本文只討論了Oracle8i和9i中的EXP/IMP的一些情況,對於之前的版本,在8.0.X 中,除了QUERY參數不能用外,其它差

別不大。針對沒有QUERY的情況,我們可以先在數據庫中使用查詢條件建立臨時中間表,然後使用EXP導出這個中間表即

可。至於Oracle7因爲目前使用的人較少,gototop不打算在此做詳細解釋了,如果讀者朋友有需求,你可以參考

Metalink文檔:“Overview of Export and Import in Oracle7”(文檔號:61949.1)。關於EXP/IMP的詳細參數信息

你可以通過EXP/IMP HELP=Y來獲得。
另外關於傳輸表空間的更多信息可以參考下面的Metelink文檔,本文不再詳述。
[NOTE:77523.1] Transportable Tablespaces -- An Example to setup and use.
[NOTE:100698.1] Perform tablespace point-in-time recovery using Transportable Tablespace.
在進行並行EXP/IMP的時候,如果IMP過程建索引的話不建議同時運行5個以上的IMP,如果你想加快速度,可以在IMP的

時候不建索引,這樣只要內存允許,可以多跑幾個,然後是SQL腳本創建需要的索引。


注意:
操作者要有足夠的權限,權限不夠它會提示。
數據庫是否可以連上, 可以用tnsping TestDB 來獲得數據庫 TestDB 能否連上。

附錄一:
給用戶增加導入數據權限的操作
第一, 啓動sql*puls
第二,以system/manager登陸
第三,create user 用戶名 IDENTIFIED BY 密碼 (如果已經創建過用戶,這步可以省略)
第四,GRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW ,
   DROP ANY VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,
      DBA,CONNECT,RESOURCE,CREATE SESSION TO 用戶名字
第五, 運行-cmd-進入dmp文件所在的目錄,
      imp userid=system/manager full=y file=*.dmp
      或者 imp userid=system/manager full=y file=filename.dmp

附錄二:
Oracle 不允許直接改變表的擁有者, 利用Export/Import可以達到這一目的.
先建立import9.par,
然後,使用時命令如下:imp parfile=/filepath/import9.par
例 import9.par 內容如下:
        FROMUSER=TGPMS     
        TOUSER=TGPMS2     (注:把表的擁有者由FROMUSER改爲TOUSER,FROMUSER和TOUSER的用戶可以不同)      

 
        ROWS=Y
        INDEXES=Y
        GRANTS=Y
        CONSTRAINTS=Y
        BUFFER=409600
        file==/backup/ctgpc_20030623.dmp
        log==/backup/import_20030623.log

++++++++++++++++++++++++++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 

 

exp/imp與expdp/impdp的用法區別

1:把用戶usera的對象導到用戶userb,用法區別在於fromuser=usera touser=userb ,remap_schema='usera':'usera' 。例如

imp system/passwd fromuser=usera touser=userbfile=/oracle/exp.dmp log=/oracle/exp.log;

impdp system/passwd directory=expdp dumpfile=expdp.dmpremap_schema='usera':'userb' logfile=/oracle/exp.log;

 

2:更換表空間,用exp/imp的時候,要想更改表所在的表空間,需要手工去處理一下,

如alter table xxx move tablespace_new之類的操作。

用impdp只要用remap_tablespace='tabspace_old':'tablespace_new'

 

3:當指定一些表的時候,使用exp/imp 時,tables的用法是 tables=('table1','table2','table3')。

expdp/impdp的用法是tables='table1','table2','table3'

 

4:是否要導出數據行

exp (ROWS=Y 導出數據行,ROWS=N 不導出數據行)

expdp content(ALL:對象+導出數據行,DATA_ONLY:只導出對象,METADATA_ONLY:只導出數據的記錄)



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章