Oracle數(shù)據(jù)庫(kù)進(jìn)行企業(yè)開(kāi)發(fā)方案之錯(cuò)誤排查
以下的文章主要是介紹使用Oracle數(shù)據(jù)庫(kù)進(jìn)行相關(guān)的企業(yè)開(kāi)發(fā)的方案,即,錯(cuò)誤排查的實(shí)際應(yīng)用 ,以及字符集問(wèn)題的實(shí)際操作, 以下就是相關(guān)內(nèi)容的具體描述,希望會(huì)給你帶來(lái)一些幫助在此方面。
錯(cuò)誤排查
程序?qū)懚嗔?,難免會(huì)出錯(cuò),Oracle數(shù)據(jù)庫(kù)也不例外。出錯(cuò)并不可怕,只要及時(shí)找到出錯(cuò)的解決方案就可以了。
在上面已經(jīng)提起過(guò)記錄OracleSQL語(yǔ)句的一些做法,當(dāng)把SQL運(yùn)行的時(shí)候,Oracle數(shù)據(jù)庫(kù)一般會(huì)報(bào)一個(gè)ora錯(cuò)誤,如ora-00600這樣的方式,并給出一個(gè)簡(jiǎn)短的說(shuō)明,但是說(shuō)明的文字都不會(huì)太細(xì)致。
如何根據(jù)這個(gè)蛛絲馬跡找到問(wèn)題的所在呢?如果你的數(shù)據(jù)庫(kù)服務(wù)器位于unix或linux服務(wù)器上,你需要telnet登錄服務(wù)器,系統(tǒng)提供了一個(gè)oerr的命令行工具,可以方便的查出錯(cuò)誤的具體含義,如 oerr ora 600這種樣式。如果你的Oracle數(shù)據(jù)庫(kù)服務(wù)器位于Windows服務(wù)器,那么沒(méi)有這樣的工具,只能查看幫助文檔了。
雖然用oerr工具可以看到錯(cuò)誤的詳情,但是經(jīng)過(guò)一段時(shí)間的試用后就會(huì)發(fā)現(xiàn),其實(shí)它所給出的提示也是相對(duì)簡(jiǎn)單的,有些甚至什么都看不出來(lái),那么這時(shí)就會(huì)用到其它的解決辦法:
1.GOOGLE等搜索引擎
這是一個(gè)非常經(jīng)濟(jì)實(shí)惠的解決方案,并且根據(jù)搜索引擎的強(qiáng)大功能,可以找到很多的相關(guān)資料,說(shuō)不定看到有人和你有同樣的問(wèn)題,下面緊跟著就是解決辦法。
2.Metalink
這是Oracle官方提供的一個(gè)收費(fèi)的網(wǎng)站,用戶可以在上面查找資料(海量資料,信息量非常大),如果實(shí)在查不到解決辦法,還可以提問(wèn),會(huì)有Oracle的專家負(fù)責(zé)來(lái)解答。這是解決Oracle問(wèn)題權(quán)威的地方,但是缺點(diǎn)就是如果你沒(méi)有賬號(hào)的話,就等于零了。
對(duì)于有些實(shí)在看不懂的錯(cuò)誤提示,也可以請(qǐng)DBA協(xié)助,因?yàn)橛行╁e(cuò)誤提示表面上看是SQL的問(wèn)題,但是實(shí)際上可能是數(shù)據(jù)庫(kù)本身引起的。如果你從錯(cuò)誤信息中可以直接看到“不能擴(kuò)展”、“表空間已滿”或“回滾段過(guò)舊”等顯然和OracleSQL無(wú)關(guān)的錯(cuò)誤,就可以直接去尋求DBA的幫助了。
如果您正在部署一個(gè)BS結(jié)構(gòu)的系統(tǒng),很有可能會(huì)發(fā)現(xiàn),使用客戶端工具連接的時(shí)候,與服務(wù)器連接一切正常,可就是WEB程序無(wú)法連接Oracle數(shù)據(jù)庫(kù),并且報(bào)告 “OCI需要8.1.7或以上版本”這個(gè)錯(cuò)誤。這是個(gè)比較“曖昧”的錯(cuò)誤信息,很顯然我們現(xiàn)在所裝的客戶端都滿足它的要求,那到底是哪里的問(wèn)題呢?問(wèn)題就在于需要給Oracle的ora92目錄賦一個(gè)權(quán)限,如下圖:
如果你嘗試做這個(gè)授權(quán)的時(shí)候,你會(huì)發(fā)現(xiàn),這個(gè)用戶已經(jīng)存在,并且已經(jīng)授權(quán)成功!但是為什么還不行呢?這里需要一個(gè)技巧,先把“讀取和運(yùn)行”這個(gè)對(duì)勾去掉,再選中,然后“確定”,也就是重新做一次賦權(quán),就可以了。根據(jù)機(jī)器的性能,可能要稍等幾秒鐘或幾分鐘。
經(jīng)過(guò)上面的折騰一般就行了。如果還不能正常訪問(wèn),那么請(qǐng)重新啟動(dòng)WEB服務(wù)器(不是數(shù)據(jù)庫(kù)服務(wù)器),這個(gè)問(wèn)題肯定就能解決了。
對(duì)于Oracle10g,沒(méi)有這個(gè)目錄,我的做法就是把Oracle整個(gè)安裝目錄全做一下這個(gè)授權(quán),就沒(méi)有問(wèn)題了。
字符集問(wèn)題
如果Oracle數(shù)據(jù)庫(kù)服務(wù)器是裝在中文環(huán)境下,客戶端也是在中文環(huán)境下運(yùn)行,那么這一部分基本就不用看了。但是如果安裝情況比較復(fù)雜,特別是服務(wù)器需要支持多語(yǔ)言及多字符集的時(shí)候,客戶端如何配合就成了一個(gè)問(wèn)題。
要想知道客戶端怎么配置,就需要知道服務(wù)器端是按什么標(biāo)準(zhǔn)來(lái)安排的,可以通過(guò)以下OracleSQL來(lái)查詢:
- select * from database_properties
其中NLS_CHARACTERSET指的就是服務(wù)器端的字符集,比如服務(wù)器上查出來(lái)的結(jié)果是ZHS16GBK,那么客戶端就需要按這個(gè)標(biāo)準(zhǔn)來(lái)配置。對(duì)于我們開(kāi)發(fā)人員來(lái)說(shuō),客戶端一般是Windows平臺(tái),這個(gè)配置需要在注冊(cè)表中修改,注冊(cè)表的路徑為:我的電腦\HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0\NLS_LANG
比如我的機(jī)器這個(gè)鍵值就是SIMPLIFIED CHINESE_CHINA.ZHS16GBK(注意保留空格),表示簡(jiǎn)體中文的中文字符集。從字符集上看,目前服務(wù)器與客戶端是匹配的,字符集匹配,查詢出來(lái)的內(nèi)容就不會(huì)是亂碼了,否則你將看到很多不愿意看到的文字。
一般為了實(shí)現(xiàn)多語(yǔ)言支持,字符集都設(shè)成UTF8,這樣可以支持多種文字了。如果服務(wù)器端與客戶端字符集不一致,一般會(huì)出問(wèn)題,但是問(wèn)題主要都在顯示上面,不會(huì)對(duì)系統(tǒng)有太多的影響,比如俄羅斯錄入了當(dāng)?shù)卣Z(yǔ)言的名字,在中文系統(tǒng)下有可能就顯示不出來(lái)。
Oracle一共支持多少的字符集呢,我沒(méi)有數(shù)過(guò),如果ZHS16GBK不行,換UTF8試一下,說(shuō)不定就行了。也有個(gè)例外,早期的Oracle有些版本只支持西歐字符集,那是一個(gè)單字節(jié)的字符集,字節(jié)的高位是空的。
這個(gè)字符集與ZHS16GBK是不兼容的,這時(shí)就要把客戶端同樣設(shè)成西歐字符集才可以。字符集之間有包容關(guān)系,只要符合這個(gè)包容關(guān)系,兩端設(shè)的不一樣也沒(méi)有關(guān)系,比如ZHS16GBK和UTF8之間就是包容的。
以上的相關(guān)內(nèi)容就是對(duì)使用Oracle數(shù)據(jù)庫(kù)進(jìn)行企業(yè)開(kāi)發(fā)的方案的介紹,望你能有所收獲。
【編輯推薦】