今天在一个客户那巡检时,一套3节点RAC 中的节点rac2 数据库实例在集群中显示的状态不正常
Crsctl stat res –t 显示为intermediate,先去节点rac2 上看了下实例是否存在。发现数据库实例是正常的。当时也没有多想直接在节点rac1 上使用 srvctl start database –d orcl –n orcl2 。
本想通过srvctl 同步下crsctl 中集群数据库状态,没料想数据库直接被16580838 该进程直接给干掉了,然后又去重启该实例数据库实例
Fri Dec 25 10:41:19 2015
License high water mark = 21
USER (ospid: 16580838): terminating theinstance
Fri Dec 25 10:41:20 2015
ORA-1092 : opitsk aborting process
Instance terminated by USER, pid = 16580838
用srvctl 启动rac2数据库实例失败,在alert 日志中也没有有效的日志可以分析原因.可以手工去拉下数据库实例,应该可以获取有价值的信息分析
SQL>startup
ORACLEinstance started.
TotalSystem Global Area 1043886080 bytes
FixedSize 2234960 bytes
VariableSize 352322992 bytes
DatabaseBuffers 683671552 bytes
RedoBuffers 5656576 bytes
ORA-01105:mount is incompatible with mounts by other instances
ORA-19808:recovery destination parameter mismatch
$ srvctlstart instance -d A1 -i A11
PRCR-1013 : Failed to start resource ora.a1.db
PRCR-1064 : Failed to start resource ora.a1.dbon node host01
CRS-5017: The resource action "ora.a1.dbstart" encountered the following error:
ORA-01105: mount is incompatible with mountsby other instances
ORA-19808: recovery destination parametermismatch
根据这里的报错信息我们可以推测是当前实例启动时用的某些参数与集群中已启动的实例的参数值不同。Oracle crs为了保障集群的一致性,禁止rac2 实例启动。
根据报错信息在MOS 里很快可以定位问题原因
Bug 13001004 : SPFILE DEFINED IN OCR IS NOTUSED IF ONE EXISTED IN $ORACLE_HOME/DBS.
关于这个bug的理解:
Oracle产品设计上的问题,考虑的不够全面。新特性没有匹配oracle的RDMS产品设计理念。
这个怎么理解呢?从oracle的第一版开始,oracle 实例启动读取的参数文件缺省是从$ORACLE_HOME/dbs 下读取
且优先顺序为spfile$SID.ora > spfile.ora > init$SID.ora > init.ora 该规则目前一直在oracle的数据库的设计是一直坚守着。
但是在11G 以后oracle提供了一个全新的功能,数据库实例启动的spfile可以存放到ASM 上,然后在
$ORACLE_HOME/dbs 目录下存放一个init$SID.orapfile文件,该文件只有一条记录:
[oracle@lixora2 dbs]$ cat initlixora2.ora
SPFILE='+DATA/lixora/spfilelixora.ora' ----------指向ASM 磁盘组上的spfile 文件
如果在$ORACLE_HOME/dbs 目录下出现一个spfile 那么oracle在启动时还是会坚守之前的产品设计规则。优先使用spfile。于是,当我们修改完某些集群层面的参数时,再顺手建了个create spfile 。那么我们跳坑了。等下次重启数据库时你就要抓狂了。。。。。
在oracle的早期版本中alert 日志中没有:Using parameter settings in server-side spfile。。。。。。。。。。
这个日志记录
--------正常的db alert 日志:
Starting up:
Oracle Database 11g Enterprise EditionRelease 11.2.0.3.0 - 64bit Production
With the Partitioning, Real ApplicationClusters, OLAP, Data Mining
and Real Application Testing options.
ORACLE_HOME =/s01/oracle/app/oracle/product/11.2.0/dbhome_1
System name:Linux
Node name:lixora2.oracle.com
Release:2.6.32-200.13.1.el5uek
Version:#1 SMP Wed Jul 27 21:02:33 EDT 2011
Machine:x86_64
Using parameter settings inserver-side pfile/s01/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/initlixora2.ora
System parameters with non-default values:
processes = 150
spfile ="+DATA/lixora/spfilelixora.ora"
------手贱建了了个spfile
Createspfile from pfile;命令缺省会在$ORACLE_HOME/dbs 目录下
Startingup:
OracleDatabase 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
Withthe Partitioning, Real Application Clusters, OLAP, Data Mining
andReal Application Testing options.
ORACLE_HOME= /s01/oracle/app/oracle/product/11.2.0/dbhome_1
Systemname: Linux
Nodename: lixora2.oracle.com
Release: 2.6.32-200.13.1.el5uek
Version: #1 SMP Wed Jul 27 21:02:33 EDT 2011
Machine: x86_64
Using parameter settings inserver-side spfile/s01/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/spfilelixora2.ora
Systemparameters with non-default values:
processes = 150
sga_target = 1000M
control_files = "+DATA/lixora/controlfile/current.260.854586871"
通过观察oracle的alert 日志我们可以很明确发现问题所在。
其实这个问题也不能全怪oracle,根本原因还是出在我们自己身上,是我们对oracle的理解还不够深入,对自己的的每一步操作不够理解,不知道这个命令下去会有一个什么结果,多想想有什么影响?是否有级联关系?如果想到了oracle 的启动规则,那么就会发现这个命令结果会造成冲突影响。如果又想到oracle 集群实例的一致性保护。就能提前避免这类问题发生了。
虽然oracle自己承认了这是个bug ,(但是其实跟oracle的设计没什么关系),并且在12.1.0.1修复。oracle无非就是在启动实例时检测下db instance是否关联了ASM dg,如使用了ASM则自动跳过$ORACLE_HOME/dbs下的spfile$SID.ora文件。
[oracle@lixora2dbs]$ ls -trl
total20
-rw-r--r--1 oracle oinstall 2851 Aug 2 2014 init.ora
-rw-r-----1 oracle oinstall 1536 Aug 3 2014 orapwlixora2
-rw-r-----1 oracle oinstall 39 Aug 3 2014initlixora2.ora
-rw-r-----1 oracle asmadmin 3584 Dec 25 09:43 spfilelixora2.ora
-rw-rw----1 oracle asmadmin 1544 Dec 25 10:09 hc_lixora2.dat
[oracle@lixora2dbs]$ rm -rf spfilelixora2.ora
[oracle@lixora2dbs]$ ls -trl
total16
-rw-r--r--1 oracle oinstall 2851 Aug 2 2014 init.ora
-rw-r-----1 oracle oinstall 1536 Aug 3 2014 orapwlixora2
-rw-r-----1 oracle oinstall 39 Aug 3 2014initlixora2.ora
-rw-rw----1 oracle asmadmin 1544 Dec 25 10:09 hc_lixora2.dat
[oracle@lixora2dbs]$