exp help=y 查看幫助
exp
1、exp usr/pwd@sid file=c:\tb.dump tables=tb1
如果是導出多個表,tables=(tb1、tb2)
2、exp usr/pwd@sid file=c:\tb.dump --全部導出
3、exp usr/pwd@sid file=c:\tb.dump owner=(system,sys)
將用戶system和sys用戶下的表都導出
4、exp usr/pwd@sid file=c:\tb.dump tables=tb1 query=\"where name='ha'\"
注意分號的位置
Export從數據庫中導出數據到dump文件中
Import從dump文件中到入數據導數據庫中
下面是一般使用他們的情況
(1)、兩個數據庫之間傳送數據
同一個版本的oracle Server之間
不同版本的oracle Server之間
同種OS之間
不同種OS之間
(2)、用於數據庫的備份和恢復
(3)、從一個SCHEMA傳送到另一個SCHEMA
(4)、從一個TABLESPACE傳送到另一個TABLESPACE
2、DUMP文件
EXPORT到出的是二進制格式的文件,不可以手工編輯,否則會損壞數據。
該文件在ORACLE支持的任何平臺上都是一樣的格式,可以在各平臺上通用。
DUMP文件在IMPORT時採用向上兼容方式,就是說ORALCE7的DUMP文件可以導入
到ORACLE8中,但是版本相差很大的版本之間可能有問題。
3、EXPORT/IMPORT過程
EXPORT導出的DUMP文件包含兩種基本類型的數據
- DDL
- Data
DUMP文件包含所有重新創建Data Dictionary的DDL語句,基本上是可以讀的格式。
但是應該注意的是,千萬不要用文本編輯器編輯之,oracle說不支持這樣做的。
4、IMPORT時的對象倒入順序
在倒入數據時,ORACLE有一個特定的順序,可能隨數據庫版本不同而有所變化。
按這個順序主要是解決對象之間依賴關係可能產生的問題。TRIGGER最後導入,所以在INSERT
數據到數據庫時不會激發TRIGGER。在導入後可能會有一些狀態是INVALID的PROCEDURE,主要
是IMPORT時會影響一些數據庫對象,而IMPORT並不重新編譯PROCEDURE,從而造成這種情況,
可以重新編譯之,就能解決這個問題。
5、兼容性問題
IMPORT工具可以處理EXPORT 5.1.22之後的版本導出的DUMP文件,所以你用ORACL E7的IMPORT
處理ORACLE6的DUMP文件,依次類推,但是ORACLE如果版本相差很大有可能不能處理。具體的
問題可以參照相應的文檔,比如有關參數設置等(COMPATIBLE參數)
6、EXPORT需要的VIEW
EXPORT需要的VIEW是由CATEXP.SQL創建,這些內部VIEW用於EXPORT組織DUMP文件中數據格式。
大部分VIEW用於收集創建DDL語句的,其他的主要供ORACLE開發人員用。
這些VIEW在不同ORACLE版本之間有可能不同,每個版本可能都有新的特性加入。
所以在新的版本里面執行舊的dump文件會有錯誤,一般可以執行CATEXP.SQL解決這些問題,
解決向後兼容問題的一般步驟如下:
導出數據庫的版本比目標數據庫老的情況:
- 在需要導入的目標數據庫中執行舊的CATEXP.SQL
- 使用舊的EXPORT導出DUMP文件
- 使用舊的IMPORT導入到數據庫中
- 在數據庫中執行新的CATEXP.SQL,以恢復該版本的EXPORT VIEW
導出數據庫的版本比目標數據庫新的情況:
- 在需要導入的目標數據庫中執行新的CATEXP.SQL
- 使用新的EXPORT導出DUMP文件
- 使用新的IMPORT導入到數據庫中
- 在數據庫中執行舊的CATEXP.SQL,以恢復該版本的EXPORT VIEW
7、碎片整理
EXPORT/IMPORT一個很重要的應用方面就是整理碎片。因爲如果時初次IMPPORT,就會重新CREATE TABLE 再導入數據,所以整張表都是連續存放的。另外缺省情況下下EXPORT會在生成DUMP文件是“壓縮(COMPRESS)”TABLE,但是這種壓縮在很多情況下被誤解。事實上,COMPRESS是改變STORAGE參數INITIAL的值。比如:
現在數據已經擴展到100個EXTENT,如果採用COMPRESS=Y來EXPORT數據,
則產生的語句時 STORAGE( INITIAL 1000K NEXT 10K)
我們可以看到NEXT值並沒有改變,而INITIAL是所有EXTENT的總和。所以會出現
如下情況,表A有4個100M的EXTENT,執行DELETE FROM A,然後再用COMPRESS=Y 導
出數據,產生的CREATE TABLE語句將有400M的INITIAL EXTENT。即使這是TABLE中
已經沒有數據!!這是的DUMP文件即使很小,但是在IMPORT時就會產生一個巨大的TABLE.
另外,也可能會超過DATAFILE的大小。比如,有4個50M的數據文件,其中表A有
15個10M的EXTENT,如果採用COMPRESS=Y的方式導出數據,將會有INITIAL=150M,
那麼在重新導入時,不能分配一個150M的EXTENT,因爲單個EXTENT不能跨多個文件。
8、在USER和TABLESPACE之間傳送數據
一般情況下EXPORT的數據要恢復到它原來的地方去。如果SCOTT用戶的表以TABLE 或USER方式EXPORT數據,在IMPORT時,如果SCOTT用戶不存在,則會報錯! 以FULL方式導出的數據帶有CREATE USER的信息,所以會自己創建USER來存放數據。
當然可以在IMPORT時使用FROMUSER和TOUSER參數來確定要導入的USER,但是要保證
TOUSER一定已經存在啦。
9、EXPORT/IMPORT對SQUENCE的影響
在兩種情況下,EXPORT/IMPORT會對SEQUENCE。
(1)如果在EXPORT時,用戶正在取SEQUENCE的值,可能造成SEQUENCE的不一致。
(2)另外如果SEQUENCE使用CACHE,在EXPORT時,那些在CACHE中的值就會被忽略的,
只是從數據字典裏面取當前值EXPORT。
如果在進行FULL方式的EXPORT/IMPORT時,恰好在用sequence更新表中某列數據,而且不是上面兩種情況,則導出的是更新前的數據。
如果採用常規路徑方式,每一行數據都是用INSERT語句,一致性檢查和INSERT T RIGGER
如果採用DIRECT方式,某些約束和trigger可能不觸發,如果在trigger中使用sequence.nextval,將會對sequence有影響。
Select Segment_Name,Sum(bytes)/1024/1024 From User_Extents Group By Segment_Name
查看每個表空間佔用空間的大小:
Select Tablespace_Name,Sum(bytes)/1024/1024 From Dba_Segments Group By Tablespace_Name