1 exp/imp作用
用於在資料庫之間傳遞資料。exp從資料庫中匯出資料到dump檔案中,imp從dump檔案中把資料匯入到資料庫.一般我們用來作資料的備份和恢複.
exp匯出的是二進位格式的檔案,不可以手工編輯,否則會損壞資料。該檔案在ORACLE支援的任何平台通用。dump檔案在imp時向上相容.
2. 如何運行
一般exp/imp命令在$ORACLE_HOME/bin目錄下
我們可以在sqlplus或命令列下執行,有互動式和非互動式.
注意:要有足夠的許可權;確保資料庫可以串連(可以用tnspng測試)
3. exp
匯出工具.將資料庫中資料備份壓縮成一個二進位系統檔案,可以在不同OS間遷移.
三種模式:
A:使用者模式:匯出使用者所有對象以及對象中的資料
B:表模式:匯出使用者所有表或指定表
C:整個資料庫:匯出資料庫中所有資料對象
exp裡加匯出的查詢條件query= 可以選定匯出表的子集
參數:
關鍵字 說明(預設)
----------------------------------------------
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 選定匯出表子集的子句
4.imp
匯入工具.將exp形成的二進位檔案(dump檔案)匯入到資料庫中.
跟exp一樣,有三種模式.
只有擁有imp_full_database和DBA許可權的使用者才能做整個資料庫的匯入.
匯入資料時,ORACLE有一個特定的順序,可能隨資料庫版本不同而有所變化.一般是
1. Tablespaces |
2. Profiles |
3. Users |
4. Roles |
5. System Privilege Grants |
6. Role Grants indexes, constraints, audi ting) |
7. Default Roles |
8. Tablespace Quotas |
9. Resource Costs |
10. Rollback Segments |
11. Database Links |
12. Sequences |
13. Snapshots |
14. Snapshot Logs |
15. Job Queues |
16. Refresh Groups |
17. Cluster Definitions |
18. Tables (also grants,comments, |
19. Referential Integrity |
20. POSTTABLES actions |
21. Synonyms |
22. Views |
23. Stored Procedures |
24. Triggers, Defaults and Auditing |
參數:
關鍵字 說明(預設)
----------------------------------------------
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)
ANALYZE 執行轉儲檔案中的 ANALYZE 語句 (Y)
FEEDBACK 顯示每 x 行 (0) 的進度
TOID_NOVALIDATE 跳過指定類型 id 的校正
FILESIZE 各轉儲檔案的最大尺寸
RECALCULATE_STATISTICS 重新計算統計值 (N)
5. 可能出現的問題
A:imp和exp版本問題
exp出現ora-00942錯誤:這是由於裝載的表或視圖不存在,多半是CATEXP.SQL還沒有運行,無法執行Export視圖,假如CATEXP.SQL已經運行,則可能是版本錯誤。
exp出現exp--00003錯誤:no storage definition found for segment :一般也是執行$ORACLE_HOME/rdbms/admin/catexp.sql可以解決.低版本的exp匯出高版本的資料庫時也會出現這種錯誤.(將compress=y加上好像也可以解決)
imp可以成功匯入低版本exp產生的檔案, 不能匯入高版本exp產生的檔案.
B:imp和exp使用的字元集不同
如果字元集不同, 匯入會失敗, 可以改變unix環境變數或者NT註冊表裡NLS_LANG相關資訊,匯入完成後再改回來.
C:資料庫物件有主外鍵約束,不符合主外鍵約束時, 資料會匯入失敗.可以先匯入主表, 再匯入依存表,disable目標匯入對象的主外鍵約束, 匯入資料後, 再enable.
D:資料庫物件已經存在
如果用了參數ignore=y, 會把exp檔案內的資料內容匯入
如果表有唯一關鍵字的約束條件, 不合條件將不被匯入
如果表沒有唯一關鍵字的約束條件, 將引起記錄重複
E:匯入到指定使用者或資料表空間時,確定目標使用者或資料表空間已存在,並有足夠的空間
F:匯入使用者自訂的一些類型時可能會失敗
G:匯入trigger,sequence也可能會出現錯誤