exp和imp的詳細操作

eric0435發表於2012-11-03
使用匯出(exp)和匯入(imp)移動資料

匯出和匯入實用程式
匯出和匯入實用程式使管理員能夠在 Oracle 資料庫之間和 Oracle 資料庫內部
將資料移動到不同的表空間或使用者或重新組織資料以獲得高效的儲存和性
匯出實用程式
匯出實用程式可用於製作作業系統二進位制檔案的物件定義和資料的邏輯副本
匯出可寫入磁碟或磁帶上的檔案匯出實用程式在每個表中提取一致的資料視
匯入實用程式
匯入實用程式可以讀取由匯出實用程式建立的作業系統檔案並將物件定義和
資料複製到 Oracle 資料庫中匯入實用程式不能讀取文字檔案或用任何其它格
式建立的檔案

匯出和匯入的用途
 重新編排表
 將一個使用者所擁有的資料移至另一使用者
 在兩個資料庫之間移動資料:
– 從開發到生產
– 從 OLTP 系統到資料倉儲
 將資料庫移植到另外的:
– 作業系統平臺
– Oracle 資料庫發行版
 開發或升級期間重複測試執行
 執行邏輯備份

使用匯出和匯入
匯出和匯入可用於下列情況
 重新組織表很多情況都需要重新組織表
– 可能需要將資料從一個表空間移動到另一個表空間以使爭用減到最
少減少空閒空間碎片或為了易於備份
– 表可能包含很多移植的行
– 表可能包含很多有大量空閒空間的塊
– 表可能包含很多位於高水位標記以下的空塊
 將一個使用者擁有的資料移動到另一個使用者當需要從資料庫中刪除某個方案
或需要重新分發物件所有權時可能必須進行上述操作從一個使用者匯出的
資料可以匯入到不同使用者的方案中
 在資料庫之間移動資料透過只提取定義而忽略資料可將物件定義從開發
資料庫移動到生產資料庫匯出和匯入還可用於將資料從 OLTP 應用程式提
取到資料倉儲中
 移植到不同的作業系統平臺或 Oracle 版本在一臺計算機上匯出的資料可
以匯入到不同計算機上的資料庫中該計算機可能使用不同的字符集

 移植到不同版本的 Oracle 資料庫升級到新版本的 Oracle 伺服器時可以
從舊版本中匯出資料並匯入到新版本中注意不能使用該方法將資料從新
版本移至舊版本中
 在開發或升級過程中重複執行測試在開發或測試資料庫中應用程式可
能需要先進行多次測試後才能被充分除錯和接受可以將測試資料匯出到外
部檔案並在每次執行前匯入以確保在同一資料集上執行測試該方法還可
用於在升級生產資料庫之前測試新版本的 Oracle 伺服器
 執行邏輯備份可匯出資料庫中的所有或部分物件並且匯出檔案可用作邏
輯備份

三種匯出模式
匯出實用程式提供三種匯出模式
 表
 使用者
 資料庫
表模式
所有使用者都可以使用表模式匯出自己的表特權使用者可以匯出任何使用者所擁有
的表使用表模式匯出
 表定義
 表中的資料如果要求
 若由特權使用者執行匯出則將匯出表上的所有索引否則只能匯出該用
戶所擁有表上的索引
 僅當特權使用者執行該實用程式時才可匯出表上的所有觸發器否則只
能匯出該使用者所擁有表上的觸發器
 表上的約束
 在表上進行的所有授權
 在匯入時使用的分析方法定義

使用者模式
使用者模式匯出的工作方式隨執行匯出的使用者是否有特權而異
 特權使用者可以匯出任何使用者所擁有的物件在這種情況下匯出的物件是
– 使用者擁有的所有物件除了該使用者擁有的但位於其他使用者所擁有表上
的索引和觸發器
– 其他使用者在該使用者的表上建立的觸發器和索引
 非特權使用者只能匯出自己擁有的物件且該模式不包括其他使用者在該使用者所
擁有表上建立的索引或觸發器
完全資料庫模式
使用該模式時除了使用者 SYS 所擁有的物件以外將匯出資料庫中的所有對
象該模式要求特殊許可權且只能由部分使用者使用

常規路徑
該術語指格式化資料庫資料並將其寫入匯出檔案的預設方法常規路徑匯出使
用 SQL SELECT 語句從表中提取資料資料從磁碟讀入緩衝區快取記憶體行則
傳送到求值
緩衝區傳遞了表示式求值後資料傳送到匯出客戶端後者隨後
將資料寫入匯出檔案
直接路徑
直接路徑匯出直接讀取資料並繞過 SQL 命令處理層因此提取資料的速度比常
規路徑匯出快得多在直接路徑匯出中資料從磁碟讀入緩衝區快取記憶體行
則直接傳送到匯出程式這種匯出方式繞過了求值緩衝區即不重新組織塊中
的資料以使行塊組合在一起資料已經是匯出所期望的格式因此避免了不必
要的資料轉換資料傳送到匯出程式然後該程式將資料寫入匯出檔案
匯入實用程式能夠使用由任何路徑建立的匯出檔案使用的匯出路徑對執行導
入所花的時間不會有太大影響

使用匯出
$exp scott/tiger tables=(dept,emp) \
> file=emp.dmp log=exp.log \
> compress=n direct=y

使用匯出
可透過以下方式呼叫匯出
 命令列
 互動模式
 圖形介面若有
提供互動模式主要是為了向後相容它只提供命令列提供的部分選項因此
建議使用命令列模式
命令列
在 UNIX 或 Windows NT 上使用以下命令執行匯出
$exp [keyword=]{value|(value, value ...)}
[ [ [,] keyword ]{value|(value, value ...)} ] ...
此處關鍵字是下一節所討論的關鍵字之一
值是指定給關鍵字的值



命令列引數
以下顯示了一些常用的引數
關鍵字         預設值              含義
USERID                             Oracle 使用者名稱和口令若未指定口令則使用者將被提示輸入口令
BUFFER        作業系統特有的       用於在行寫入匯出檔案之前儲存提取行的緩衝區
大小
COMPRESS      Y                    Y 值指定匯入時初始區大小值將設定為等於段的當前大小
                                   N 值將導致保留當前區的大小匯出時必須進行選擇
                                   因為選擇的資訊要寫入匯出檔案不收縮 LOB 段
CONSISTENT    N                    Y 值指定在一個只讀事務中執行整個匯出操作
                                   匯出將嘗試獲取所有匯出物件的讀一致性影像
                                   N 值指定只需維護表級一致性
CONSTRAINTS   Y                    Y 值指定連同約束一起匯出表N 值導致不匯出約束
DIRECT        N                    Y 值指定匯出使用直接路徑N 值使用常規路徑
FEEDBACK                           0 將該引數指定為整數 n 以請求在匯出 n 行時顯示
                                   句點 (.) 零預設值表示不顯示句點
FILE          expdat.dmp           輸出檔名
FULL          N                    Y 值指定完全資料庫匯出
GRANTS        Y                    Y 值指定匯入時還必須保留所有匯出物件上的許可權
HELP          N                    Y 值顯示有關引數及其含義的列表此引數不與其它引數合用
INDEXES       Y                    Y 值使索引匯出
LOG           NULL                 用於儲存所有匯出訊息的檔名預設情況下只在螢幕上顯示訊息
OWNER                              進行使用者級匯出的使用者名稱
PARFILE                            指定包含匯出引數列表的檔名
RECORDLENGTH 作業系統特有的        輸出記錄的大小
ROWS         Y                     Y 值指定將匯出資料
STATISTICS   ESTIMATE              指定匯入時使用的分析方法
TABLES                             方案表用於表模式匯出
註釋
 只可以定義下列引數之一FULL=Y WNER=user 或
TABLES=schema.table
 如果指定直接路徑 (DIRECT=Y) 則 CONSISTENT 引數不能設定為 Y

使用匯入
匯入emp.dmp
$imp scott/tiger tables=(dept,emp) \
> file=emp.dmp log=imp.log ignore=y

使用匯入
可透過以下方式呼叫匯入
 命令列
 互動模式
 圖形介面若有
提供互動模式主要是為了向後相容它只提供命令列提供的部分選項因此
建議使用命令列模式
命令列
在 UNIX 或 Windows NT 上使用以下命令執行匯出
$imp [keyword=]{value|(value, value ...)}
[ [ [,] keyword ]{value|(value, value ...)} ] ...
此處關鍵字是下一節將討論的關鍵字之一
值是指定給關鍵字的值

命令列引數
以下顯示了一些常用的引數
關鍵字            預設值                           含義
USERID                                             Oracle 使用者名稱和口令如果未指定口令則將提示
                                                   使用者輸入口令
BUFFER            作業系統特有的                   傳送資料行的緩衝區大小以位元組為單位
COMMIT            N                                Y 值指定匯入應在每個陣列插入後提交預設情況
                                                   下只在裝載每個表後提交匯入在繼續下一個對
                                                   象前若發生錯誤則匯入執行回退指定
                                                   COMMIT=Y 以防止回退段無限增大
FEEDBACK          0                                將該引數指定為整數 n 以請求在匯入 n 行時顯示句
                                                   點 (.) 預設值禁止顯示
FILE              expdat.dmp                       輸入檔名
FROMUSER          NULL                             匯入物件所屬的使用者列表
FULL              N                                Y 值指定完全資料庫匯入
GRANTS            Y                                Y 值指定還必須匯入所有匯入物件上的許可權
HELP              N                                Y 值顯示有關引數及其含義的列表此引數不與其它引數合用
IGNORE            N                                如果值為 Y 則匯入在嘗試建立資料庫物件時將忽
                                                   略物件建立錯誤在這種情況下匯入不報告錯
                                                   誤繼續進行對於表IGNORE=Y 使行匯入現有
                                                   表不顯示任何訊息IGNORE=N 導致報告錯誤
                                                   如果表已存在則跳過表
                                                   注意只忽略物件建立錯誤不忽略其它錯誤如
                                                   作業系統錯誤資料庫錯誤和 SQL 錯誤並可能導
                                                   致處理停止
INDEXES           Y                                Y 值導致索引匯入
INDEXFILE         NULL                             指定檔案接收索引建立命令若指定了該引數則
                                                   請求模式的索引建立命令將被提取並寫入指定文
                                                   件而不用於在資料庫中建立索引不匯入表和其
                                                   它資料庫物件
                                                   然後可以編輯檔案例如更改儲存引數並將
                                                   其用作建立索引的 SQL 指令碼
LOG               NULL                             用於儲存所有匯入訊息的檔名預設情況下只在螢幕上顯示訊息
PARFILE                                            指定包含匯入引數列表的檔名
RECORDLENGTH      作業系統特有的                   輸入記錄的大小僅當在記錄大小不同的作業系統
                                                   上匯出資料時才需要此引數
ROWS              Y                                Y 值指定匯入資料
SHOW              N                                如果值為 Y 則只顯示而不匯入列出的匯出檔案內
                                                   容匯出中包含的 SQL 語句按匯入時 SQL 語句的
                                                   執行順序顯示如果 SHOW=Y 則唯一可以設定
                                                   的其它引數為 FROMUSER TOUSER FULL 和TABLES
TABLES            NULL                             要匯入的表名
TOUSER            NULL                             要匯入表的使用者名稱列表只有具有
                                                   IMP_FULL_DATABASE 角色的使用者才可以使用
                                                   該引數將物件匯入其他使用者的帳戶
註釋
 只可以定義下列引數之一FULL=Y WNER=user 或
TABLES=schema.table

匯入行為
 匯入順序:
表->資料->B 樹索引->約束, 觸發器, 點陣圖索引
 物件使用的表空間:
– 源資料庫中的相同表空間 (如果有)
– 使用者的預設表空間

匯入順序
表物件按照從匯出檔案讀取的順序匯入匯出檔案按下列順序包含物件
1 型別定義
2 表定義
3 表資料
4 表索引
5 完整性約束檢視過程和觸發器
6 點陣圖函式和域索引
該順序防止因匯入表的順序而拒絕資料該順序還可防止在同一資料上兩次觸
發冗餘觸發器一次在初始插入時一次在匯入時
但是某些物件如過程在匯入時可能因為是在它們所引用物件之前匯入的
而無效使用 STATUS=INVALID 檢查物件並重新編譯它們

匯入現有表的注意事項
將資料匯入現有表時匯入順序仍然會產生引用完整性失敗如果表上的引用
完整性約束在匯入結束時引用自身則也會發生類似的情況
出於上述原因匯入現有表時禁用引用約束是一個好辦法匯入結束後可以
重新啟用約束
用於物件的表空間
如果使用者有必需的限額則將表匯入它們匯出時所在的同一表空間但是如
果這樣的表空間已不存在或者使用者沒有必需的限額則匯入將在該使用者的預設
表空間內建立表如果使用者無法訪問預設表空間則無法匯入表
只能將 LOB 段匯入它匯出時所在的同一表空間因此如果表所有者不能在導
出 LOB 段的表空間內建立物件則將無法建立包含 LOB 的表

匯出和匯入原則
 使用引數檔案指定常用命令列選項
 僅在匯出少量資料時使用 CONSISTENT=Y
 如果存在許多已刪除的行, 請勿使用 COMPRESS=Y
 透過以下操作提高效能:
– 分配大容量緩衝區
– 若使用 7.3.3 或更高版本, 則使用直接路徑


匯出和匯入原則
使用引數檔案儲存常用的命令列引數這可使錯誤減到最少並使命令列保持較
如果正匯出的表上存在大量的更新操作使用 CONSISTENT=Y 很可能會產生
SNAPSHOT TOO OLD 錯誤通常在操作低峰時期執行較大的輸出會更好
或者建立一個較大的回退段使所有其它的回退段離線然後執行匯入
匯出選項 COMPRESS=Y 將生成建立初始區的程式碼初始區的大小等於當前分
配給物件的所有區的總大小如果物件上有很多已刪除的行或者如果上一個
區有很多未使用的塊這將不必要地分配給物件很多空間
分配計算機上的作業系統和資源所允許的緩衝區大小如果將資料匯入執行
7.3.3 版或更高版本的資料庫則使用直接路徑匯出
經過測試在exp命令中使用driect=y採用直接路徑匯出比常規路徑要快2-3倍
常規路徑
該術語指格式化資料庫資料並將其寫入匯出檔案的預設方法常規路徑匯出使
用 SQL SELECT 語句從表中提取資料資料從磁碟讀入緩衝區快取記憶體行則
傳送到求值
緩衝區傳遞了表示式求值後資料傳送到匯出客戶端後者隨後
將資料寫入匯出檔案
直接路徑
直接路徑匯出直接讀取資料並繞過 SQL 命令處理層因此提取資料的速度比常
規路徑匯出快得多在直接路徑匯出中資料從磁碟讀入緩衝區快取記憶體行
則直接傳送到匯出程式這種匯出方式繞過了求值緩衝區即不重新組織塊中
的資料以使行塊組合在一起資料已經是匯出所期望的格式因此避免了不必
要的資料轉換資料傳送到匯出程式然後該程式將資料寫入匯出檔案
匯入實用程式能夠使用由任何路徑建立的匯出檔案使用的匯出路徑對執行導
入所花的時間不會有太大影響

匯出和字符集轉換
常規路徑匯出在寫入匯出檔案時使用為使用者會話指定的字符集如 7 位 ASCII
或 IBM 內碼表 500 (EBCDIC)
直接路徑匯出只使用資料庫字符集匯出啟動匯出時如果匯出會話的字符集
和資料庫字符集不同則匯出顯示警告並中止在重新嘗試匯出前將會話字
符集指定為與資料庫字符集相同
匯出檔案包含一個標識用於顯示其字元資料所使用的字元編碼方案
匯入和字符集轉換
匯入會話和目標資料庫字符集可以不同於源資料庫字符集這種情況要求一個
或多個字符集轉換操作
如有必要在匯入時首先將匯出檔案資料轉換到為使用者會話指定的字元編碼方
案然後轉換到資料庫字符集
轉換期間匯出檔案中所有在目標字符集中無等效字元的字元都用預設字元代
替這些預設字元由目標字符集定義若要保證 100% 轉換目標字符集必須
是源字符集的超集或等效於源字符集
原則
因為字符集轉換延長了匯入所需的處理時間所以應儘可能地限制字符集轉換
次數最理想的情形是匯入會話和目標資料庫字符集與源資料庫字符集相
同不要求轉換

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26015009/viewspace-748244/,如需轉載,請註明出處,否則將追究法律責任。

相關文章