RAC節點啟動失敗--ASM無法連線

johnchou發表於2021-09-09


近日遇到一個RAC問題,一個節點無法啟動,經過分析後解決,解決過程如下。

11.2.0.3 RAC環境,其中一個節點instance啟動失敗,顯示如下錯誤 

[oracle@exadbmel04 ~]$ crsctl  start res  ora.dbm.db 

 

CRS-2672: Attempting to start 'ora.dbm.db' on 'exadbmel04' 

 

CRS-5017: The resource action "ora.dbm.db start" encountered the following error: 

 

ORA-01078: failure in processing system parameters 

 

ORA-01565: error in identifying file '+DATA_EXA/dbm/spfiledbm.ora' 

 

ORA-17503: ksfdopn:2 Failed to open file +DATA_EXA/dbm/spfiledbm.ora 

 

ORA-27140: attach to post/wait facility failed 

 

ORA-27300: OS system dependent operation:invalid_egid failed with status: 1 

 

ORA-27301: OS failure message: Operation not permitted 

 

ORA-27302: failure occurred at: skgpwinit6 

 

ORA-27303: additional information: startup egid = 1001 (oinstall), current egid = 1002 (dba) 

 

. For details refer to "(:CLSN00107:)" in "/u01/app/11.2.0.3/grid/log/exadbmel04/agent/crsd/oraagent_oracle/oraagent_oracle.log". 

 

CRS-2674: Start of 'ora.dbm.db' on 'exadbmel04' failed 

 

CRS-2679: Attempting to clean 'ora.dbm.db' on 'exadbmel04' 

 

CRS-2681: Clean of 'ora.dbm.db' on 'exadbmel04' succeeded 

 

CRS-2528: Unable to place an instance of 'ora.dbm.db' as all possible servers are occupied by the resource 

 

CRS-4000: Command Start failed, or completed with errors. 

 透過Sqlplus啟動,遇到同樣的錯誤

[oracle@exadbmel04 ~]$ . oraenv 

 

ORACLE_SID = [oracle] ? dbm4 

 

The Oracle base has been set to /u01/app/oracle 

 

[oracle@exadbmel04 ~]$ sqlplus / as sysdba 

  

SQL> startup mount; 

 

ORA-01078: failure in processing system parameters 

 

ORA-01565: error in identifying file '+DATA_EXA/dbm/spfiledbm.ora' 

 

ORA-17503: ksfdopn:2 Failed to open file +DATA_EXA/dbm/spfiledbm.ora 

 

ORA-27140: attach to post/wait facility failed 

 

ORA-27300: OS system dependent operation:invalid_egid failed with status: 1 

 

ORA-27301: OS failure message: Operation not permitted 

 

ORA-27302: failure occurred at: skgpwinit6 

 

ORA-27303: additional information: startup egid = 1001 (oinstall), current egid = 1002 (dba) 

 檢視資源,可以看到ASM的例項都是正常的,包括diskgroup,但是例項exadbmel04未啟動。

[oracle@exadbmel04 ~]$ crsctl status res  -t 

 

-------------------------------------------------------------------------------- 

 

NAME           TARGET  STATE        SERVER                   STATE_DETAILS 

 

-------------------------------------------------------------------------------- 

 

Local Resources 

 

-------------------------------------------------------------------------------- 

 

ora.DATA_EXA.dg 

 

               ONLINE  ONLINE       exadbmel01 

 

               ONLINE  ONLINE       exadbmel03 

 

               ONLINE  ONLINE       exadbmel04 

 

ora.DBFS_DG.dg 

 

               ONLINE  ONLINE       exadbmel01 

 

               ONLINE  ONLINE       exadbmel03 

 

               ONLINE  ONLINE       exadbmel04 

 

ora.LISTENER.lsnr 

 

               ONLINE  ONLINE       exadbmel01 

 

               ONLINE  ONLINE       exadbmel03 

 

               ONLINE  ONLINE       exadbmel04 

 

ora.RECO_EXA.dg 

 

               ONLINE  ONLINE       exadbmel01 

 

               ONLINE  ONLINE       exadbmel03 

 

               ONLINE  ONLINE       exadbmel04 

 

ora.asm 

 

               ONLINE  ONLINE       exadbmel01 

 

               ONLINE  ONLINE       exadbmel03               Started 

 

               ONLINE  ONLINE       exadbmel04               Started 

 

ora.gsd 

 

...... 

 

-------------------------------------------------------------------------------- 

 

Cluster Resources 

 

-------------------------------------------------------------------------------- 

 

...... 

 

ora.dbm.db 

 

      1        ONLINE  ONLINE                               

 

      2        ONLINE  ONLINE                     

 

      3        ONLINE  ONLINE 

 

      4        ONLINE  OFFLINE                     Instance Shutdown 

 

...... 

 

  

透過查詢ORA-27300錯誤,找到問題點。

這個問題是這個檔案 $GI_HOME/bin/oracle 的許可權不對,正確的許可權應該是 "-rwsr-s--x".將許可權修改正確,問題解決。

[oracle@exadbmel04 bin]$cd  $GI_HOME/bin/ 

 

[oracle@exadbmel04 bin]$ ls -al oracle 

 

-rwxr-xr-x 1 oracle oinstall 204170493 Jun 25 20:46 oracle 

 

[oracle@exadbmel04 bin]$ chmod 6751 oracle 

 

[oracle@exadbmel04 bin]$ ls -al oracle 

 

-rwsr-s--x 1 oracle oinstall 204170493 Jun 25 20:46 oracle 

 

啟動例項,正常啟動

[oracle@exadbmel04 ~]$ crsctl  start res  ora.dbm.db 

 

CRS-2672: Attempting to start 'ora.dbm.db' on 'exadbmel04' 

 

CRS-2672: Attempting to start 'ora.dbm.db' on 'exadbmel01' 

 

CRS-2676: Start of 'ora.dbm.db' on 'exadbmel04' succeeded 

 

CRS-2676: Start of 'ora.dbm.db' on 'exadbmel01' succeeded 

 使用sqlplus驗證,資料庫已經可以正常訪問

[oracle@exadbmel04 ~]$ sqlplus / as sysdba 

 

SQL> select instance_name,status from v$instance; 

 

INSTANCE_NAME    STATUS 

 

---------------- ------------ 

 

dbm4             OPEN 

  

SQL> select username from dba_users; 

 

USERNAME 

 

------------------------------ 

 

SYS 

 

SYSTEM 

 

DBSNMP 

 

DBFS_TEST 

 

OUTLN 

 

MGMT_VIEW 

 

FLOWS_FILES 

 

MDSYS 

 

ORDSYS 

 

EXFSYS 

 

WMSYS 

 

...... 

 

遇到這種問題的可能,

1、是人為修改該檔案的許可權,

2、還有就是apply patch失敗,apply patch的過程會有修改該檔案許可權為-rwxr-xr-x的動作,在apply patch完成後再修改回來,但是如果apply patch失敗,就會導致該檔案許可權一直是錯誤的狀態,需要手動修改回來。

    最後分析 $GI_HOME/bin/oracle檔案許可權中的“S”,這個許可權問題明白了,oracle的這個問題也就解釋了。查詢Linux許可權,得到這樣的解釋

Linux 許可權模型有兩個專門的位,叫做“suid”和“sgid”。當設定了一個可執行程式

的“suid”這一位時,它將代表可執行檔案的所有者執行,而不是代表啟動程式的人執行。

現在,回到 /etc/passwd 問題。如果看一看 passwd 可執行檔案,我們可以

看到它屬於 root 使用者:

$ ls -l /usr/bin/passwd 

 

-rwsr-xr-x    1 root     wheel       17588 Sep 24 00:53 /usr/bin/passwd 

您還將注意到,這裡有一個 s 取替了使用者許可權三元組中的一個 x。這表明,對於這個特殊程式,

設定了 suid 和可執行位。由於這個原因,當 passwd 執行時,它將代表 root 使用者執行(

具有完全超級使用者訪問權),而不是代表執行它的使用者執行。又因為 passwd 以 root 使用者訪

問權執行,所以能夠修改 /etc/passwd 檔案,而沒有什麼問題。

suid/sgid 告誡說明

我們看到了 suid 怎樣工作,sgid 以同樣的方式工作。它允許程式繼承程式的組所有權,而不

是當前使用者的程式所有權。

引用ITPUB的一個帖子,其中有相關問題及解析

http://www.itpub.net/forum.php?mod=viewthread&tid=1622940

這裡面說的問題原因就是 $ORACLE_HOME/bin/oracle 和  $GI_HOME/bin/oracle下的oracle程式的許可權都是這樣設定的,並且他們的屬組是不同的,所以在實際操作的連線過程中,需要相互呼叫對方oracle程式,來申請SGA記憶體區

可以看到下面各自的屬組是不同的,如果需要使用對方的應用程式並且使用該應用程式的屬組,那麼,唯一的辦法是使用"S"許可權。

[root@rac1 ~]# su - oracle 

[oracle@rac1 ~]$ cd $ORACLE_HOME 

[oracle@rac1 dbhome_1]$ cd bin 

[oracle@rac1 bin]$ ll oracle 

-rwsr-s--x 1 oracle oinstall 232399431 May 14 13:47 oracle 

[oracle@rac1 bin]$ ll sqlplus 

-rwxr-x--x 1 oracle oinstall 9205 May 14 13:46 sqlplus 

 

[root@rac1 ~]# su - grid 

[grid@rac1 ~]$ cd $GRID_HOME 

[grid@rac1 bin]$ pwd 

/u01/app/11.2.0/grid/bin 

[grid@rac1 bin]$  ll oracle 

-rwsr-s--x 1 grid oinstall 203974257 May 11 09:30 oracle 

[grid@rac1 bin]$  ll crsctl 

-rwxr-xr-x 1 root oinstall 8133 May 11 12:35 crsctl 

 

©著作權歸作者所有:來自51CTO部落格作者hsbxxl的原創作品,謝絕轉載,否則將追究法律責任

sasmracOracle


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

相關文章