1. 程式人生 > >oracle-rdbms-server-11gR2-preinstall 的一個BUG解決

oracle-rdbms-server-11gR2-preinstall 的一個BUG解決

Oracle提供了一個非常方便的修改核心引數的RPM包,的確省了不少麻煩,特別是指令碼化以後只需要

cd /etc/yum.repo.d/

yum -y install oracle-rdbms-server-11gR2-preinstall

即可,特別需要注意的是11gR2 11.2.0.1版本需要i686的安裝包

libaio-0.3.107-10.1.ky3.i686.rpm

libaio-devel-0.3.107-10.1.ky3.i686.rpm

11.2.0.2以後據說就不需要了。

在12月的時候按照以上步驟確認能正常修改核心引數,但是這個月再執行後,發現orakenerl.log裡有錯誤,Failed to copy /etc/sysctl.conf to /var/log/oracle-rdbms-server-11gR2-preinstall//backup/ 1月-03-2013-15-09-13

從錯誤資訊來看,原因應該就是1月-03-2013-15-09-13 前面有個空格,不能作為目錄名,要找到根本原因得找到對應的程式碼,於是

開啟/usr/bin/oracle-rdbms-server-11gR2-preinstall-verify檔案,找到BACKUPDIR的地方,

BACKUPDIR=/var/log/oracle-rdbms-server-11gR2-preinstall/backup/`date "+%b-%d-%Y-%H-%M-%S"`

原來是因為日期格式化的時候採用的是語言相關的%b,對於中文來說是兩個位元組,而一月的1是一個位元組,前面就用空格補齊了,所以就造成了這個BUG,

難道Oracle的開發者沒有在非英文環境下做過測試?抑或是測試的時候是10-12月?

知道原因修正方法就比較簡單了,大致有兩種方法:

第一種:%b改成%B 這樣輸出是“一月”,就不會有問題了

第二種:換語言,執行之前設定一下環境變數EXPORT LANG=en_US.UTF8,這樣輸出就是"Jan"

以上這個問題花了我半天的時間,剛開始懷疑是不是虛擬機器問題,是不是安裝包問題,走了很多彎路,希望對大家有幫助。