閔毓
          http://www.eshoo.com.cn 歡迎來到異客中國
          posts - 49,comments - 97,trackbacks - 0
          <2005年10月>
          2526272829301
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          歡迎來到異客中國
              遇機者,得。機遇會惠顧時刻準備的人。絕不讓機遇從自己身邊走過。

          常用鏈接

          留言簿(10)

          隨筆分類(57)

          隨筆檔案(46)

          文章檔案(2)

          相冊

          同事及朋友的博客

          網站鏈接

          搜索

          •  

          積分與排名

          • 積分 - 140328
          • 排名 - 449

          最新評論

          閱讀排行榜

          評論排行榜

          oracle 數據庫具有國際化的支持能力, 主要通過字符集等 NLS(National Language Support)??參數設置來實現對不同國家語言環境的支持。其中數據庫的字符集是在數據庫創建的階段, 即 create database 語句中指定的,數據庫一經建立,字符集就沒法改變了,除非重建。我們最常用的字符集設置通常為 zhs16cgb231280(國標2312字庫) 和 ZHS16GBK(方正 GBK 字庫)。GBK是在GB2312-80標準基礎上的內碼擴展規范,使用了雙字節編碼方案,其編碼范圍從8140至FEFE(剔除xx7F),共23940個碼位,共收錄了21003個漢字,完全兼容國標GB2312-80標準(只實現了6763個漢字)。

          在項目開發和維護過程中我們經常會遇見下面的情況, 使用 ZHS16CGB231280 字符集的oracle 系統中,姓名中出現的很多疑難漢字無法正常顯示(顯示為 ??)。

          ? ? 遇見這種情況以往最常見的處理方法是導出數據(exp), 用 ZHS16GBK 字符集重建數據庫,最后再導入(imp)數據。但這個過程對于一個大型數據庫來說很漫長和痛苦。這里給大家介紹一個比較快速簡單的方法,幾分鐘就能實現字符集轉換。這里以 oracle9i為例(8i中的操作略有不同)。

          1.? ? ? ? 作為 oracle 用戶登錄數據庫服務器

          2.? ? ? ? 停止監聽程序
          ? ?? ?? ?? ?? ?? ? $lsnrctl stop
          ? ?? ?? ?? ?? ?? ? 或
          ? ?? ?? ?? ?? ?? ? $lsnrctl stop??listener名稱

          3.? ? ? ? 作為 sysdba 登錄數據庫, 并檢查目前的數據庫字符集設置
          ? ?? ?? ?? ?? ?? ? sqlplus /nolog
          ? ?? ?? ?? ?? ?? ? connect /as sysdba
          ? ?? ?? ?? ?? ?? ? select value$ from props$ where name ='NLS_CHARACTERSET';

          如果上述查詢結果為 ZHS16CGB231280, 則進行如下操作:

          4.? ? ? ? 保存下列數據庫配置參數的原始設置
          ? ?? ?? ?? ? show parameter job_queue_processes
          ? ?? ?? ?? ? show parameter aq_tm_processes

          5.? ? ? ? 關閉數據庫服務,重新啟動后修改數據庫字符集, 并關閉數據庫
          ? ?? ?? ?? ???shutdown immediate
          ? ?? ?? ?? ???startup mount
          ? ?? ?? ?? ???alter system enable restricted session;
          ? ?? ?? ?? ???alter database open;
          ? ?? ?? ?? ???alter system set job_queue_processes = 0;
          ? ?? ?? ?? ???alter system set aq_tm_processes = 0;
          ? ?? ?? ?? ???alter database character set internal_use zhs16gbk;
          ? ?? ?? ?? ???shutdown immediate

          6.? ? ? ? 重新啟動數據庫服務,恢復 job_queue_processes設置
          ? ?? ?? ?? ? startup
          ? ?? ?? ?? ? alter system set job_queue_processes=原始設置;
          ? ?? ?? ?? ? alter system set aq_tm_processes=原始設置;
          ? ?? ?? ?? ? exit

          7.? ? ? ? 啟動監聽程序
          ? ?? ?? ?? ? $lsnrctl start
          ? ?? ?? ?? ? 或
          ? ?? ?? ?? ? $lsnrctl start??listener名稱

          8.? ? ? ? 修改客戶端 NLS_LANG 設置
          ? ?? ?? ?? ? windows 客戶端在注冊表中修改 NLS_LANG 參數:
          ? ?? ?? ?? ? nls_lang=”American_america.zhs16gbk”

          ? ? 注意,這里要指出的是, 字符集間的轉換可能會造成數據庫信息破壞,如把 ZHS16GBK 的oracle 數據庫轉換為 zhs16cgb231280, 其中的疑難漢字就會變成同樣的??, 有時甚至造成主鍵重復活違反唯一索引等問題。可能很少有人知道, Oracle 其實提供了一個應用程序 csscan, 可以用來檢測字符集轉換后數據庫的內容是否會被破壞。要使用 csscan 程序必須先以 sysdba 的身份執行 $ORACLE_HOME/rdbms/admin 目錄下的 csminst.sql。csscan help=y 可以得到關于 csscan 命令使用方法的幫助。
          posted on 2005-10-20 12:34 閔毓 閱讀(611) 評論(0)  編輯  收藏 所屬分類: 數據庫心得與體會
          主站蜘蛛池模板: 宜都市| 乌鲁木齐县| 盐山县| 青田县| 台南市| 永丰县| 山阴县| 金乡县| 红原县| 益阳市| 怀化市| 白水县| 寻甸| 长春市| 格尔木市| 察隅县| 星子县| 武川县| 克拉玛依市| 金堂县| 襄城县| 望奎县| 叶城县| 仁化县| 长垣县| 察哈| 绥宁县| 突泉县| 龙南县| 门头沟区| 河池市| 怀柔区| 建湖县| 玉山县| 姚安县| 麦盖提县| 三河市| 呼和浩特市| 正定县| 丹凤县| 吴旗县|