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