oracle的導出命令


資料來自百度搜索,測試全庫備份正常導出。

 

 

常用的oracle數據庫備份(導入/導出)有兩種,分別是exp/imp和expd/impd,前者是Orace早期版本帶有的導入導出工具,后者是Oracle10g后出現的,下面進行分別介紹!

1.exp/imp

三種導入導出類型

Oracle支持三種導入導出類型分別是

表方式(T方式),用戶方式(U方式),全庫方式(Full方式)

A: 表方式(T方式)

備份(exp)某個用戶模式下指定的對象(表),

exp guwei/ai123456@10.21.19.63/orcl rows=y indexes=n compress=n buffer=50000000 file=exp_table.dmp log=exp_table.log tables=USER_INFO,POLICY_INFO

恢復(imp)備份數據中的指定表,

imp yuwen/ai123456@10.21.13.14/orcl fromuser=guwei touser=yuwen rows=y indexes=n commit=y buffer=50000000 ignore=n file=exp_table.dmp log=exp_table.log tables=USER_INFO,POLICY_INFO

B:用戶方式(U方式)

備份(exp)某個用戶模式下的所有對象,

exp jnth/thpassword@oracle owner=guwei rows=y indexes=n compress=n buffer=50000000 file=exp_table.dmp log=exp_table.log

恢復(imp)備份數據的全部內容,

imp yuwen/ai123456@10.21.13.14/orcl fromuser=guwei touser=yuwen rows=y indexes=n commit=y buffer=50000000 ignore=n file=exp_table.dmp log=exp_table.log

恢復(imp)備份數據中的指定表,

imp yuwen/ai123456@10.21.13.14/orcl fromuser=guwei touser=yuwen rows=y indexes=n commit=y buffer=50000000 ignore=n file=exp_table.dmp log=exp_table.log tables=USER_INFO,POLICY_INFO

C:全庫方式(Full方式)

備份(exp)完整的數據庫,

exp system/systempassword@oracle rows=y indexes=n compress=n buffer=50000000 full=y file=exp_table.dmp log=exp_table.log

導入(imp)完整數據庫,

imp system/systempassword@oracle rows=y indexes=n commit=y buffer=50000000 ignore=y full=y file=exp_table.dmp log=exp_table.log

導出導入的優缺點

優點:

  • 簡單易行;
  • 可靠性高;
  • 不影響數據庫的正常運行。

缺點:

  • 只能提供到"某一時間點上"的恢復,不能最大可能的恢復數據;
  • 數據量大時,恢復較慢。

導出exp參數說明

參數名

說明

默認值

USERID

用戶名/口令

 

FULL

導出整個文件

N

BUFFER

數據緩沖區的大小

 

OWNER

導出指定的所有者用戶名列表

 

FILE

輸出文件

(EXPDAT.DMP)

TABLES

導出指定的表名列表

 

COMPRESS

是否壓縮導出的文件

Y

RECORDLENGTH

IO 記錄的長度

 

GRANTS

導出權限

Y

INCTYPE

增量導出類型

 

INDEXES

導出索引

Y

RECORD

跟蹤增量導出

Y

ROWS

導出數據行

Y

PARFILE

參數文件名

 

CONSTRAINTS

導出限制

Y

CONSISTENT

交叉表一致性

 

LOG

屏幕輸出的日志文件

 

STATISTICS

分析對象(ESTIMATE)

 

DIRECT

直接路徑

N

TRIGGERS

導出觸發器

Y

FEEDBACK

顯示每 x 行 (0) 的進度

 

FILESIZE

各轉儲文件的最大尺寸

 

QUERY

選定導出表子集的子句

 

TRANSPORT_TABLESPACE

導出可傳輸的表空間元數據

N

TABLESPACES

導出指定的表空間列表

 

導入imp參數說明

參數名

說明

默認值

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 行顯示進度

 

TOID_NOVALIDATE

跳過指定類型 ID 的驗證

 

FILESIZE

每個轉儲文件的最大大小

 

STATISTICS

始終導入預計算的統計信息

 

RESUMABLE

在遇到有關空間的錯誤時掛起

 

RESUMABLE_NAME

用來標識可恢復語句的文本字符串

 

RESUMABLE_TIMEOUT

RESUMABLE 的等待時間

 

COMPILE

編譯過程, 程序包和函數

Y

STREAMS_CONFIGURATION

導入 Streams 的一般元數據

Y

STREAMS_INSTANITATION

導入 Streams 的實例化元數據

N

TRANSPORT_TABLESPACE

導入可傳輸的表空間元數據

 

TABLESPACES

將要傳輸到數據庫的表空間

 

DATAFILES

將要傳輸到數據庫的數據文件

 

TTS_OWNERS

擁有可傳輸表空間集中數據的用戶

 

2.expd/impd

ORCALE10G提供了新的導入導出工具,數據泵。

一、主要特性

1.支持並行處理導入、導出任務2.支持暫停和重啟動導入、導出任務3.支持通過Database Link的方式導出或導入遠端數據庫中的對象4.支持在導入時通過Remap_schema、Remap_datafile、Remap_tablespace幾個參數實現導入過程中自動修改對象屬主、 數據文件或數據所在表空間。5.導入/導出時提供了非常細粒度的對象控制。通過Include、Exclude兩個參數,甚至可以詳細制定是否包含或不包含某個對象。

Directory對象

Directory對象是Oracle10g版本提供的一個新功能。他是一個 指向,指向了操作系統中的一個路徑。每個Directory都包含 Read,Write兩個權限,可以通過Grant命令授權給指定的用戶或角色。擁有讀寫權限的用戶就可以讀寫該Directory對象指定的操作系統路 徑下的文件。

除了使用network_link參數意外,expdp生成的文件都是在服務器上(Directory指定的位置)

基本語法

導出

 expdp TEST/123456 schemas=geoff dumpfile=test.dmp directory=exp_imp_data logfile=impdp_20191219.log;

 test/123456:導出用戶賬號密碼test.dmp:導出dmp文件名

exp_imp_data:directory對象目錄

geoff:導出給哪個用戶

impdp_20191219.log:日志名稱

導入

impdp TEST/123456 file=test.dmp directory=exp_imp_data REMAP_SCHEMA=test:geoff logfile=impdp_20191219.log;

test/123456:待導入用戶賬號密碼test.dmp:導入dmp文件名

exp_imp_data:directory對象目錄testgeoff :將test用戶數據導入到Geoff用戶下

impdp_20191219.log:日志名稱

二、操作模式

1.全庫模式

導入或者導出整個數據庫,對應impdp/expdp命令中的full參數,只有擁有dba或者 exp_full_database和imp_full_database權限的用戶才能執行。

2.Schema模式

導出或導入Schema下的自有對象,對應impdp/expdp命令中的Schema參數,這是默認的操作模式。 如果擁有dba或者 exp_full_database和imp_full_database權限的用戶執行的話,就可以導出或導入多個Schema中的對象。

3.表模式

導出指定的表或者表分區(如果有分區的話)以及依賴該表的對象(如該表的索引,約束等,不過前提是這些對象在同一個 Schema中,或者執行的用戶有相應的權限)。對應impdp/expdp命令中的Table參數。

4.表空間模式

導出指定的表空間中的內容。對應impdp/expdp中的Tablespaces參數,這種模式類似於表模式和 Schema模式的補充。

5.傳輸表空間模式

對應impdp/expdp中的Transport_tablespaces參數。這種模式與前面幾種模式最顯著的區 別是生成的Dump文件中並不包含具 體的邏輯數據,而只導出相關對象的元數據(即對象的定義,可以理解成表的創建語句),邏輯數據仍然在表空間的數據文件中,導出時需要將元數據和數據文件同 時復制到目標端服務器。
這種導出方式效率很高,時間開銷主要是花在復制數據文件產生的I/O上。expdp執行傳輸表空間模式的導出,用戶必須 擁有 exp_full_database角色或者DBA角色。而通過傳輸表空間模式導入時,用戶必須擁有imp_full_database角色或者DBA角 色。

三、過濾數據

過濾數據主要依賴於Query和Sample兩個參數。其中Sample參數主要針對expdp導出功能。

1.Query

exp命令中的Query功能類似,不過Expdp中,該參數功能得到了增強,控制的粒度更細。Expdp中的Query也是指定類 似where語句來限定記錄。語法如下:
Query = [Schema.][Table_name:] Query_clause
默認 情況如果不指定Schema.table_name,則Query_clause針對所有導出的表有效,或者你可以為每一個表指定不同的 Query_clause,如:導出a表中所有id<5的記錄,導出b表中所有name=’a’的記錄,則Query的參數應該如下:
Query=A:”Where id<5″,B:”Where name=’a’”
如果Where條件前沒有指定Schema名或者表名的話,默認就是針對當前所有要被 導出的表。如:Query=Where id <5
Warning: 建議把Query參數放入到參數文件中使用,以避免轉義符帶來的麻煩。

2.Sample

該參數用來指定導出數據的百分比,可指定的值的范圍從0.000001到99.999999,語法如下:
Sample=[[Schema_name.]Table_name:]sample_percent
定該參數以后,EXPDP導出將自動控制導出的記錄量,如導出A表中50%的記錄,設置的Sample參數如下:
Sample=A:50
Warning: Sample_percent指定的值只是一個參考值,EXPDP會根據數據量算出一個近似值。

四、重定義表的Schema或表空間

我們還可能會遇到這樣的需求,把A用戶的對象轉移到B用戶,或者更換數據的表空間。數據泵通過 Remap_Schema和Remap_tablespace參數實現了該功能。

  1. REMAP_SCHEMA : 重定義對象所屬Schema
    該參數的作用類似IMP中的Fromuser+Touser,支持多個Schema的轉換,語法如下:
    REMAP_SCHEMA=Source_schema:Target_schema[,Source_schema:Target_schema]
    A的對象轉換到C用戶,將C轉換到D用戶。Remap_schema=a:b,c:d
    Warning: 不能在同一個IMPDP命令中指定remap_schema=a:b,a:c.
  2. REMAP_TABLESPACE : 重定義對象所在的表空間。
    該參數用來重映射導入對象存儲的表空間,支持同時對多個表空間進行 轉換,相互間用逗號分割。語法如下:
    REMAP_TABLESPACE=Source_tablespace:Target_tablespace[,Source_tablespace:Target_tablespace]
    Warning: 如果使用Remap_tablespace參數,則要保證導入的用戶對目標表空間有讀寫權限。

五、優化導入/導出效率

對於大數據量來說,我們不得不考慮效率問題。數據泵對效率也提出了更高的要求。甚至官方的描述就是Oracle Data Pump technology enables Very High-Speed movement of data and metadata from one database to another.這里的Very High-Speed依賴我們的parallel參數。
有的優化操作都會有三種結果:變得更好、沒有變化、變得更差。Parallel參數也是這樣,並不是指定一個大於1的參數,性能就會有提升。

  1. 對於導出的parallel
    對於導出來說,由於dump文件只能由一個線程進行操作(包 括I/O處理),因此如果輸出的DUMP文件只有一個,即使你指定再多的並行,實際工作仍然是 一個,而且還會觸發ORA-39095錯誤。因此,建議設置該參數小於或等於生成的DUMP文件數量。那么,如何控制生成的DUMP文件數量呢?
    EXPDP 命令提供了一個FILESIZE參數,用來指定單個DUMP文件的最大容量,要有效的利用parallel參數,filesize參數必不可少。
    例:某用戶對象占用了4G左右的空間,實際導出后的DUMP文件約為3G,我們嘗試在導出該用戶時指定並行度為4,設置單個文件不超過500M,則語法如 下:
    $ expdp user/pwd directory=dump_file dumpfile=expdp_20100820_%U.dmp logfile=expdp_20100820.log filesize=500M parallel=4
  2. 對於導入的parallel
    對於導入來說,使用parallel參數則要簡單的多,我認為導入更能體現parallel參數的優勢。 參數設置為幾,則認為同時將幾張表的內容導入到庫中。
    舉例:某dmp文件中包含了200張表,我們嘗試在導入該DMP文件時指定並行度為10,則 語法如下:
    $ impdp user/pwd directory=dump_file dumpfile=expdp_20100820.dmp logfile=impdp_20100820.log parallel=10

3.區別

​ 在10g之前,傳統的導出和導入分別使用EXP工具和IMP工具,從10g開始,不僅保留了原有的EXP和IMP工具,還提供了數據泵導出導入工具EXPDP和IMPDP

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

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

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

4EXPDP和IMPDP在導出導入的時候需要依賴Directory對象,而IMP和EXP不需要依賴。

5oracle11g中有個新特性,當表無數據時,不分配segment,以節省空間,所以exp導不出空表,解決的辦法是用expdp。

數據泵取只能在服務器端運行,客戶端只能用來連接服務器啟動導入導出操作

exp和expdp原理對比

1exp/imp客戶端程序,受網絡,磁盤的影響; impdp/expdp服務器端程序,只受磁盤的影響

2、假設文件把文件導出在服務端,exp常規方式是使用SELECT的方式查詢數據庫中的數據,是需要通過buffer cache並通過sql的語句處理層再轉移至exp的導出文件(即要經過sga,pga才傳輸到客戶端,而exp直接路徑則是直接從磁盤上將數據轉移至exp的導出文件,所

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM