處理的兩個圖省事才出來的問題,喜歡copy ORACLE_HOME的人應該看看

buptdream發表於2009-01-05
案例1
關鍵詞:複製導致檔案許可權變化


環境 9i  具體版本忘了
solaris 9

源於一次故障診斷
第一天上午:接到電話說oracle 報錯
執行批量插入的過程或報表程式報錯:
SQL> BEGIN brpt_get_daily_report_p; END;
*
ERROR 位於第 1 行:
ORA-00604: 遞迴 SQL 層 1 出現錯誤
ORA-01115: 從檔案 1 讀取塊時出現 IO 錯誤 (塊 # 28738)
ORA-01110: 資料檔案 1: '/dev/md/billds/rdsk/d301'
ORA-27091: skgfqio: 無法進行 I/O 操作
ORA-27072: skgfdisp: I/O 錯誤
SVR4 Error: 12: Not enough space
Additional information: 28737
ORA-06508: PL/SQL: 無法在呼叫之前找到程式單元
ORA-06512: 在"UNITELE.BRPT_GET_DAILY_REPORT_P", line 87
ORA-06512: 在line 1

alert log有大量類似:
Additional information: 15497
ORA-01115: IO error reading block from file 93 (block # 62842)
ORA-01110: data file 93: '/dev/md/billds/rdsk/d84'
ORA-27091: skgfqio: unable to queue I/O
ORA-27072: skgfdisp: I/O error
SVR4 Error: 12: Not enough space
Additional information: 62841
Fri Mar 14 07:31:07 2008
Errors in file /arraybill/oracle/admin/orabill/udump/orabill_ora_28779.trc:
ORA-00600: internal error code, arguments: [kdtdelrow-2], [63], [63], [], [], [], [], []
ORA-01115: IO error reading block from file 556 (block # 94232)
ORA-01110: data file 556: '/dev/md/billds/rdsk/d679'
ORA-27091: skgfqio: unable to queue I/O
ORA-27072: skgfdisp: I/O error
SVR4 Error: 12: Not enough space
Additional information: 94231
Fri Mar 14 07:31:40 2008
Errors in file /arraybill/oracle/admin/orabill/udump/orabill_ora_29096.trc:
ORA-00604: 遞迴 SQL 層 1 出現錯誤
ORA-01115: 從檔案 265 讀取塊時出現 IO 錯誤 (塊 # 114425)
ORA-01110: 資料檔案 265: '/dev/md/billds/rdsk/d259'
ORA-27091: skgfqio: 無法進行 I/O 操作
ORA-27072: skgfdisp: I/O 錯誤
SVR4 Error: 12: Not enough space
Additional information: 114424
ORA-06512: 在line 3
Fri Mar 14 07:49:28 2008

經過詢問和檢查,在中午之前排除了作業系統、硬體和空間問題的可能性。
下午把問題方向 瞄準了bug:
Bug 4439465 - OERI [kdtdelrow-2] / ORA-604 from BULK inserts 被排除,懷疑ora-600的錯誤只是表象,是由其他問題引起的,所以放棄了根據ora-600找問題。
Bug 6370741引起了注意:
Bug 4439465 - OERI [kdtdelrow-2] / ORA-604 from BULK inserts
Experiencing the errors as follows: .
ORA-01115: IO error reading block from file 18 (block # 2613966)
ORA-01110: data file 18: '/dev/vx/rdsk/bre25knet01_vg05/spo_smstg202'
ORA-27091: skgfqio: unable to queue I/O
ORA-27072: skgfdisp: I/O error
SVR4 Error: 12: Not enough space
Additional information: 2613965 .
Unsetting SGA_MAX_SIZE stops the error from occurring.
This is unaccpetable to customer as without setting the parameter they experience ORA-4031 errors.

但是使用者拒絕接受sga_max_size會引起問題,一定要有理由,並且該bug並沒有正式宣告(很可能不是bug)
下午拿到了vpn帳號,遠端登入上去,在alert log中又看到了一些可疑的東西:
Tue Mar 11 23:33:14 2008
WARNING: -------------------------------
WARNING: oradism not set up correctly.
Dynamic ISM can not be locked. Please
setup oradism, or unset sga_max_size.
[diagnostic 0, 16, 1001]
----------------------------------------

這是在上次修改之後啟動DB的時候得warning,(因為錯誤多,給我發過來的錯誤資訊裡沒有包含這些資訊,只有4天左右的)
根據這個資訊找到:
Note:338751.1 Database Crashed Due to ORA-600 [ksfd_odmgo1] and Ora-17500
Symptoms
Database doesn't open because of:

ORA-00600: internal error code, arguments: [ksfd_odmgo1], [4294967274], [0xFFFFFFFF7FFF85A8],
..
Fri Sep 30 08:10:41 2005
Errors in file /oracle/ew01/ewt1/admin/bdump/ewt11_p002_16730.trc:
ORA-01115: IO error reading block from file 8 (block # 45354)
ORA-01110: data file 8: '/dbf/ew01/dba01/ewt1/ppvd.001'
ORA-17500: ODM err:ODM ERROR V-41-4-12 Not enough space
ORA-10388: parallel query server interrupt (failure)

Alert.log also shows:
WARNING: -------------------------------
WARNING: oradism not set up correctly.
Dynamic ISM can not be locked.


Cause
ORADISM doesn't have the right permission.

Solution
Shutdown the databases running from this ORACLE_HOME.

chgrp dba $ORACLE_HOME/bin/oradism
As root:
chown root $ORACLE_HOME/bin/oradism
chmod 06550 $ORACLE_HOME/bin/oradism

回憶起來,使用者曾說過這臺oracle的軟體是從其它伺服器copy過來的,於是檢查oradism的許可權,發現確實有問題:
[oracle]> ls -l oradism*
-r-xr-x---   1 oracle   dba        12928 2004   3月 25 oradism
-r-xr-x---   1 oracle   dba        10424 2002   4月 27 oradism.sav

正常情況下,安裝過程最後會用root使用者執行root.sh,這個指令碼有相應的命令會把許可權修改好:
[oracle]> pwd
/arraybill/oracle/product/9205
[oracle]> cat root.sh|grep oradism
if [ -f $ORACLE_HOME/bin/oradism ]; then
        $CHOWN root $ORACLE_HOME/bin/oradism
        $CHMOD 06550 $ORACLE_HOME/bin/oradism

原因可能是在copy的過程中,檔案的許可權發生了改變,或者整個$ORACLE_HOME被特意修改為oracle:dba了。
所以:一直以來DISM都是有問題的,但是因為sga_max_size一直以來是default,問題也就沒有顯現出來。
直道前兩天有人增加shared pool的時候alter system 給sga_max_size設定了一個值
問題才顯明出來。

第二天晚上,客戶申請到了停機,讓前方人員執行$ORACLE_HOME/root.sh但是因為copy過來目錄不同,所以執行報錯。
於是只好把root.sh裡的
$CHOWN root $ORACLE_HOME/bin/oradism
$CHMOD 06550 $ORACLE_HOME/bin/oradism

單獨執行了,經測試問題已經解決。


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

相關文章