劉文娟
【摘 要】Oracle數據庫系統是數據存儲和管理的基礎框架結構,它以高超的集群技術、安全性能、系統管理性能而廣泛應用于多個領域。然而,在Oracle數據庫系統應用過程中字符集轉換問題往往成為用戶不可避免的一大困擾,對此,本文將立足于Oracles數據庫系統的應用現狀,對Oracle數據庫系統的字符集轉換問題進行分析。
【關鍵詞】Oracle數據庫系統;字符集轉換;問題分析
0 前言
Oracle數據庫是當前應用最為廣泛的關系數據庫管理系統。對解決數據庫問題可以做到高效、安全、可靠。
1 Oracle數據庫系統相關綜合概述
1.1 Oracle數據庫系統存儲結構
Oracle數據庫系統是由美國軟件公司研發的一款以分布式數據庫為核心依據的軟件產品,Oracle數據庫系統既可以作為通用數據庫系統進行數據管理工作,也可以作為關系數據庫進行產品完備關系的相關工作。Oracle數據庫系統功能強大,在計算機領域有著廣泛的應用市場,而且能夠高效、便捷的處理相關數據庫問題,其中,令Oracle數據庫系統受到普遍歡迎的另一個因素是Oracle數據庫系統雖然編寫復雜,但是學習掌握相關的Oracle數據庫系統知識只需要在科學理論概念的指導下,選用任意一種計算機類型進行練習就可以完成。Oracle數據庫系統的新架構中還引入了“云”的使用,在數據庫云的強大的存儲計算功能支撐下,Oracle數據庫系統的靈活性和資源使用性得到了進一步的提升,到目前為止,Oracle數據庫系統已經可以獨自完成數據庫資源整合、解壓以及分層等工作,使得Oracle數據庫系統成為私有云和公有云進行資源管理和信息部署的另一理想化信息平臺。
1.2 Oracle數據庫字符集概念及相關介紹
Oracle數據庫字符集主要存在兩種形式,一種是國家字符集,即國家支持的Oracle數據庫字符集類型,作用是為了用本國的語言形式對信息進行存儲、處理、查詢檢索等。另一種則是數據庫字符集,數據庫字符集是對全球通用的Oracle數據庫字符集的統稱,通過數據庫字符集的使用,每一個Oracle數據庫用戶都可以將其轉化為個人所熟悉的語言形式與表達方法。相對全球化的數據庫字符集而言,國家字符集的使用字段范圍會受到一定程度的制約,通常而言,一個完整的Oracle數據庫字符集主要有語言、字符比特位數以及標準字符集名稱構成。其中,在UTF-8環境下Oracle數據庫字符集不符合這種格式規定。我國國家標準的字符集標簽為gb18030,其中簡體中文的字符集標簽為EUC-CN,繁體中文的字符集標簽為big5,需要注意的是,除文章所敘述的字符集標簽外,我國的簡體中文與繁體中文字符集標簽還有其他多種表現形式[1]。
2 Oracle數據庫的字符集轉換過程中存在的問題
2.1 服務器與客戶端的存取問題
在數據庫字符集的參數中,charset的任務是負責指定字符集,也是影響字符集導入導出的關進部分。服務器端的字符集如果與客戶端的字符集無法進行正常轉換,則會導致用戶無法讀取相關信息數據。只有在數據庫服務器端字符集、數據庫客戶端字符集與dmp文件的字符集保持一致時才可以保證數據的成功導入和讀取,在服務器端進行字符集設置是做好的字符集設置方案,而且操作起來較為簡單,無須在每一頁的代碼編寫中都進行重復設置。在這之中,字符集的內容、類型以及字符所應用的標簽都可以進行限制編碼,進行服務器字符集設置也可以防止安全漏洞的出現,加強軟件信息的安全性能。客戶端字符集是顯示操作系統所選用的字符集,客戶端的數據庫字符集決定了字符轉換之后的最終顯示形似,在不同的運行環境下,客戶端字符集都需要不同的設置類型,例如,在中文環境下,登錄數據庫就無法讀取相關的英文內容,同樣如果在英文環境下進行登錄,漢字也無法正常讀取。概括而言,設置客戶端字符集就是為了通知數據庫計算機所能接受的字符環境類型,以此幫助Oracle數據庫系統在存儲字符集時按照相關的運行環境進行編碼映射。
2.2 Oracle數據庫出現亂碼
亂碼可以認為是每一個數據庫都不可避免的問題,也是軟件系統中任何一種編程語言都不得不面對的問題。Oracle數據庫系統亂碼中主要遇到的問題是中文顯示亂碼,如今應用的Oracle數據庫系統基本功能已經趨于完善,服務器端的字符集一般都會在系統安裝時就已經確定,并且在以后的應用中基本不會更改。亂碼的表達形式多種多樣,但統一而言就是原本正確的漢字無法顯示出來,用戶在顯示屏上所看到的信息都為雜亂的英文字母或者標點符號,甚至是其他圖形等,在對同一個數據庫進行訪問時,即便訪問的是同一個表中的用戶名也可能出現不一樣的現實。字符集的設置本就是為了滿足射界各國不同文化,不同語言形式的社會群眾而編制的,在漢字的字符集設置中,主要有ZHS16GBK、UTF-8等多種形式。
3 Oracle數據庫系統字符集轉換問題原因分析
3.1 字符集設置不匹配
字符集施舍不匹配一般是指服務器端的Oracle數據庫系統字符集與客戶端的字符集設置問題。眾所周知,字符集設置的兩個位置分別位于服務器端與客戶端。客戶端的字符集與服務器端字符集不匹配是造成Oracle數據庫系統字符集轉換問題的主要原因,在進行數據導入工作時,必須在保證服務器端字符集與客戶端字符集完全一致的情況下才可以將相關數據完成正確導入操作。亂碼就是由于字符集設置不匹配而造成的一個主要現象,值得一提的是,當字符集之間不存在子集、超集等對應關系時,無論應用哪種轉換形式,字符集之間都會出現亂碼。字符集設置不匹配一般包括三種情況,第一種情況是服務器端數據庫字符集與客戶端設置使用的字符集相一致,但是與客戶端NLS_LANG參數設置存在差異,第二種情況是服務器端數據庫字符集與客戶端NLS_LANG參數設置相一致,但是與客戶端字符集存在差異,第三種則是服務器端字符集、客戶端字符集、客戶端NLS_LANG參數設置三者都不相同。其中,第三種情況較為復雜,進行更改設置時也需要進行更為系統性的分析。
3.2 Oracle數據庫的安裝指定字符集更改困難
服務器端的字符集基本是在系統安裝完成后就已經設置完成的,服務器端字符集在設置期間可以指定相應的字符集和國家字符集,但是在確定創建之后往往不能進行更改。客戶端的字符集雖然可以進行調整,卻必須在專業人士的指導下進行操作,還要注意對每一項參數都進行查詢確定,理論上來說,更改客戶端字符集的目的是為了解決Oracle數據庫系統字符集轉換問題,因此,客戶端字符集的更改方向往往是與服務器端字符集趨于一致。由于造成Oracle數據庫系統字符集轉換問題的原因存在很多,基本在完全確定之前,往往都不會更改字符集設置,不僅是因為這需要高水平的專業技能,更為嚴重的是,隨意更改字符集可能會引發更多的亂碼問題。在進行服務器端字符集查詢時V$NLS_PARAMFERS試圖中存放的是數據庫語言環境,這是查詢Oracle數據庫系統服務器端的一個重要依據,在這個語言環境中,軟件系統會設計特定的語言存放形式,其中Oracle數據庫中字符的存放排序、表示樣式以及日期格式都會根據這一環境而自行完整調節工作,在這之中,nls_language表示了中文顯示方式,nls_characterset是字符集的相關設定,另外date、time等是日期時間的格式設置,currency則是中文語言環境中的貨幣格式。查詢Oracle數據庫客戶端的字符集則相對簡單一些,操作人員只需要在Windows平臺下,啟動注冊表中相應的程序就可以進行查詢和基本的設置操作[2]。
3.3 系統存在漏洞
系統漏洞是指應用軟件或者操作系統軟件中在邏輯設計上存在缺陷,從而導致系統被病毒等攻擊控制,從而導致計算機中信息丟失甚至系統遭到破壞的情況。系統漏洞跟隨計算機發展而客觀存在的現實,不會根據電腦型號規格、系統構成、硬件設施等因素而消失。由系統漏洞造成的Oracle數據庫字符集轉換問題可以認為是較為容易解決的一種,但是,由這種形式造成的問題往往會令用戶產生更大的損失。系統漏洞會影響系統及網絡的正常運行,阻止服務器的相關操作命令,當系統出現漏洞后,如果是常見的高危漏洞系統會有與之對應的解決辦法,但是如果系統是由于遭到惡性攻擊而產生漏洞,那么電腦中的信息很有可能更改甚至泄露,更為嚴重的情況下,系統甚至會遭到較為重要的破壞。隨著計算機技術的不斷發展,使用時間日益疊加,由木馬等病毒造成的系統漏洞也在逐漸發生著形式與結構上的改變,被入侵的系統會在用戶沒有察覺的情況下自動執行惡意代碼,從而導致Oracle數據庫字符集轉換問題的發生。
4 Oracle數據庫字符集轉換問題的解決方法
4.1 設置匹配的數據庫字符集
保證服務器端字符集、客戶端字符集以及客戶端NLS_LANG參數設置保持相一致是Oracle數據庫字符集轉換正常運行的關鍵因素之一,因此,想要避免或者解決Oracle數據庫字符集轉換問題,首先要對字符集的運行環境進行查詢和相關更改設置。修改數據庫字符集設置,首先要導出系統中的數據庫數據,在確定數據庫導出完畢后在原系統上建立新的數據庫,然后在將原來的數據庫數據導入,最終完成字符集的轉換操作問題。重新建立數據庫主要是問了更改服務器端的字符集,由于服務器端的字符集只能在數據庫創建過程中進行設置工作,所以應用其他方案基本無法完成服務器端字符集設置的更改操作。需要注意的是,在創建數據庫后修改字符集時需要確定新的字符集要是當前字符集的超集。更改客戶端字符集設置時則需要從修改NLS_LANG參數設定來進行,通過修改函數、環境變量以及初始化文件等方式都可以達到修改客戶端字符集的目的。
4.2 采用統一編碼方案
系統編碼是聯系各平臺之間的重要方式,在編碼工作中,系統編碼有著明確的規定。編碼規格采用二進制方式,全局統一性是統一編碼所遵循的核心原則。統一編碼基本上不可能實現全球統一,但是在一定的區域范圍之內具有較強的實際操作性。Unicode就是針對傳統字符編碼中的應用局限而產生的。它需要融合多種語言環境的特點和處理方式,統一抽象字符集,進而建立全新的編碼方案。
4.3 重新安裝系統
當數據庫受到損壞時,往往數據庫內容的可靠性和正確性都會受到質疑,因此,當數據庫受到問題時,但是在可控范圍之內可以采用恢復子系統的方式進行數據庫管理工作。如果系統問題較大,或者Oracle數據庫系統字符集的轉換問題無法通過常規方式進行解決,也可以選擇重新安裝系統。系統的安裝過程一般都有固定的流程方式,因此在安裝時只需要嚴格遵守安裝步驟盡可以順利完成操作。首先用戶需要選擇安裝的版本,目前的最新版本是Oracle Database 12c,然后創建用戶,根據實際需要修改相關核心參數,然后確定代碼。啟動圖形之后系統會進行一些詢問,用戶可根據個人需要進行選擇,最后會提示腳本,完成相關系統安裝操作。
5 結語
通過對Oracle數據庫系統的存儲結構進行考慮,文章分析了Oracle數據庫字符集轉換問題及原因,并提出了相關應對建議。
【參考文獻】
[1]李丹丹.Oracle數據庫字符集轉換成Unicode產品開發[D].北京交通大學,2014. [2]邢姝.ORACLE數據庫字符集問題及解決方法[J].硅谷,2014,24:129+145.
[責任編輯:王楠]