国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

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

2024-08-29 13:32:00
字體:
來源:轉載
供稿:網友

對于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/[email protected] 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/[email protected] 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/[email protected] file=c:expdat.dmp log=c:export.log
顯示成功導出。再進行遠程導入
c:>imp80 gxmisdba/[email protected] 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。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 景德镇市| 开平市| 韶关市| 凤凰县| 河北区| 峨山| 阿图什市| 岗巴县| 英山县| 淮滨县| 莱阳市| 区。| 兴国县| 大兴区| 宁阳县| 临洮县| 禄劝| 通道| 宣武区| 青浦区| 泗洪县| 鲁山县| 壤塘县| 奉节县| 平武县| 梁平县| 阿拉善盟| 司法| 泰和县| 疏附县| 赣榆县| 临城县| 寻乌县| 江口县| 白朗县| 陆良县| 修武县| 元氏县| 贵南县| 华蓥市| 郎溪县|