近日遇到一个RAC问题,一个节点无法启动,经过分析后解决,解决过程如下。

11.2.0.3 RAC环境,其中一个节点instance启动失败,显示如下错误 

   
   
   
   
  1. [oracle@exadbmel04 ~]$ crsctl  start res  ora.dbm.db 
  2.  
  3. CRS-2672: Attempting to start 'ora.dbm.db' on 'exadbmel04' 
  4.  
  5. CRS-5017: The resource action "ora.dbm.db start" encountered the following error: 
  6.  
  7. ORA-01078: failure in processing system parameters 
  8.  
  9. ORA-01565: error in identifying file '+DATA_EXA/dbm/spfiledbm.ora' 
  10.  
  11. ORA-17503: ksfdopn:2 Failed to open file +DATA_EXA/dbm/spfiledbm.ora 
  12.  
  13. ORA-27140: attach to post/wait facility failed 
  14.  
  15. ORA-27300: OS system dependent operation:invalid_egid failed with status: 1 
  16.  
  17. ORA-27301: OS failure message: Operation not permitted 
  18.  
  19. ORA-27302: failure occurred at: skgpwinit6 
  20.  
  21. ORA-27303: additional information: startup egid = 1001 (oinstall), current egid = 1002 (dba) 
  22.  
  23. . For details refer to "(:CLSN00107:)" in "/u01/app/11.2.0.3/grid/log/exadbmel04/agent/crsd/oraagent_oracle/oraagent_oracle.log". 
  24.  
  25. CRS-2674: Start of 'ora.dbm.db' on 'exadbmel04' failed 
  26.  
  27. CRS-2679: Attempting to clean 'ora.dbm.db' on 'exadbmel04' 
  28.  
  29. CRS-2681: Clean of 'ora.dbm.db' on 'exadbmel04' succeeded 
  30.  
  31. CRS-2528: Unable to place an instance of 'ora.dbm.db' as all possible servers are occupied by the resource 
  32.  
  33. CRS-4000: Command Start failed, or completed with errors. 

 通过Sqlplus启动,遇到同样的错误

   
   
   
   
  1. [oracle@exadbmel04 ~]$ . oraenv 
  2.  
  3. ORACLE_SID = [oracle] ? dbm4 
  4.  
  5. The Oracle base has been set to /u01/app/oracle 
  6.  
  7. [oracle@exadbmel04 ~]$ sqlplus / as sysdba 
  8.   
  9. SQL> startup mount; 
  10.  
  11. ORA-01078: failure in processing system parameters 
  12.  
  13. ORA-01565: error in identifying file '+DATA_EXA/dbm/spfiledbm.ora' 
  14.  
  15. ORA-17503: ksfdopn:2 Failed to open file +DATA_EXA/dbm/spfiledbm.ora 
  16.  
  17. ORA-27140: attach to post/wait facility failed 
  18.  
  19. ORA-27300: OS system dependent operation:invalid_egid failed with status: 1 
  20.  
  21. ORA-27301: OS failure message: Operation not permitted 
  22.  
  23. ORA-27302: failure occurred at: skgpwinit6 
  24.  
  25. ORA-27303: additional information: startup egid = 1001 (oinstall), current egid = 1002 (dba) 

 查看资源,可以看到ASM的实例都是正常的,包括diskgroup,但是实例exadbmel04未启动。

   
   
   
   
  1. [oracle@exadbmel04 ~]$ crsctl status res  -t 
  2.  
  3. -------------------------------------------------------------------------------- 
  4.  
  5. NAME           TARGET  STATE        SERVER                   STATE_DETAILS 
  6.  
  7. -------------------------------------------------------------------------------- 
  8.  
  9. Local Resources 
  10.  
  11. -------------------------------------------------------------------------------- 
  12.  
  13. ora.DATA_EXA.dg 
  14.  
  15.                ONLINE  ONLINE       exadbmel01 
  16.  
  17.                ONLINE  ONLINE       exadbmel03 
  18.  
  19.                ONLINE  ONLINE       exadbmel04 
  20.  
  21. ora.DBFS_DG.dg 
  22.  
  23.                ONLINE  ONLINE       exadbmel01 
  24.  
  25.                ONLINE  ONLINE       exadbmel03 
  26.  
  27.                ONLINE  ONLINE       exadbmel04 
  28.  
  29. ora.LISTENER.lsnr 
  30.  
  31.                ONLINE  ONLINE       exadbmel01 
  32.  
  33.                ONLINE  ONLINE       exadbmel03 
  34.  
  35.                ONLINE  ONLINE       exadbmel04 
  36.  
  37. ora.RECO_EXA.dg 
  38.  
  39.                ONLINE  ONLINE       exadbmel01 
  40.  
  41.                ONLINE  ONLINE       exadbmel03 
  42.  
  43.                ONLINE  ONLINE       exadbmel04 
  44.  
  45. ora.asm 
  46.  
  47.                ONLINE  ONLINE       exadbmel01 
  48.  
  49.                ONLINE  ONLINE       exadbmel03               Started 
  50.  
  51.                ONLINE  ONLINE       exadbmel04               Started 
  52.  
  53. ora.gsd 
  54.  
  55. ...... 
  56.  
  57. -------------------------------------------------------------------------------- 
  58.  
  59. Cluster Resources 
  60.  
  61. -------------------------------------------------------------------------------- 
  62.  
  63. ...... 
  64.  
  65. ora.dbm.db 
  66.  
  67.       1        ONLINE  ONLINE                               
  68.  
  69.       2        ONLINE  ONLINE                     
  70.  
  71.       3        ONLINE  ONLINE 
  72.  
  73.       4        ONLINE  OFFLINE                     Instance Shutdown 
  74.  
  75. ...... 
  76.  
  77.   

通过查询ORA-27300错误,找到问题点。

这个问题是这个文件 $GI_HOME/bin/oracle 的权限不对,正确的权限应该是 "-rwsr-s--x".将权限修改正确,问题解决。

   
   
   
   
  1. [oracle@exadbmel04 bin]$cd  $GI_HOME/bin/ 
  2.  
  3. [oracle@exadbmel04 bin]$ ls -al oracle 
  4.  
  5. -rwxr-xr-x 1 oracle oinstall 204170493 Jun 25 20:46 oracle 
  6.  
  7. [oracle@exadbmel04 bin]$ chmod 6751 oracle 
  8.  
  9. [oracle@exadbmel04 bin]$ ls -al oracle 
  10.  
  11. -rwsr-s--x 1 oracle oinstall 204170493 Jun 25 20:46 oracle 
  12.  

启动实例,正常启动

   
   
   
   
  1. [oracle@exadbmel04 ~]$ crsctl  start res  ora.dbm.db 
  2.  
  3. CRS-2672: Attempting to start 'ora.dbm.db' on 'exadbmel04' 
  4.  
  5. CRS-2672: Attempting to start 'ora.dbm.db' on 'exadbmel01' 
  6.  
  7. CRS-2676: Start of 'ora.dbm.db' on 'exadbmel04' succeeded 
  8.  
  9. CRS-2676: Start of 'ora.dbm.db' on 'exadbmel01' succeeded 

 使用sqlplus验证,数据库已经可以正常访问

   
   
   
   
  1. [oracle@exadbmel04 ~]$ sqlplus / as sysdba 
  2.  
  3. SQL> select instance_name,status from v$instance; 
  4.  
  5. INSTANCE_NAME    STATUS 
  6.  
  7. ---------------- ------------ 
  8.  
  9. dbm4             OPEN 
  10.  
  11. SQL> select username from dba_users; 
  12.  
  13. USERNAME 
  14.  
  15. ------------------------------ 
  16.  
  17. SYS 
  18.  
  19. SYSTEM 
  20.  
  21. DBSNMP 
  22.  
  23. DBFS_TEST 
  24.  
  25. OUTLN 
  26.  
  27. MGMT_VIEW 
  28.  
  29. FLOWS_FILES 
  30.  
  31. MDSYS 
  32.  
  33. ORDSYS 
  34.  
  35. EXFSYS 
  36.  
  37. WMSYS 
  38.  
  39. ...... 

 

遇到这种问题的可能,

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 用户:

   
   
   
   
  1. $ ls -l /usr/bin/passwd 
  2.  
  3. -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"权限。

   
   
   
   
  1. [root@rac1 ~]# su - oracle 
  2. [oracle@rac1 ~]$ cd $ORACLE_HOME 
  3. [oracle@rac1 dbhome_1]$ cd bin 
  4. [oracle@rac1 bin]$ ll oracle 
  5. -rwsr-s--x 1 oracle oinstall 232399431 May 14 13:47 oracle 
  6. [oracle@rac1 bin]$ ll sqlplus 
  7. -rwxr-x--x 1 oracle oinstall 9205 May 14 13:46 sqlplus 
  8.  
  9. [root@rac1 ~]# su - grid 
  10. [grid@rac1 ~]$ cd $GRID_HOME 
  11. [grid@rac1 bin]$ pwd 
  12. /u01/app/11.2.0/grid/bin 
  13. [grid@rac1 bin]$  ll oracle 
  14. -rwsr-s--x 1 grid oinstall 203974257 May 11 09:30 oracle 
  15. [grid@rac1 bin]$  ll crsctl 
  16. -rwxr-xr-x 1 root oinstall 8133 May 11 12:35 crsctl