Oracle數據庫作爲目前市場的主流數據庫之一,許多應用都在其上進行開發,由於Oracle數據庫更新換代的原因和不同的應用程序提供商,可能會造成在一個單位的應用中存在Oracle的幾種版本,如Oracle 7、Oracle 8、Oracle 8i,甚至Oracle 9i.。而考慮到數據庫集中、維護、備份的方便性和避免設備的重複投資,在應用能兼容的情況下,將幾個版本的Oracle數據庫移植到一個主流版本上是數據庫管理員的一個較優的選擇。 |
這就存在從Oracle數據庫的低版本移植到高版本和從Oracle數據庫的高版本移植到低版本的問題,甚至包括系統平臺的遷移如從Windows NT系統遷移到Unix系統。利用Oracle導入/導出工具(Export/Import)能比較方便實現上述移植操作。 |
Oracle導入/導出工具(Export/Import)主要是用來對數據庫進行邏輯備份,利用Export導出數據庫的轉儲二進制文件作爲數據庫Import輸入從而達到移植的目的。有二個規則可以參考: |
規則一:從Oracle 低版本的Export數據可以Import到Oracle高版本中,但限於Oracle的相鄰版本,如從Oracle 7 到 Oracle 8。對於兩個不相鄰版本間進行轉換,如從Oracle 6 到 Oracle 8,則應先將數據輸入到中間版本—Oracle 7,再從中間數據庫轉入更高版本。 |
規則二:Oracle的Export/Import工具只能連接到擁有更高或者一樣的Export/Import版本的數據庫。如Oracle 8.0.5的Export/Import(版本8.0.5.0.0)可連接到Oracle 8.1.6數據庫(版本8.1.6.0.0);高版本的Export導出來的轉儲文件,低版本的Import讀不了;低版本的Export導出來的轉儲文件,高版本的Import可以進行讀取。 |
利用上面兩個規則,下面就本人在爲一單位用Oracle的導入/導出工具(Export/Import)進行此種移植碰到的問題,提出來與大家分享,希望能起到拋磚引玉的作用。 |
此單位擁有Oracle數據庫版本有Oracle 8.1.6 For NT、Oracle 8.0.5 For NT、Oracle 8.0.4 For Digital Unix、Oracle 7.3 For NT。 |
考慮到Oracle 8.0.4 For Digital Unix運行在小型機上、單位的備份系統也是針對此小型機,決定將Oracle 8.1.6 For NT、Oracle 8.0.5 For NT、Oracle 7.3 For NT的數據庫都移植到Oracle 8.0.4 For Digital Unix上。 |
因版本相差甚小,開始直接用Oracle8.0.5的exp80導出數據庫的轉儲文件,然後用FTP(binary傳輸模式)直接上傳至Oracle 8.0.4 所在的小型機,再用Oracle 8.0.4的imp導入一直有字符集的問題,即存有漢字的字段顯示的都是”??????”, 移植失敗。後發現,在Oracle8.0.5服務器上直接用Oracle8.0.5的imp80對exp80導出的轉儲文件進行遠程導入,字符集的問題解決,移植成功。 |
對於使用Oracle 8.0.4 For Digital Unix的用戶,提醒一句,最好不要用Oracle 8.0.4 For Digital Unix的exp、imp工具做備份,而應用此版本的Windows客戶端程序exp80、imp80。本人曾做過實驗:在Oracle 8.0.4 for Digital UNIN數據庫上新建一用戶(user)和一個表格(table)通過sql plus客戶端在表格的列中插入一些中文行,提交後,用exp 數據導出,再用imp數據導入,用sql plus客戶端查看,表中的中文值顯示爲”???”)。 |
直接用Oracle7.3的export導出數據庫的轉儲文件,拷至Oracle8.0.5服務器,然後用Oracle8.0.5服務器的imp80直接導入至Oracle 8.0.5數據庫。此移植就變成了Oracle 8.0.5 For NT移植至Oracle 8.0.4 For Digital Unix的移植。 |
初步設想也通過Oracle 8.0.5進行過度。因其版本比Oracle 8.0.5高、下面對參考的規則進行一些校驗。 |
3.1高版本的Export導出來的轉儲文件,低版本的Import讀不了 |
在Oracle 8.1.6數據庫服務器導出轉儲二進制文件:ora816.dmp。 |
在Oracle 8.0.5數據庫服務器上用Imp80進行導入。 |
D:>Imp80 house/password file=d:/ ora816.dmp log=d:/ora816.log full=y |
已連接到:Oracle8 Release 8.0.5.0.0 – Production |
PL/SQL Release 8.0.5.0.0 – Production |
IMP-00010: 不是有效的導出文件,標題檢驗失敗 |
IMP-00021: 操作系統錯誤 - 錯誤代碼(十進制2,十六進制0x2) |
3.2 Oracle的Export/Import工具只能連接到擁有更高或者一樣的Export/Import版本的數據庫 |
在Oracle 8.1.6數據庫服務器導出轉儲二進制文件:ora816.dmp。 |
在Oracle 8.1.6數據庫服務器向Oracle8.0.5數據庫進行數據遠程導入 |
D:>Imp house/password@orclfrom816to805 file=d:/ ora816.dmp log=d:/ora816.log full=y |
(orclfrom816to805爲數據庫連接字符串由Oracle8.1.6數據庫指向 Oracle8.0.5數據庫) |
連接到: Oracle8 Release 8.0.5.0.0 – Production |
PL/SQL Release 8.0.5.0.0 – Production |
經由常規路徑導出由EXPORT:V08.01.06創建的文件 |
已經完成ZHS16GBK字符集和ZHS16GBK NCHAR 字符集中的導入 |
IMP-00003: ORACLE 錯誤2248出現 |
ORA-02248: 無效的 ALTER SESSION 選項 |
b)在Oracle 8.0.5數據庫服務器上用exp80對Oracle 8.1.6數據庫進行遠程導出。 |
D:>exp80 house/password@orclfrom805to816 file=d:/ora816.dmp log=d:/ora816.log |
(orclfromfrom805to816爲數據庫連接字符串由Oracle8.0.5數據庫指向Oracle8.1.6數據庫) |
連接到:Oracle8i Enterprise Edition Release 8.1.6.0.0 – Production |
With the Partitioning option |
JServer Release 8.1.6.0.0 – Production |
已導出ZHS16GBK字符集和ZHS16GBK NCHAR 字符集 |
再對遠程導出的轉儲文件在Oracle 8.0.5數據庫服務器上用imp80導入。 |
D:>imp80 house/password file=d:/ora816.dmp full=y log=d:/ora816 _i.log |
此刻此移植就變成了Oracle 8.0.5 For NT移植至Oracle 8.0.4 For Digital Unix的移植。 |
利用Oracle的Oracle導入/導出工具(Export/Import)除了可進行數據庫邏輯備份、數據庫移植還可以用來提高數據庫的性能,對數據庫進行一次導入/導出操作能重新組織數據,消除數據庫的碎片,從而使數據庫的性能有較大的提高。 |
|