2Gb or Not 2Gb - File limits in Oracle (Part II)
最後更新:2017-02-28
來源:互聯網
上載者:User
oracle
2Gb or Not 2Gb - File limits in Oracle (Part II)
匯出(Export)和2Gb
2Gb匯出檔案的大小
當編寫大部分版本的Export時,在建立匯出檔案上都是使用了預設的檔案操作API。這就意味著在很多平台上根本就沒有可能匯出2Gb或者大於2Gb的檔案系統檔案(file system file)。
但是仍然有一些可選項可以用於在Export時解決2Gb的限制:
ü 將大於2Gb的檔案匯出到裸裝置上基本上是沒有問題的,當然這首先要求裸裝置的大小必須能夠容納整個匯出檔案。
ü 匯出到一個允許壓縮或者切割的具名管道中(適用Unix平台)。
參看“在Unix平台上匯出大於2Gb檔案的快速參考”一文 [NOTE:30528.1]。
ü 匯出到磁帶(適用大多數平台)
參看“在Unix系統中匯出到磁帶”一文[NOTE:30428.1]。(這篇文章同時頁詳細描述了如何匯出到Unix管道和遠程shell中)
ü Oracle8i允許匯出到多個小檔案中,以替代單一的大檔案。
其它的2Gb匯出問題
Oracle允許區(extent)的尺寸最大為2Gb。但是不幸的是,在大多數的Oracle發行版中Export都存在這樣一個問題,當你Export一個大檔案,並且指定了COMPRESS=Y,那麼就有可能在匯出檔案的NEXT儲存子句中包含了一個大於2Gb的值。這樣將會導致Import失敗,即使是在Import時候指定了IGNORE=Y。Oracle已經在在[BUG:708790]中報告了這個問題,並且在[NOTE:62436.1]中提出了警告。
當Export碰到2Gb限制的時候,會報類似下面的錯誤:
. . exporting table BIGEXPORT
EXP-00015: error on row 10660 of table BIGEXPORT,
column MYCOL, datatype 96
EXP-00002: error in writing to export file
EXP-00002: error in writing to export file
EXP-00000: Export terminated unsuccessfully
在[BUG:185855]中提到了第二個問題,這個問題指出一個全庫匯出產生的CREATE TABLESPACE命令將在檔案大小上使用BYTES為單位,如果檔案大小超過2Gb,那麼在匯入的時候就會產生一個ORA-2237錯誤。這個問題可以通過在匯入之前先以M為單位而不是BYTES為單位來建立資料表空間這樣的方法來解決。[BUG:490837]也指出了相類似的問題。
匯出到磁帶
匯出的時候VOLSIZE參數限制在4Gb以下,在有些平台上可能只有2Gb。
在Oracle8i中已經修正了這個問題。[BUG:490190]中對此問題有所描述。
SQL*Loader和2Gb
在SQL*Loader試圖開啟一個超過2Gb的檔案時,將會報以下錯誤:
SQL*Loader-500: Unable to open file (bigfile.dat)
SVR4 Error: 79: Value too large for defined data type
在[NOTE:30528.1]中的例子可以稍作修改以使在SQL*Loader中使用大的輸入檔案。
Oracle 8.0.6在SQL*Loader中已經對discard file和log file實現了大檔案支援,但是對於輸入的data file在各個平台上仍然時不一樣的。[BUG:948460]中記錄了輸入檔案大小限制的詳細資料。[BUG:749600]則記錄了最大的discard file檔案大小。
Oracle和其它的2Gb問題
這個章節列舉了其它各色2Gb問題。
l Oracle 8.0.5版本以後在大部分的平台上Oracle都提供了64位的版本。從8.0.5的README檔案中可以看到相應的介紹-[NOTE:62252.1]
l DBV(資料庫驗證程式)可能無法掃描超過2Gb的資料檔案,並會報DBV-100錯誤。在[BUG:710888]中報告了此錯誤。
l 如果要在Oracle中建立大於2Gb的檔案, SQL命令列的"DATAFILE ... SIZE xxxxxx"子句部分必須以M或者K作單位來指定,否則將會報"ORA-02237: invalid file size"錯誤。在[BUG:185855]中報告了此錯誤。
l 在Oracle 7.3.4發行版以前資料表空間的限額不能超過2Gb。比如:
ALTER USER <username> QUOTA 2500M ON <tablespacename>
這樣將會報" ORA-2187: invalid quota specification."錯誤。
在[BUG:425831]中報告了此錯誤。解決方案是如果一個使用者需要超過2Gb的限額,那麼就給他賦予UNLIMITED TABLESPACE許可權。
l 如果spool的輸出檔案達到了2Gb,那麼會出現錯誤。比如:SQLPLUS的命令spool。
l 在Oracle工具中的一些CORE函數不支援大檔案。[BUG:749600]中報告了此錯誤,在Oracle 8.0.6和8.1.6版本中已經修正了。但是要注意在Oracle 8.1.5和別的任何補丁中都沒有修改這個錯誤。另外即使已經有修正,但是仍然還會有大檔案限制因為不是所有的代碼都使用了這些CORE函數。
注意:[BUG:749600]雖然闡明了CORE函數,但是代碼的某些部分仍然有問題。比如:SQL*Loader中輸入檔案的讀取就沒有使用CORE。
l UTL_FILE包使用了上述的CORE函數,所以在沒有修正的Oracle版本中仍然有2Gb限制。<Package:UTL_FILE>是一個允許在PL/SQL中進行檔案存取的PL/SQL包。
特定平台中的大檔案
下面是一些特定平台中關於大檔案支援的參考資料。雖然我們已經努力使這些文章的資料始終保持更新,但是仍然建議在存取大檔案時對每一個操作要小心謹慎地測試。
平台
參考
AIX (RS6000 / SP)
[NOTE:60888.1]
HP
[NOTE:62407.1]
Digital Unix
[NOTE:62426.1]
Sequent PTX
[NOTE:62415.1]
Sun Solaris
[NOTE:62409.1]
Windows NT
FAT檔案系統支援最大4Gb的檔案
NTFS檔案系統理論上支援最大16Tb的檔案
1.在NT的Oracle8上使用大檔案之前請先參考[NOTE:67421.1]
2.Oracle8.1.6的DBVERIFY程式有問題(參考[BUG:1372172])
3.在8.1.6 / 8.1.7中自動擴充到4Gb時會出現問題導致資料庫崩潰。(參考[BUG:1668488])