posts - 49,comments - 97,trackbacks - 0

           

          對(duì)于oracle數(shù)據(jù)庫(kù)之間的移植采用oracle的導(dǎo)入導(dǎo)出工具(import/export)是一個(gè)比較好的策略。雖也可以利用第三方軟件如sybase 的power designer中的reverse engineering 進(jìn)行數(shù)據(jù)庫(kù)結(jié)構(gòu)重建,然后在進(jìn)行較復(fù)雜的數(shù)據(jù)導(dǎo)入過(guò)程,但對(duì)于作業(yè)隊(duì)列、快照等則不得不用手工來(lái)創(chuàng)建。而export能將整個(gè)數(shù)據(jù)庫(kù)、指定用戶、指定表和相關(guān)的數(shù)據(jù)字典進(jìn)行輸出,export輸出的輸出轉(zhuǎn)存二進(jìn)制文件包括了完全重建所有被選對(duì)象所需的命令。

          本人在為某電廠mis(oracle數(shù)據(jù)庫(kù))數(shù)據(jù)采用oracle的導(dǎo)入導(dǎo)出工具從windows nt平臺(tái)移植到digital unix平臺(tái)時(shí)遇到的關(guān)于字符集的問(wèn)題和總結(jié)出的經(jīng)驗(yàn)與大家來(lái)分享。

          1. 移植環(huán)境
          原操作系統(tǒng)平臺(tái): windows nt
          數(shù)據(jù)庫(kù): oracle 8.0.5 for windows nt
          服務(wù)器:hp netserver lh3
          目標(biāo)操作系統(tǒng)平臺(tái):digital unix alpha v4.0
          數(shù)據(jù)庫(kù):oracle 8.0.4 for digital unix
          服務(wù)器:alphaserver es40 小型機(jī)

          2. 數(shù)據(jù)導(dǎo)出
          在nt服務(wù)器上用oracle導(dǎo)出工具進(jìn)行數(shù)據(jù)導(dǎo)出,oracle導(dǎo)出工具有命令行和圖形界面兩種方式。
          本人直接用命令行方式進(jìn)行數(shù)據(jù)導(dǎo)出:
          c:> exp80 gxmisdba/manager file=c:expdat.dmp log=c:export.log
          即將導(dǎo)出指定的用戶...
          . 正在導(dǎo)出用戶gxmisdba的外部函數(shù)程序庫(kù)名稱
          . 正在導(dǎo)出用戶gxmisdba的對(duì)象類型定義
          即將導(dǎo)出gxmisdba的對(duì)象 ...
          . 正在導(dǎo)出數(shù)據(jù)庫(kù)鏈接
          . 正在導(dǎo)出序號(hào)
          . 正在導(dǎo)出群集定義
          . 即將導(dǎo)出gxmisdba的表通過(guò)常規(guī)路徑 ...
          . . 正在導(dǎo)出表     aaaaa          0 行被導(dǎo)出
          . . 正在導(dǎo)出表  evt_carrier_configuration   0 行被導(dǎo)出
          . . 正在導(dǎo)出表    tbl_aj_agks       331 行被導(dǎo)出
            .
            .
            .
          . 正在導(dǎo)出同義詞
          . 正在導(dǎo)出視圖
          . 正在導(dǎo)出存儲(chǔ)的過(guò)程
          . 正在導(dǎo)出參考資料一致性約束條件
          . 正在導(dǎo)出觸發(fā)器
          . 正在導(dǎo)出后期表活動(dòng)
          . 正在導(dǎo)出快照
          . 正在導(dǎo)出快照日志
          . 正在導(dǎo)出作業(yè)隊(duì)列
          . 正在導(dǎo)出刷新組和子組
          在沒(méi)有警告的情況下成功終止導(dǎo)出。

          3.數(shù)據(jù)導(dǎo)入
          在nt服務(wù)器上通過(guò)ftp命令將導(dǎo)出的輸出轉(zhuǎn)存二進(jìn)制文件expdat.dmp(使用binary傳輸模式)傳輸至digital unix服務(wù)器上。
          用oracle for digital unix 數(shù)據(jù)導(dǎo)入工具命令行方式進(jìn)行數(shù)據(jù)導(dǎo)入
          $imp gxmisdba/manager file=/expdat.dmp full=y log=u01import.log
          connected to: oracle8 enterprise edition release 8.0.4.0.0 - production
          pl/sql release 8.0.4.0.0 - production
          export file created by export:v08.00.05 via conventional path
          . importing gxmisdbas objects into gxmisdba
          . . importing table   "aaaaa"            0 rows imported
          . . importing table  "evt_carrier_configuration"   0 rows imported
          . . importing table   "tbl_aj_stk"         331 rows imported
          imp-00017: following statement failed with oracle error 2437:
          "alter table "tbl_kj_jlry" add constraint "pk_tbl_kj_jlry" primary key ("fld_kj_jlry_bh","fld_kj_jlry_xm") using index pctfree 10 initrans 2 maxtrans 255 storage (initial 10240 next 10240 minextents 1 maxextents 2147483645 pctincrease 50 freelists 1 freelist groups 1 buffer_pool default)"
          "      enable novalidate"
          imp-00003: oracle error 2437 encountered
          ora-02437: cannot enable (gxmisdba.pk_tbl_kj_jlry) - primary key violated
          .
          .
          .
          import terminated successfully with warnings.
          數(shù)據(jù)導(dǎo)入出現(xiàn)20多個(gè)以上類似錯(cuò)誤,后分析其中報(bào)錯(cuò)的"tbl_aj_stk"表,發(fā)現(xiàn)"fld_kj_jlry_xm"字段值(關(guān)鍵字組成之一)為中文字符而在digital unix服務(wù)器oracle數(shù)據(jù)庫(kù)中"fld_kj_jlry_xm"字段值顯示的為"????"(在客戶端用oracle sql plus查看),從而造成關(guān)鍵字沖突。
          在客戶端oracle sql plus對(duì)某行顯示"????"的字段值進(jìn)行修改,如改成中文值”測(cè)試”,提交后,用sql語(yǔ)句查看,剛修改的行中顯示"????"的字段值變成了”測(cè)試”,這說(shuō)明了digital unin服務(wù)器上的oracle數(shù)據(jù)集可以存儲(chǔ)中文字符,但oracle 8.0.4 for digital unin的導(dǎo)入工具imp未能將oracle 8.0.5 for windows nt imp80導(dǎo)出的中文數(shù)據(jù)進(jìn)行轉(zhuǎn)換。

          4.查看字符集參數(shù)
          4.1查看oracle 8.0.5 for windows nt props$內(nèi)容
          sql> connect sys/change_on_install
          sql> col value$ format a40
          sql> select name,value$ from props$;
          name              value$
          ---------------------------------------
          dict.base            2
          nls_language           american
          nls_territory          america
          nls_currency           $
          nls_iso_currency         america
          nls_numeric_characters     .,
          nls_calendar           gregorian
          nls_date_format         dd-mon-yy
          nls_date_language        american
          nls_characterset         zhs16gbk
          nls_sort            binary
          nls_nchar_characterset     zhs16gbk
          nls_rdbms_version        8.0.5.0.0
          global_db_name         oracle.world
          export_views_version      7
          已選擇15行。

          4.2查看oracle 8.0.4 for digital unin 的props$內(nèi)容
          sql> connect sys/change_on_install
          sql> col value$ format a40
          sql> select name,value$ from props$;
          name              value$
          ---------------------------------------
          dict.base            2
          nls_language           american
          nls_territory          america
          nls_currency           $
          nls_iso_currency         america
          nls_numeric_characters      .,
          nls_calendar           gregorian
          nls_date_format         dd-mon-yy
          nls_date_language        american
          nls_characterset         zhs16cgb231280
          nls_sort             binary
          nls_nchar_characterset      zhs16cgb231280
          nls_rdbms_version        8.0.4.0.0
          global_db_name          orcl.world
          export_views_version      7
          15 rows selected.
          發(fā)現(xiàn)oracle 8.0.4 for digital unin 采用了oracle在digital unix環(huán)境下建議的中文字符集zhs16cgb231280,兩者的字符集不同,于是本人就在digital unin服務(wù)器上重新安裝oracle,選擇了與nt上同樣的字符集zhs16gbk(中國(guó)簡(jiǎn)體漢字16位國(guó)標(biāo)庫(kù))。安裝完成后,通過(guò)查看props$的內(nèi)容,確認(rèn)了oracle 8.0.4 for digital unin和oracle 8.0.5 for windows nt的字符集一致。于是用oracle 8.0.4 for digital unin的導(dǎo)入工具imp重新進(jìn)行數(shù)據(jù)導(dǎo)入,但還是報(bào)同樣的錯(cuò)誤,問(wèn)題還未得到解決。

          5.問(wèn)題解決辦法
          后來(lái)本人發(fā)現(xiàn)在oracle 8.0.5 for windows nt的服務(wù)器(或裝有oracle 8.0.5 for windows 95/98的工作站)上直接用oracle 8.0.5 for windows nt的導(dǎo)入工具imp80遠(yuǎn)程對(duì)oracle 8.0.4 for digital unin數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)導(dǎo)入,問(wèn)題竟得到解決。
          5.1在nt的服務(wù)器上,修改tnsnames.ora(或通過(guò)oracle net8 easy config)設(shè)置數(shù)據(jù)庫(kù)連接字符串gxmis(可自行設(shè)定)指向oracle 8.0.4 for digital unin服務(wù)器。

          5.2在nt的服務(wù)器上進(jìn)行數(shù)據(jù)遠(yuǎn)程導(dǎo)入
          c:>imp80 gxmisdba/manager@gxmis file=c:expdat.dmpfull=y log=c:import.log

          已連接到:oracle8 enterprise edition release 8.0.4.0.0 - production
          pl/sql release 8.0.4.0.0 - production
          經(jīng)由常規(guī)路徑導(dǎo)出由export:v08.00.05創(chuàng)建的文件
          . 正在將gxmisdba的對(duì)象導(dǎo)入到 gxmisdba
          . . 正在導(dǎo)入表 "aaaaa" 0行被導(dǎo)入
          . . 正在導(dǎo)入表 "evt_carrier_configuration" 0行被導(dǎo)入
          . . 正在導(dǎo)入表 "tbl_aj_agks" 331行被導(dǎo)入
          .
          .
          .
          準(zhǔn)備啟用約束條件...
          成功終止導(dǎo)入

          5.3把oracle 8.0.4 for digital unin字符集重新又改成zhs16cgb231280,進(jìn)行數(shù)據(jù)遠(yuǎn)程導(dǎo)入測(cè)試,數(shù)據(jù)也同樣地導(dǎo)入成功。說(shuō)明zhs16cgb231280字符集可以兼容zhs16gbk字符集。

          6.經(jīng)驗(yàn)總結(jié)
          6.1在oracle 8.0.4 for digital unin服務(wù)器上(字符集zhs16gbk)用8.0.4 for digital unin的導(dǎo)出工具exp將已正常(即可存儲(chǔ)和顯示中文)的數(shù)據(jù)庫(kù)導(dǎo)出。
          $ exp gxmisdba/manager file=/u01/expdat.dmp log=/u01/export.log
          顯示成功導(dǎo)出。
          在用oracle 8.0.4 for digital unin的導(dǎo)入工具imp進(jìn)行導(dǎo)入
          $imp gxmisdba/manager file=/u01/expdat.dmp full=y log=u01import.log
          錯(cuò)誤又重現(xiàn)。

          6.2在nt服務(wù)器上通過(guò)ftp命令將在oracle 8.0.4 for digital unin服務(wù)器上剛導(dǎo)出的輸出轉(zhuǎn)存二進(jìn)制文件expdat.dmp下載至nt服務(wù)器上,用imp80進(jìn)行遠(yuǎn)程導(dǎo)入。
          c:>imp80 gxmisdba/manager@gxmis file=c:expdat.dmp full=y log=c:import.log
          已連接到:oracle8 enterprise edition release 8.0.4.0.0 – production
          pl/sql release 8.0.4.0.0 – production
          imp-00016: 不支持要求的字符集轉(zhuǎn)換(從類型1到852)
          imp-00000: 未成功終止導(dǎo)入

          6.3在nt服務(wù)器上對(duì)digital unin服務(wù)器上的數(shù)據(jù)進(jìn)行遠(yuǎn)程導(dǎo)出(備份)
          c:>exp80 gxmisdba/manager@gxmis file=c:expdat.dmp log=c:export.log
          顯示成功導(dǎo)出。再進(jìn)行遠(yuǎn)程導(dǎo)入
          c:>imp80 gxmisdba/manager@gxmis file=c:expdat.dmp full=y log=c:import.log
          顯示成功導(dǎo)入。通過(guò)客戶端oracle sql plus查看中文顯示正常。
          從而說(shuō)明在oracle 8.0.4 for digital unin服務(wù)器上對(duì)含有中文的數(shù)據(jù)庫(kù)的數(shù)據(jù)移植、備份、數(shù)據(jù)恢復(fù)不要用oracle 8.0.4 for digital unin本身自帶的導(dǎo)入導(dǎo)出工具imp,exp,應(yīng)使用能進(jìn)行中文導(dǎo)入導(dǎo)出的工具,如imp80,exp80。

          posted on 2005-10-28 15:41 閔毓 閱讀(507) 評(píng)論(0)  編輯  收藏 所屬分類: 數(shù)據(jù)庫(kù)心得與體會(huì)
          主站蜘蛛池模板: 泗洪县| 潜山县| 岳阳市| 小金县| 同江市| 洞口县| 大厂| 桃园市| 称多县| 宜兰市| 汝州市| 巨野县| 介休市| 什邡市| 偃师市| 博罗县| 克什克腾旗| 巴彦县| 璧山县| 敦化市| 揭东县| 鄂尔多斯市| 澄江县| 都安| 建始县| 舟曲县| 乌兰浩特市| 松滋市| 镇远县| 文化| 手游| 敦化市| 榆社县| 香港 | 吴桥县| 江阴市| 乐平市| 杨浦区| 金平| 昌邑市| 灵璧县|