熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

oracle字符集文檔

2013-11-13 22:26:12  來源: Oracle 

  Oracle字符集是一個字節數據的解釋的符號集合有大小之分有相互的包容關系ORACLE支持國家語言的體系結構允許你使用本地化語言來存儲處理檢索數據它使數據庫工具錯誤消息排序次序日期時間貨幣數字和日歷自動適應本地化語言和平台

  一 Oracle字符集相關知識

   參數說明

  影響oracle數據庫字符集最重要的參數是NLS_LANG參數

  Oracle的字符集命名遵循以下命名規則:

  <Language><bit size><encoding>

  即: <語言><比特位數><編碼>

  比如: ZHSGBK表示采用GBK編碼格式位(兩個字節)簡體中文字符集

  它的格式如下NLS_LANG = language_territorycharset

  它有三個組成部分(語言地域和字符集)每個成分控制了NLS子集的特性

  其中Language 指定服務器消息的語言territory 指定服務器的日期和數字格式charset 指定字符集如:AMERICAN _ AMERICA ZHSGBK

  從NLS_LANG的組成我們可以看出真正影響數據庫字符集的其實是第三部分

  所以兩個數據庫之間的字符集只要第三部分一樣就可以相互導入導出數據前面影響的只是提示信息是中文還是英文

   查看數據庫字符集

  這涉及三方面的字符集

  一是oracel server端的字符集;

  二是oracle client端的字符集;

  三是dmp文件的字符集;

  在做數據導入的時候需要這三個字符集都一致才能正確導入

  查詢oracle server端的字符集

  有很多種方法可以查出oracle server端的字符集

  ①比較直觀的查詢方法

  SQL> select userenv(language) from dual;

  查詢結果如下: SIMPLIFIED CHINESE_CHINAZHSGB

  ②查看有關字符集的所有參數

  SELECT * FROM v$nls_parameters;

  結果中的NLS_CHARACTERSET ZHSGB

  查看dmp文件的字符集

  用oracle的exp工具導出的dmp文件也包含了字符集信息dmp文件的第和第個字節記錄了dmp文件的字符集如果dmp文件不大比如只有幾M或幾十M可以用UltraEdit打開(進制方式)看第個字節的內容然後用以下SQL查出它對應的字符集:

  SQL> select nls_charset_name(to_number(xxxx)) from dual;ZHSGBK

  查詢oracle client端的字符集

  在windows平台下就是注冊表裡面相應OracleHome的NLS_LANG具體路徑

  Win+R àregedit à HKEY_LOCAL_MACHINESOFTWAREORACLE nls_lang 顯示本地的字符集這樣就只影響這個窗口裡面的環境變量

  在unix平台下就是環境變量NLS_LANG

  $echo $NLS_LANG

  AMERICAN_AMERICAZHSGBK

  如果檢查的結果發現server端與client端字符集不一致建議統一修改為同server端相同的字符集

  建議

  關於字符集客戶端的字符集要求與服務器一致才能正確顯示數據庫的非Ascii字符如果多個設置存在的時候alter session>環境變量>注冊表>參數文件

  客戶端的字符集要求與服務器一致才能正確顯示數據庫的非Ascii字符如果多個設置存在的時候alter session>環境變量>注冊表>參數文件

  字符集要求一致但是語言設置卻可以不同語言設置建議用英文如字符集是zhsgbk則nls_lang可以是 American_Americazhsgbk

  補充內容

   數據庫服務器字符集

  SELECT * FROM nls_database_parameters;

   客戶端字符集環境

  SELECT * FROM nls_instance_parameters;

   會話字符集環境

  SELECT * FROM nls_session_parameters;

  二關於oracle字符集修改

  一旦數據庫創建後數據庫的字符集理論上講是不能改變的因此在設計和安裝之初考慮使用哪一種字符集十分重要根據Oracle的官方說明字符集的轉換是從子集到超集受支持反之不行如果兩種字符集之間根本沒有子集和超集的關系那麼字符集的轉換是不受oracle支持的對數據庫 server而言錯誤的修改字符集將會導致很多不可測的後果可能會嚴重影響數據庫的正常運行所以在修改之前一定要確認兩種字符集是否存在子集和超集的關系一般來說除非萬不得已我們不建議修改oracle數據庫server端的字符集特別說明我們最常用的兩種字符集ZHSGBK和 ZHSCGB之間不存在子集和超集關系因此理論上講這兩種字符集之間的相互轉換不受支持

  下例為把數據庫的字符集從ZHSGBK修改為 ZHSGB

  執行腳本

  對於每個sql腳本的含義請見注釋①~⑥

  startup mount ;

  alter session set sql_trace=true;

  alter system enable restricted session;

  alter system set job_queue_processes=;

  alter system set aq_tm_processes=;

  alter database open;

  set linesize ;

  alter database character set INTERNAL_USE ZHSGB;

  shutdown immediate ;

  startup ;

   相關參數注釋

  查看字符集參數SELECT * FROM v$nls_parameters;

  ①SQL_TRACE是Oracle提供的用於進行SQL跟蹤的手段是強有力的輔助診斷工具在日常的數據庫問題診斷和解決中SQL_TRACE是非常常用的方法

  sql_trace =true

  在全局啟用SQL_TRACE會導致所有進程的活動被跟蹤包括後台進程及所有用戶進程這通常會導致比較嚴重的性能問題所以在生產環境中要謹慎使用這個參數在g之後是動態參數可以隨時調整在某些診斷中非常有效

  提示: 通過在全局啟用sql_trace我們可以跟蹤到所有後台進程的活動很多在文檔中的抽象說明通過跟蹤文件的實時變化我們可以清晰的看到各個進程之間的緊密協調

  ②在使用過程中對數據庫進行限制

  ALTER SYSTEM DISABLE RESTRICTED SESSION來取消數據庫的受限制狀態在數據庫受限制的過程中只有對數據庫擁有CREATE SESSION權限的用戶才能夠連接到數據庫這種狀態有利於對數據庫進行備份恢復導入導出等操作

  ③首先設置JOB_QUEUE_PROCESSES=Oracle會殺掉CJQ及相應job進程

  ④aq_tm_processes值可選在之間代表是關閉隊列監視

  ⑤利用INTERNAL_USE 關鍵字修改區域設置目的是讓Oracle數據庫繞過了子集與超集的校驗

  ⑥STARTUP NOMOUNT

  然後可以使用ALTER DATABASE MOUNT 來掛上數據庫可以使用 STARTUP MOUNT來啟動數據庫並掛載上數據庫但是保持數據庫的關閉狀態稍後可以使用ALTER DATABASE OPEN來打開數據庫


From:http://tw.wingwit.com/Article/program/Oracle/201311/19105.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.