天天看點

在VMware上的FC7中安裝Oracle10g

安裝Oracle10g: 這兩天在我的VMware6.0下成功安裝了Fedora7,然後在上面又成功安裝了Oracle10g。當然,參考了很多網上資料。在FC7中安裝Oracle10g,大緻分為:下載下傳缺少庫;建立安裝使用者;建立安裝目錄;修改全局配置檔案;安裝等幾個步驟,具體方法我在這裡就不累述了,有興趣的可參考我的同學暴民的 部落格。

我隻是補充幾點:

安裝時用的是oracle使用者,如果用root登入時,也應該設定環境變量(具體方法見安裝過程)。

可以将/opt/oracle/product/oracle10.1.0/db_1/bin這個加到PATH變量中。

在root使用者時要用sqlplus sys/密碼 as sysdba形式連接配接,不可用sqlplus / as sysdba連接配接(在oracle使用者下可以)。 亂碼問題及Oracle的NLS: 用sqlplus連接配接oracle時,可能會遇到亂碼問題,在網上也找了些資料,并且參考了Oracle的文檔,将自己了解到的内容,在此總結一下。 Oracle為了支援國際化,設計了NLS(National Language Support)系統。NLS包括的内容較多,在這裡隻介紹一下其中重要的一個方面----字元集(Character Set)。通過設定資料庫及用戶端所使用的字元集,可以使資料庫系統支援世界上現有的大部分文字字元的存儲、提取和顯示等。 在Oracle資料庫系統中,分為用戶端和伺服器端。 伺服器端主要指資料庫,我們建立資料庫時就要指定它所使用的字元集(Database Character set)。這樣,在資料庫中涉及到的字元都是以指定的字元集編碼方式來進行編碼的。 資料庫中涉及字元的地方有: 資料庫對象(表、列、視圖、索引等)名稱,PL/SQL中的變量名,CHAR、VARCHAR、VARCHAR2等資料類型,LP/SQL源程式等。資料庫字元集會影響這些内容在資料庫中的存儲編碼方式。對于其它的非字元類型,字元集不會産生影響。 而用戶端(主要指我們的應用程式,例如sqlplus),也要設定字元集,以使Oracle知道:①從用戶端發來的字元資料如何存儲到資料庫中;②如何将資料從資料庫中提取出來發送給用戶端。 如果用戶端和資料庫的字元集設定的不一緻,Oracle會對傳送的字元資料進行相應的轉換。這樣,一方面會造成系統性能的下降,另一方面也有可能造成字元資料的丢失。是以,盡量要使用戶端的字元集和資料庫的一樣。如果不一樣,也至少要保證資料庫的字元集是用戶端字元集的超集,這樣才不會造成字元轉換的丢失。舉例來說,一般可以将資料庫的字元集設定為Unicode字元集,如UTF8,這樣基本上可以處理任何用戶端傳過來的字元(不管是英文、中文還是其它文字)。 另外要注意的是,資料庫的字元集是在建立時設定的,一般不能再修改(如果要修改會繁瑣一些); 用戶端的字元集,在Windows系統中是在系統資料庫中設定的,(HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/KEY_OraClient10g_home1中的NLS_LANG鍵,一般中文Windows系統的鍵值是“SIMPLIFIED CHINESE_CHINA.ZHS16GBK”);而在Linux系統中是通過設定NLS_LANG環境變量(export NLS_LANG=SIMPLIFIED CHINESE_CHINA.UTF8)來實作。當用戶端程式運作時,會讀取系統資料庫或環境變量來設定其字元集。 但據我的體會,當我們在Windows的CMD方式下和Linux的SHELL方式下運作SQLPLUS還要注意終端的編碼方式。請見下面的示意圖: 作業系統終端 (CMD 、 SHELL) 字元集 <-> 用戶端字元集 (SQL*PLUS 字元集 )<-> 資料庫字元集 我了解,當我們在終端上寫入資料時,終端上的字元要先轉換為用戶端字元集的字元(但是,好像終端和SQLPLUS都不負責這事),然後Oracle再将用戶端傳來的資料轉化為資料庫的字元集字元存儲起來;查詢就是一個相反的過程。是以一般情況下,前兩者的字元編碼要保持一緻,不然輸入的字元就不能正确轉換。即SHELL用UTF-8編碼,SQLPLUS也要用UTF8編碼,不然後在更新、插入和查詢顯示資料時就會發生亂碼的情況。後二者的轉換是由Oracle來負責的,不用擔心,隻要保證用戶端的字元集是資料庫字元集的子集即可。 一般三者可設定如下: Windows:ZHS16GBK->ZHS16GBK->AL32UTF8 Linux:UTF-8->AL32UTF8->AL32UTF8 這就可保證正确顯示中文和英文而不發生亂碼。用戶端和資料庫字元集的設定方法在前面已經說過了。終端字元集的設定在Windows的CMD下一般不用設,Linux的終端有編碼菜單可用。 當然如果你不在終端運作sqlplus這樣的互動式的用戶端程式,那就隻涉及到用戶端和資料庫字元集之間的問題,而不用關心三者之間的轉換關系。 補充一點有關Unicode的内容: Unicode是為了在計算機中統一各國的字元編碼方式而制定的國際标準字元編碼。随着标準的不斷更新,它的版本也是在不斷的改進。主要有UTF-8,UTF-16,UCS-2等編碼方式。 UTF-8:ASCII碼等歐美字元用1-2位元組表示,用3個字元表示亞洲(如漢字)等字元,用4個位元組表示擴充字元; UCS-2:用固定的2 個位元組長度表示各種字元,它不支援擴充字元; UTF-16:是在UCS-2的基礎上用4個位元組表示一個擴充字元。 下表是三種編碼方式(16進制)的舉例:

在VMware上的FC7中安裝Oracle10g

Oracle10g支援以下幾種Unicode的資料庫字元集: AL32UTF8:支援以UTF-8編碼的最新Unicode标準碼; UTF8:支援以UTF-8編碼的Unicode碼; UTFE:支援以UTF-EBCDIC編碼(這種Unicode編碼方式類似于UTF-8,不同的隻是用2個4位元組表示擴充字元)的Unicode碼。 另外AL16UTF16支援用UTF-16編碼的Unicode碼,但是它用于Oracle的NCHAR這樣的資料類型(這裡就不再詳細讨論)。 有關Oracle的NLS更進階、更詳細的參考請閱讀Oracle文檔。