Conventional Path Export和Direct Path Export

jolly10發表於2009-01-09

exp時direct=y的作用

[@more@]
Conventional Path Export和Direct Path Export
從Oracle7的release7.3開始,Oracle開始在exp工具中提供兩種方法匯出表的資料:Direct Path匯出和Conventional Path匯出。透過exp的引數Direct來判斷選用那種匯出方式。這個引數有兩個值Y/N,如果指定為Y,則表明exp是使用Direct Path的模式匯出資料,指定為N,表明資料庫是用Conventional Path的模式匯出資料的。如果不明確指定direct的值,預設是N,也就是用Conventional Path的模式匯出資料


一、兩種匯出的模式在匯出的原理上是存在差別的。

Ø Conventional Path模式匯出相當於使用select語句從表中取出資料,資料從磁碟上先讀到buffer cache中,記錄被轉移到一個評估檢測的緩衝區中,資料經過語法檢測後沒有問題,將資料傳給exp的客戶端,最後寫入匯出的檔案中。

Ø 如果使用Direct Path模式匯出,資料直接從磁碟上讀取到匯出的PGA中:記錄直接被轉換匯出會話的私有buffer中。這也就是意味著SQL語句處理層被忽略掉了,因為資料已經是符合匯出的格式了,不需要其他的轉換處理了。資料直接被傳送給匯出的客戶端,最後寫入匯出檔案。

二、兩種匯出模式效能上也有一定的差異。

Ø Direct Path匯出模式速度上明顯快於Conventional Path匯出模式,因為Direct Path匯出模式忽略了SQL語句處理這一層。

Ø 當使用Direct Path匯出模式的時候,可以增大引數RECORDLENGTH的值來提高匯出的效能。匯出的效能主要取決以下的因素:DB_BLOCK_SIZE、匯出表上列的型別、匯出檔案的I/O層(主要是指匯出檔案儘量要和資料庫的資料檔案在不同的磁碟上,避免I/O上的競爭)。一般來說,引數RECORDLENGTH設定為作業系統I/O的block size或者是DB_BLOCK_SIZE的整數倍,例如64K。

Ø 使用哪種模式匯出資料都不會影響匯入資料,也就是說匯入資料的時間是一樣的。


三、兩種匯出模式都存在一些限制,在某些情況下只能使用其中的一種。

Ø Direct Path匯出模式只能使用命令列或者引數檔案的方式來匯出,不能使用互動式的方式匯出資料,只有Conventional Path匯出模式可以使用互動式的方式。

Ø Direct Path匯出模式不能用於匯出表空間,即設定引數TRANSPORT_TABLESPACES=Y,其他的FULL、USER、TABLE模式均可以使用Direct Path匯出模式。

Ø 在Oracle8i以前的版本里面,如果表裡面存在LOB的物件,是不能使用Direct Path匯出模式匯出表的,如果使用Direct Path匯出模式匯出表,那些存在LOB物件的記錄是不會被匯出的。自從Oracle8i之後,這種限制就被取消了。對於Oracle8i之後的版本,如果使用Direct Path匯出模式匯出表,那些存在LOB物件的記錄是會自動以Conventional Path匯出模式來匯出。但是如果你用低於Oracle8i的客戶端的exp工具的Direct Path匯出模式匯出Oracle8i以上的資料庫存在LOB物件的表,那些包含LOB的記錄還是同樣不會被匯出。

Ø Exp工具中的QUERY引數只能用於Conventional Path匯出模式,QUERY引數允許匯出一個表的滿足一定條件的部分記錄。

Ø Exp工具中的BUFFER引數只能用於Conventional Path匯出模式,BUFFER引數設定了用於fetch記錄的快取的大小,以位元組為單位,即在array中最大數量的記錄。

Ø 引數RECORDLENGTH指定檔案記錄的最大長度,以位元組為單位,即匯出I/O的buffer,最大為64K。這個引數決定了在沒寫入匯出檔案中快取中堆積資料的多少。如果沒有設定這個引數,在大多數平臺的預設值是1024位元組。

Ø 只有當環境變數中的NLS_LANG設定成跟匯出資料庫中的字符集一致的時候才能使用Direct Path匯出模式匯出資料。如果環境變數中的NLS_LANG和資料庫的字符集不一致的時候,匯出就會報類似下面的錯誤:
EXP-41 "Export done in server's UTF8, different from user's character set WE8ISO8859P1"
EXP-0 "Export terminated unsuccessfully".

這種限制只對於Oracle8i及其更低版本的Oracle有效,Oracle8i以上的版本不會出現此類錯誤。

四、兩種匯出模式在安全方面的一些差異。
Ø 對於虛擬資料庫(Virtual Private Database)和Oracle Label Security如果強制使用Conventional Path匯出模式匯出資料,匯出會成功的中止,但是存在類似下面的提示警告:EXP-79 "Data in table %s is protected. Conventional path may only be exporting partial table."

Ø 對於SYS使用者和被授予了EXEMPT ACCESS POLICY許可權的使用者,在匯出資料的時候是不受虛擬資料庫(Virtual Private Database)和Oracle Label Security的影響的,兩種匯出模式均可以使用。但是我們需要注意的是,EXEMPT ACCESS POLICY的許可權很大,在管理資料庫使用者的時候一般不要輕易授予,但是這個許可權不會影響對傳統物件執行SELECT、INSERT、DELETE、UPDATE的操作。

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

相關文章