oracle 問題

7-------------
CentOS系統盤下載地址:http://ftp.twaren.net/Linux/CentOS/
經常使用RPM包下載地址:http://rpmfind.net/linux/RPM/index.html

6-------------
某具體實例啓動腳本文件:
/$ORACLE_HOME/dbs/spfile實例名.ora

5-------------
CentOS上安裝oracle時,需先修改linux版本以達到oracle安裝的系統版本要求。
例如,vi /etc/redhat-release,在此文件版本名前加上redhat-4之類。

4-------------
linux下oracle安裝時涉及的文件:
oracle帳號下的環境變量設置文件.bash_profile
$ORACLE_BASE
/etc/oraInst.loc
/etc/oratab
/usr/local/bin/coraenv
/usr/local/bin/dbhome
/usr/local/bin/oraenv

3-------------
建立數據庫時出現:ORA-12547:TNS:lost contact錯誤
從光盤中查詢並安裝libaio-0.3.105-2.i386.rpm軟件包。

2-------------
/tmp/OraInstall2008-08-30_09-15-55PM/jre/bin/i386/native_threads/java: error while loading shared libraries: libstdc++-libc6.1-1.so.2: cannot open shared object file: No such file
or directory
從光盤中查詢並安裝全部以compat開頭的rpm包
libstdc++-libc6.1-1.so.2此lib屬於compat-libstdc++-296-2.96-132.7.2.i386.rpm包

1--------------------------------
客戶端導入數據時出現字符亂碼解決:
(1)修改客戶端,在鏈接到數據庫後,用select * from V$NLS_PARAMETERS;
或者 select * from sys.props$;查詢,
看NLS_CHARACTERSET的VALUE$值是什麼?
而後在註冊表中的HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOMEO下,
修改NLS_LANG值的數值數據,例如:SIMPLIFIED CHINESE_CHINA.ZHS16GBK,
修改後面的「ZHS16GBK」爲數據庫中查詢到的NLS_CHARACTERSET值,
而後從新打開PL/SQL導入數據便可。
(2)重啓服務器端,先在PL/SQL客戶端以sysdba的身份登陸,修改sys.props$表中的NLS_CHARACTERSET,
即:update props$ set value$='ZHS16GBK' WHERE NAME='NLS_CHARACTERSET';
而後重啓服務器端的oracle,下次進入oracle時即已修改。

--------------------------
useBodyEncodingForURI ="true"
URIEncoding="UTF-8"
如是GBK則用GBK

SIMPLIFIED CHINESE_CHINA.ZHS16GBK

SIMPLIFIED CHINESE_CHINA.AL32UTF8

WE8ISO8859P1

在國內外大中型數據庫管理系統中,把ORACLE做爲數據庫管理平臺的用戶比較多。ORACLE 不管是數據庫管理能力仍是安全性都是無可非議的,可是,它在漢字信息的顯示方面着實給中國用戶帶來很多麻煩,筆者多年從事ORACLE數據庫管理,常常收到周圍用戶和外地用戶反映有關ORACLE數據庫漢字顯示問題的求援信,主要現象是把漢字顯示爲不可識別的亂碼,形成原來大量信息沒法使用。本文將就這一問題產生的緣由和解決辦法進行一些探討,供存在這方面問題的用戶朋友參考。 

一、緣由分析 

經過對用戶反映狀況的分析,發現字符集的設置不當是影響ORACLE數據庫漢字顯示的關鍵問題。那麼字符集是怎麼一會事呢?字符集是ORACLE 爲適應不一樣語言文字顯示而設定的。用於漢字顯示的字符集主要有ZHS16CGB231280,US7ASCII,WE8ISO8859P1等。字符集不只需在服務器端存在,並且客戶端也必須有字符集註冊。服務器端,字符集是在安裝ORACLE時指定的,字符集登記信息存儲在ORACLE數據庫字典的V$NLS_PARAMETERS表中;客戶端,字符集分兩種狀況,一種狀況是sql*net 2.0如下版本,字符集是在windows的系統目錄下的oracle.ini文件中登記的;另外一種狀況是sql*net 2.0以上(即32位)版本,字符集是在windows的系統註冊表中登記的。要在客戶端正確顯示ORACLE 數據庫漢字信息,首先必須使服務器端的字符集與客戶端的字符集一致;其次是加載到ORACLE數據庫的數據字符集必須與服務器指定字符集一致。所以,把用戶存在的問題概括分類,產生漢字顯示異常的緣由大體有如下幾種: 

1. 1服務器指定字符集與客戶字符集不一樣,而與加載數據字符集一致。 

這種狀況是最多見的,只要把客戶端的字符集設置正確便可,解決辦法見2.1。 

1. 2服務器指定字符集與客戶字符集相同,與加載數據字符集不一致。 

這類問題通常發生在ORACLE版本升級或從新安裝系統時選擇了與原來服務器端不一樣的字符集,而恢復加載的備份數據還是按原字符集卸出的場合,以及加載從其它使用不一樣字符集的ORACLE數據庫卸出的數據的狀況。這兩種狀況中,無論服務器端和客戶端字符集是否一致都沒法顯示漢字。解決辦法見2.2。 

1.3服務器指定字符集與客戶字符集不一樣,與輸入數據字符集不一致。 

這種狀況是在客戶端與服務器端字符集不一致時,從客戶端輸入了漢字信息。輸入的這些信息即使是把客戶端字符集更改正確,也沒法顯示漢字。解決辦法見2.3。 

2.解決辦法 

下面將分別對上述三種狀況給出解決辦法。爲了敘述方便,假設客戶端使用WINDOWS95/98環境,並已成功地配置了TCP/IP協議,安裝了ORACLE的sql*net,sql*pluse產品。 

2.1 設置客戶端字符集與服務器端字符集一致 

假設當前服務器端使用US7ASCII字符集。 

(1)查看服務器端字符集 

經過客戶端或服務器端的sql*plus登陸ORACLE的一個合法用戶,執行下列SQL語句:

SQL > select * from V$NLS_PARAMETERS 
parameter value
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
…. ….
NLS_CHARACTERSET US7ASCII
NLS_SORT BINARY
NLS_NCHAR_CHARACTERSET US7ASCII

從上述列表信息中可看出服務器端ORACLE數據庫的字符集爲'US7ASCII'。 

(2)按照服務器端字符集對客戶端進行配置 

配置方法有兩種:安裝ORACLE的客戶端軟件時指定---- 在安裝ORACLE的客戶端產品軟件時,選擇與ORACLE服務端一致的字符集(本例爲US7ASCII)便可。修改註冊信息的方法---- 根據ORACLE 客戶端所選sql*net 的版本分爲下列兩種狀況: 

a. 客戶端爲 sql*net 2.0 如下版本 

進入Windows的系統目錄,編輯oracle.ini文件,用US7ASCII替換原字符集,從新啓動計算機,設置生效。 

b. 客戶端爲 sql*net 2.0 以上版本 

在WIN98 下 運 行REGEDIT,第一步選HKEY_LOCAL_MACHINE,第二步選擇SOFTWARE, 第三步選擇 ORACLE, 第四步選擇 NLS_LANG, 鍵 入 與服 務 器端 相 同 的 字 符 集(本例爲:AMERICAN_AMERICAN.US7ASCII)。 

2.2 強制加載數據字符集與服務器端字符集一致 

假設要加載數據從原ORACLE數據庫卸出時的字符集爲US7ASCII,當前ORACLE服務器字符集爲WE8ISO8859P1。 

下面提供三種解決方法: 

(1) 服務器端從新安裝ORACLE 

在從新安裝ORACLE 時選擇與原卸出數據一致的字符集(本例爲US7ASCII)。 

加載原卸出的數據。 

這種狀況僅僅使用於空庫和具備同一種字符集的數據。 

(2)強行修改服務器端ORACLE當前字符集 

在用imp命令加載數據前,先在客戶端用sql*plus登陸system DBA用戶,執行下列SQL語句進行當前ORACLE數據庫字符集修改: ZHS16GBK US7ASCII

SQL > create database character set ZHS16GBK;
* create database character set ZHS16GBK
ERROR at line 1:
ORA-01031: insufficient privileges


你會發現語句執行過程當中,出現上述錯誤提示信息,此時不用理會,實際上ORACLE數據庫的字符集已被強行修改成ZHS16GBK,接着用imp命令裝載數據。等數據裝載完成之後,shutdown 數據庫,再startup 數據庫,用合法用戶登陸ORACLE數據庫,在sql>命令提示符下,運行select * from V$NLS_PARAMETERS,能夠看到ORACLE數據庫字符集已復原,這時再查看有漢字字符數據的表時,漢字已能被正確顯示。 

(3)利用數據格式轉儲,避開字符集限制 

這種方法主要用於加載外來ORACLE數據庫的不一樣字符集數據。其方法以下: 

先將數據加載到具備相同字符集的服務器上,而後用轉換工具卸出爲foxbase 格式或access格式數據庫,再用轉換工具轉入到不一樣字符集的ORACLE數據庫中,這樣就避免了ORACLE字符集的困擾。目前數據庫格式轉換的工具不少,象power builder5.0以上版本提供的pipeline,Microsoft Access數據庫提供的數據導入/導出功能等。轉換方法參見有關資料說明。. 

2.3匹配字符集替換漢字 

對於1.3提到的狀況,沒有很好的辦法,只能先把客戶端與服務器端字符集匹配一致後,根據原輸入漢字的特徵碼替換漢字字符部分html

相關文章
相關標籤/搜索