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