在資料庫伺服器端養成設定NLS_LANG和NLS_DATE_FORMAT環境變數的習慣

尛樣兒發表於2011-12-17

        今日凌晨3點左右同事打來電話說,他們在將一個單機版AIX平臺的Oracle資料庫遷移到相同平臺相同版本的RAC資料庫的時候,業務資料所有的中文變成了"?"號。遷移的方法是透過RMAN備份恢復。再查詢原有的資料庫所有中文也變成了"?"號。這就奇了怪了。遷移之前都還好好的咋就出了問題喃!
        首先能夠確認的是原有資料庫沒動過,那麼資料檔案中的內容肯定沒被破壞,也就是說出現亂碼問題可能是配置上的問題。於是我第一反應想到了之前碰到過單例項資料庫遷移到叢集資料庫日期處理上會有報錯的情況,需要在節點伺服器的oracle使用者下的環境變數中新增NLS_DATE_FORMAT的設定(請參考文章:http://space.itpub.net/23135684/viewspace-628044)。那麼,對應字符集的環境變數就是NLS_LANG,讓同事查了下在伺服器端是否有設定NLS_LANG環境變數,同事說新、舊環境都未設定。於是讓他們在環境中手動設定了該環境變數,反饋說老環境中文顯示恢復正常了,但新RAC依然是"?"號,猜想應該在使用RMAN恢復資料之前應該先設定好NLS_LANG環境變數,避免有轉碼的情況出現。讓同事先在新環境中設定好NLS_LANG環境變數,再嘗試使用RMAN進行恢復,剛確認這樣操作之後資料就顯示正常了。
        由以上這個案例,可以看出在資料庫伺服器端設定與資料庫內部相同的NLS_LANG和應用系統中常用的NLS_DATE_FORMAT格式是非常重要的,在執行RMAN備份恢復的時候也要求先設定好這兩個環境變數。在我們的安裝、配置文件中加入這兩個環境變數的設定,避免出現類似問題。養成好的習慣是我們能夠正常下班的保障!

LANG和NLS_LANG的區別請參考文章:
http://space.itpub.net/23135684/viewspace-627431

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23135684/viewspace-713507/,如需轉載,請註明出處,否則將追究法律責任。

相關文章