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