浅析RAC下SPFILE文件修改之整理三篇文章(二)

2014-11-24 17:10:05 · 作者: · 浏览: 1
关文件,指向新文件

2. 需要用srvctl修改config信息,指向新文件

第二篇:Oracle ASM存储Spfile解析

以下来自论坛

在之前的文章《Oracle Restart启动数据库实例故障一例》(http://space.itpub.net/17203031/viewspace-774622)中,笔者解决了一个由于使用create pfilefrom spfile引起的Restart无法启动数据库实例的故障。

严格的说,笔者并没有完全将其解决。主要体现在Spfile的使用和存放上。

1、问题简述

Oracle Database安装在ASM存储的时候,默认都是使用ASM保存Spfile参数文件。与早期的pfile文件不同,Spfile是具有二进制格式,能够支持部分参数的动态调整。

所以,我们出现问题的时候,发现Restart的配置信息中包括了ASM中的Spfile参数内容。

[oracle@SimpleLinux ~]$ srvctl config database -d ora11g

Database unique name: ora11g

Database name:

Oracle home: /u01/app/oracle/product/11.2.0/db_1

Oracle user: oracle

Spfile: +DATA/ORA11G/spfileora11g.ora

Domain:

Start options: open

Stop options: immediate

Database role: PRIMARY

Management policy: AUTOMATIC

Database instance: ora11g

Disk Groups: DATA,RECO

Services:

我们之前的修复方法,就是将spfile内容置空,让数据库实例启动使用默认路径$ORACLE_HOME/dbs的spfile和pfile参数进行检索。

SQL> show parameter spfile

NAME TYPE VALUE

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

spfile string /u01/app/oracle/product/11.2.0

/db_1/dbs/spfileora11g.ora

但是此时,我们在ASM路径上是存在spfile上的。

ASMCMD> pwd

+DATA/ORA11G

ASMCMD> ls

CONTROLFILE/

DATAFILE/

ONLINELOG/

PARAMETERFILE/

TEMPFILE/

spfileora11g.ora

在这种情况下,如果配置了ASM目录的spfile启动标志,启动Restart会报错。

[oracle@SimpleLinux ~]$ srvctl modify database -d ora11g-p +DATA/ora11g/spfileora11g.ora

[oracle@SimpleLinux ~]$ srvctl start database -d ora11g

PRCR-1079 : Failed to start resource ora.ora11g.db

CRS-5010: Update of configuration file "/u01/app/oracle/product/11.2.0/db_1/dbs/initora11g.ora"failed: details at "(:CLSN00014:)" in"/u01/app/grid/product/11.2.0/grid/log/simplelinux/agent/ohasd/oraagent_grid/oraagent_grid.log"

CRS-5017: The resource action "ora.ora11g.db start" encounteredthe following error:

CRS-5010: Update of configuration file"/u01/app/oracle/product/11.2.0/db_1/dbs/initora11g.ora" failed:details at "(:CLSN00014:)" in "/u01/app/grid/product/11.2.0/grid/log/simplelinux/agent/ohasd/oraagent_grid/oraagent_grid.log"

. For details refer to "(:CLSN00107:)" in"/u01/app/grid/product/11.2.0/grid/log/simplelinux/agent/ohasd/oraagent_grid/oraagent_grid.log".

CRS-2674: Start of 'ora.ora11g.db' on 'simplelinux' failed

2、分析和思考

一起冷静想想~

Pfile和spfile是参数文件经历的两个阶段。在umount阶段,Oracle是通过参数$ORACLE_HOME和$ORACLE_SID进行目录定位,定位到$ORACLE_HOME/dbs或者$ORACLE_HOME/database,到里面寻找制定规则的参数文件。

Oracle首先会去寻找Spfile,之后才会去找Pfile。我们通过create spfile和create pfile可以实现两者的转化。

一个比较常见的问题案例是:如果我们把启动参数改错了,启动不了了,那么怎么办?标准的做法是通过create pfilefrom spfile,拿到一个文本格式的参数pfile。在里面修改启动参数,纠正错误。启动时候,使用startuppfile=xxx使用“指定的pfile”启动数据库实例,再通过create spfile from pfile将变化固化下来。

Oracle Restart提供的配置参数spfile其实是很诡异的。从直观上看,好像是有startup数据库实例,后面可以自己去指定参数文件,类似于startupspfile=xxx的作用。但是实际上,startup是不支持spfile这样的参数的。

如果这个参数是用于指定,那么在Restart启动的时候我们已经设置争取的spfile位置,指定位置上面也有文件。但是根本没有效果,Oracle还是寻找参数文件。

那么,就只有一种可能性:即使Oracle使用Restart启动,也不是依靠指定的spfile,还是按照原有的规则运行。

网络上有一种方法,说的是如果我们需要指定一个spfile启动文件的时候,应该怎么做。答案是建立一个空的pfile文件,里面直接指定SPFILE参数的文件位置。

综合几种思路,我们可以设想到Spfile保存在ASM里面,同时让Restart和sqlplus启动时候可以访问到ASMSpfile的方法。

3、配置ASM上SPFILE启动

首先是创建出ASM上的spfile。注意:创建spfile的时候一定是从pfile创建,所以需要转换一下。

SQL> startuppfile=/u01/app/oracl