Oracle以其強大的數據庫管理能力
高安全性
多用戶操作時數據的一致性
贏得了用戶的廣泛青睐
獲得了很高的市場占有率
但是
它在漢字信息顯示時存在多種字符集
且相互之間不能通用
這就給多數據庫之間的數據共享帶來了一些麻煩
筆者從事Oracle數據庫管理及應用軟件的開發工作多年
常遇到Oracle數據庫漢字顯示的問題
主要現象是漢字顯示為不可識別的亂碼
信息無法使用
本文介紹筆者在實際工作中的一點心得
與大家一起探討
中英文Oracle之間的數據共享
在筆者的實際工作中
有為多個二級廠礦開發的基於Oracle數據庫的應用程序
而各個單位所用的Oracle數據庫
在安裝時所采用的字符集各不相同
有的用英文字符集
有的用中文字符集
當表中的數據只是數字
英文信息時
數據共享是可以的; 當表中含有漢字信息時
以正常的方式進行共享
就看不到漢字了
而只會見到一些亂碼
下面以Oracle
版的數據庫為例說明解決方法
假設源數據庫是中文字符集
目標數據庫是英文字符集
利用 Delphi作為轉換工具
實際的步驟依據導入和導出有所不同
導出數據時步驟如下
>
配置客戶端字符集
首先將本機Oracle客戶端的字符集配置得和源數據庫的字符集一致
打開注冊表
找到HKEY_LOCAL_MACHINE
選下面的SOFTWARE
再選Oracle
在注冊表中找到NLS_LANG
將值改為
AMERICAN_AMERICA
ZHS
CGB
配置數據庫別名
用Delphi的工具SQL EXPLORER配置兩個數據庫假名
其中DBSOURCE
用來連接源數據庫
DBMIDDLE
用來連接中間數據庫(Paradox表)
導出
打開Delphi的工具Database DeskTop
在主菜單中選Tools下面的Utilities
再選Copy
會彈出一個新的對話框
在Alias(數據庫別名)中選擇DBSOURCE
並輸入用戶口令
在打開的數據庫中選擇需要的表
點擊OK按鈕
在Alias(數據庫別名)中選擇DBMIDDLE
在File Name欄中輸入目標表名
點擊COPY按鈕
如果顯示: Copy Successfully Completed
則數據導出成功
導入數據時步驟如下:
配置客戶端字符集
首先將本機Oracle客戶端的字符集配置得和目標數據庫的字符集一致
打開注冊表
找到HKEY_LOCAL_MACHINE
選下面的SOFTWARE
再選Oracle
在注冊表中找到NLS_LANG
將值改為
AMERICAN_AMERICA
US
ASCII
配置數據庫別名
用Delphi的工具SQL EXPLORER配置一個數據庫別名
DBTARGET
用來連接目標數據庫
導入
打開Delphi的工具Database DeskTop
在主菜單中選Tools下面的Utilities
再選Copy
會彈出一個新的對話框
在Alias(數據庫別名)中選擇DBMIDDLE
在打開的數據庫中選擇需要的表
點擊OK按鈕
在Alias(數據庫別名)中選擇DBTARGET
並輸入用戶口令
在File Name欄中輸入目標表名
點擊COPY按鈕
如果顯示: Copy Successfully Completed
則數據導入成功
此時
在目標數據庫中查看導入的表
漢字顯示就正常了
小型機和PC服務器之間的
數據共享
筆者所在公司有小型機Alpha
作為數據庫服務器
上面有多個二級單位使用
隨著時間的推移
數據增加
用戶增加
小型機不堪重負
運行速度緩慢
不能滿足日常的工作需要
為了緩解這種情況
有部分單位自備了PC服務器
將數據從小型機上移植下來
建立了自己單獨的數據庫
兩個數據庫都安裝的是英文字符集
從小型機上導出的數據
裝入到PC服務器
遇到漢字信息也不能正常顯示
這主要是因為兩者的操作系統不同
小型機上是VMS系統
而PC服務器上是NT
有兩種方法可以解決這個問題:
用仿真終端的方式將數據導出
用Telnet連接到小型機上
執行exp
將某個用戶的數據庫導出為一個*
dmp文件
保存在PC服務器上
用FTP將數據取到本機
用FTP連接到小型機上
執行bin
再執行Get
將數據(*
dmp文件)以二進制的方式傳輸到本機
注意這裡必須用二進制方式
否則數據無法正常使用
得到小型機上的數據後
再將本機客戶端配置得和PC服務器的字符集一致
將數據導入PC服務器數據庫中
則一切數據均可使用了
數據庫升級 在數據庫的使用中常會遇到Oracle的版本升級
如何在保證原來數據安全的情況下
將數據庫平穩地升級?這裡分兩種情況
英文字符集的安裝
如果原來的數據庫安裝采用的是英文字符集
則從Oracle
升級到Oracle
時
只要將數據字典Props$中的參數修改為
US
ASCII
即可
以系統DBA的身份登錄SQL*PLUS
執行如下的命令
修改數據字典
SQL>UPDATE PROPS$ SET VALUE$=
US
ASCII
WHERE NAME=
NLS_CHARACTERSET
;
SQL>COMMIT;
注意
修改後必須重新啟動數據庫
配置才起作用
然後將從Oracle
中文字符集的安裝
如果原來的數據庫安裝采用的是中文字符集
直接將數據導入
是否可用呢?不可以
漢字顯示為亂碼
原因是Oracle
的中文字符集的參數是
ZHS
CGB
而Oracle
的中文字符集的參數是
ZHS
GBK
兩者不一樣
為了能正常地使用
必須修改Oracle
的數據字典的參數為
ZHS
CGB
具體的修改步驟如下
用系統DBA的身份登錄SQL*PLUS
執行
SQL>UPDATE PROPS$ SET VALUE$=
ZHS
CGB
WHERE NAME=
NLS_CHARACTERSET
;
SQL>COMMIT;
注意
修改後必須重新啟動數據庫
配置才起作用
然後將從Oracle
導出的數據
導入Oracle
的數據庫中即可
From:http://tw.wingwit.com/Article/program/Oracle/201311/17003.html