<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Vincent.Chan‘s Blog

    常用鏈接

    統計

    積分與排名

    網站

    最新評論

    oracle數據庫移植時字符集問題的解決

     

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

    本人在為某電廠mis(oracle數據庫)數據采用oracle的導入導出工具從windows nt平臺移植到digital unix平臺時遇到的關于字符集的問題和總結出的經驗與大家來分享。

    1. 移植環境
    原操作系統平臺: windows nt
    數據庫: oracle 8.0.5 for windows nt
    服務器:hp netserver lh3
    目標操作系統平臺:digital unix alpha v4.0
    數據庫:oracle 8.0.4 for digital unix
    服務器:alphaserver es40 小型機

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

    3.數據導入
    在nt服務器上通過ftp命令將導出的輸出轉存二進制文件expdat.dmp(使用binary傳輸模式)傳輸至digital unix服務器上。
    用oracle for digital unix 數據導入工具命令行方式進行數據導入
    $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.
    數 據導入出現20多個以上類似錯誤,后分析其中報錯的"tbl_aj_stk"表,發現"fld_kj_jlry_xm"字段值(關鍵字組成之一)為中文字 符而在digital unix服務器oracle數據庫中"fld_kj_jlry_xm"字段值顯示的為"????"(在客戶端用oracle sql plus查看),從而造成關鍵字沖突。
    在客戶端oracle sql plus對某行顯示"????"的字段值進行修改,如改成中文值”測試”,提交后,用sql語句查看,剛修改的行中顯示"????"的字段值變成了”測 試”,這說明了digital unin服務器上的oracle數據集可以存儲中文字符,但oracle 8.0.4 for digital unin的導入工具imp未能將oracle 8.0.5 for windows nt imp80導出的中文數據進行轉換。

    4.查看字符集參數
    4.1查看oracle 8.0.5 for windows nt props$內容
    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$內容
    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.
    發 現oracle 8.0.4 for digital unin 采用了oracle在digital unix環境下建議的中文字符集zhs16cgb231280,兩者的字符集不同,于是本人就在digital unin服務器上重新安裝oracle,選擇了與nt上同樣的字符集zhs16gbk(中國簡體漢字16位國標庫)。安裝完成后,通過查看props$的 內容,確認了oracle 8.0.4 for digital unin和oracle 8.0.5 for windows nt的字符集一致。于是用oracle 8.0.4 for digital unin的導入工具imp重新進行數據導入,但還是報同樣的錯誤,問題還未得到解決。

    5.問題解決辦法
    后來本人發現在oracle 8.0.5 for windows nt的服務器(或裝有oracle 8.0.5 for windows 95/98的工作站)上直接用oracle 8.0.5 for windows nt的導入工具imp80遠程對oracle 8.0.4 for digital unin數據庫進行數據導入,問題竟得到解決。
    5.1在nt的服務器上,修改tnsnames.ora(或通過oracle net8 easy config)設置數據庫連接字符串gxmis(可自行設定)指向oracle 8.0.4 for digital unin服務器。

    5.2在nt的服務器上進行數據遠程導入
    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
    經由常規路徑導出由export:v08.00.05創建的文件
    . 正在將gxmisdba的對象導入到 gxmisdba
    . . 正在導入表 "aaaaa" 0行被導入
    . . 正在導入表 "evt_carrier_configuration" 0行被導入
    . . 正在導入表 "tbl_aj_agks" 331行被導入
    .
    .
    .
    準備啟用約束條件...
    成功終止導入

    5.3把oracle 8.0.4 for digital unin字符集重新又改成zhs16cgb231280,進行數據遠程導入測試,數據也同樣地導入成功。說明zhs16cgb231280字符集可以兼容zhs16gbk字符集。

    6.經驗總結
    6.1在oracle 8.0.4 for digital unin服務器上(字符集zhs16gbk)用8.0.4 for digital unin的導出工具exp將已正常(即可存儲和顯示中文)的數據庫導出。
    $ exp gxmisdba/manager file=/u01/expdat.dmp log=/u01/export.log
    顯示成功導出。
    在用oracle 8.0.4 for digital unin的導入工具imp進行導入
    $imp gxmisdba/manager file=/u01/expdat.dmp full=y log=u01import.log
    錯誤又重現。

    6.2在nt服務器上通過ftp命令將在oracle 8.0.4 for digital unin服務器上剛導出的輸出轉存二進制文件expdat.dmp下載至nt服務器上,用imp80進行遠程導入。
    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: 不支持要求的字符集轉換(從類型1到852)
    imp-00000: 未成功終止導入

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

    posted on 2006-02-18 12:42 Vincent.Chen 閱讀(209) 評論(0)  編輯  收藏 所屬分類: Java 、Database

    主站蜘蛛池模板: 亚洲国产精品无码中文lv| 亚洲色图古典武侠| 精品国产亚洲AV麻豆| 成人网站免费观看| 亚洲av永久综合在线观看尤物| 1000部无遮挡拍拍拍免费视频观看| 亚洲AV无码专区国产乱码电影 | 亚洲综合精品香蕉久久网| 免费无毒a网站在线观看| 免费亚洲视频在线观看| 一级特黄aaa大片免费看| 亚洲日本韩国在线| 国产成年无码久久久免费| 亚洲产国偷V产偷V自拍色戒 | 99精品国产免费久久久久久下载| 亚洲国产高清视频在线观看| 免费福利网站在线观看| 国产亚洲中文日本不卡二区| 免费毛片在线视频| 成人嫩草影院免费观看| 久久久久亚洲AV成人无码| 精品女同一区二区三区免费站| 亚洲一区二区三区乱码在线欧洲| 国产乱色精品成人免费视频 | 一进一出60分钟免费视频| 亚洲午夜福利在线观看| 99re6免费视频| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 狠狠热精品免费观看| 亚洲真人无码永久在线| 久久99国产乱子伦精品免费| 亚洲av无码一区二区三区观看| 亚洲不卡无码av中文字幕| 久久国产免费一区二区三区| 亚洲天堂2017无码中文| 亚洲国产精品人人做人人爽| 91精品啪在线观看国产线免费| 亚洲欧美日韩综合久久久| 国产亚洲日韩在线三区| 国产啪精品视频网免费| 久99久无码精品视频免费播放|