資料來自百度搜索,測試全庫備份正常導出。
常用的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對象目錄test:geoff :將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參數實現了該功能。
- 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. - 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的參數,性能就會有提升。
- 對於導出的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 - 對於導入的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是客戶端工具程序,它們既可以在客戶端使用,也可以在服務端使用。
2、EXPDP和IMPDP是服務端的工具程序,他們只能在ORACLE服務端使用,不能在客戶端使用。
3、IMP只適用於EXP導出文件,不適用於EXPDP導出文件;IMPDP只適用於EXPDP導出文件,而不適用於EXP導出文件。
4、EXPDP和IMPDP在導出導入的時候需要依賴Directory對象,而IMP和EXP不需要依賴。
5、oracle11g中有個新特性,當表無數據時,不分配segment,以節省空間,所以exp導不出空表,解決的辦法是用expdp。
數據泵取只能在服務器端運行,客戶端只能用來連接服務器啟動導入導出操作
exp和expdp原理對比
1、exp/imp客戶端程序,受網絡,磁盤的影響; impdp/expdp服務器端程序,只受磁盤的影響
2、假設文件把文件導出在服務端,exp常規方式是使用SELECT的方式查詢數據庫中的數據,是需要通過buffer cache並通過sql的語句處理層再轉移至exp的導出文件(即要經過sga,pga才傳輸到客戶端,而exp直接路徑則是直接從磁盤上將數據轉移至exp的導出文件,所