ORA-00600: 內部錯誤程式碼, 引數: [qcisSetPlsqlCtx:tzi init]

abstractcyj發表於2018-04-04
最近在客戶的開發環境上遇到一個奇怪的問題, 啟動之後,alert日誌中經常出現類似如下的日誌資訊:

Errors in file e:\app\administrator\diag\rdbms\hydeezyg\hydeezyg\trace\hydeezyg_ora_9064.trc  (incident=1):
ORA-00600: 內部錯誤程式碼, 引數: [qcisSetPlsqlCtx:tzi init], [], [], [], [], [], [], [], [], [], [], []
Errors in file e:\app\administrator\diag\rdbms\hydeezyg\hydeezyg\trace\hydeezyg_ora_9064.trc:
ORA-00600: 內部錯誤程式碼, 引數: [qcisSetPlsqlCtx:tzi init], [], [], [], [], [], [], [], [], [], [], []

在前端登入時也提示:
ORA-01804: 時區資訊無法初始化。

問題出現背景:
1. 客戶的測試,開發環境的資料庫在同一個資料庫伺服器上,某一天,客戶重灌了作業系統(資料檔案,控制檔案,引數檔案等都在磁碟上,並未丟失)
2. 作業系統重灌完成之後,我們的售後找我把庫拉起來.
3. 我以為開發環境安裝的資料庫軟體是11.2.0.4的版本,安裝11.2.0.4之後嘗試啟動資料庫,提示要startup upgrade
   這時我才意識到客戶的資料庫是11.2.0.1的版本
4. 解除安裝11.2.0.4, 重灌11.2.0.1, 其中的一個庫OPEN之後並無問題,另外一個庫提示ORA-00600 qcisSetPlsqlCtx:tzi init]

檢查, 搜尋MOS, 看到了一篇文件:
ORA-600 [qcisSetPlsqlCtx:tzi init] after Database Restart (文件 ID 362036.1)

A) Oracle version 11.2 and higher: 

A.1) check if the required DSt patch is applied/available in the $ORACLE_HOME 

In 11.2 there are no timezlrg.dat and timezone.dat, this is normal and intended. 
please do NOT make any symbolic links for timezlrg.dat and timezone.dat or copy any of the files in \oracore\zoneinfo\ and rename them to timezlrg.dat and timezone.dat 
in 11.2 there should be NO timezlrg.dat and timezone.dat in $ORACLE_HOME/oracore/zoneinfo/  (unix) or %ORACLE_HOME%\oracore\zoneinfo\ (windows) 

Oracle 11.2.0.1 has by default all RDBMS DST updates from DSTv1 to DSTv11 included in the software installation. 
Oracle 11.2.0.2 through 11.2.0.4 has by default all RDBMS DST updates from DSTv1 to DSTv14 included in the software installation. 
Oracle 12.1.0.1 and 12.1.0.2 has by default all RDBMS DST updates from DSTv1 to DSTv18 included in the software installation. 

These files are found in $ORACLE_HOME/oracore/zoneinfo and have a prefix indicating the DST version. 
For example timezlrg_4.dat is the DSTv4 "large" file, timezlrg_11.dat is the DSTv11 "large" file. 

connect and check: 

select NAME, VALUE$ from SYS.PROPS$ where NAME like ('DST_%_TT_VERSION'); 

DST_SECONDARY_TT_VERSION -> should normally be 0 , if this has a value then also check if it is applied 
DST_PRIMARY_TT_VERSION -> required TZ file 

if DST_PRIMARY_TT_VERSION  is for example "16" then check if 

 $ORACLE_HOME/oracore/zoneinfo or %ORACLE_HOME%\oracore\zoneinfo 

* contains timezone_16.dat and timezlrg_16.dat if not then apply the missing DSTv16 patch 
* the files are readable for the ORACLE OS user , if not adjust permissions 

NOTE: this does not means you always need to apply DSTV16, the needed patch is depending on the version found by the select. 
List of all DST patch numbers: Note 412160.1 "Updated DST transitions and new Time Zones in Oracle Time Zone File patches" / H) Overview of what DST version is by default used / included in what Oracle RDBMS version and all DST patch numbers 

Again do NOT create yourself any timezlrg.dat and timezone.dat files or links.

其中提到了timezone的時區資訊必須有時區檔案資訊一一對應

檢查了一下, 以下是輸出資訊:

SQL> col name format a30
SQL> col value$ format a10
SQL> select NAME, VALUE$ from SYS.PROPS$ where NAME like ('DST_%_TT_VERSION');

NAME                           VALUE$
------------------------------ ----------
DST_PRIMARY_TT_VERSION         14
DST_SECONDARY_TT_VERSION       0

這樣,就必須有時區資訊檔案
E:\app\Administrator\product\11.2.0\dbhome_1\oracore\zoneinfo\timezlrg_14.dat
E:\app\Administrator\product\11.2.0\dbhome_1\oracore\zoneinfo\timezone_14.dat
對應

檢查安裝目錄之後,果然沒有這兩個檔案。
從舊的安裝目錄拷貝至新的目錄之後,重新啟動,就再未出現這個問題








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

相關文章