Oracle ASM存储Spfile解析

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

 

在之前的文章《Oracle Restart启动数据库实例故障一例》(http://space.itpub.net/17203031/viewspace-774622)中,笔者解决了一个由于使用create pfile from 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/dbsspfilepfile参数进行检索。

 

 

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" encountered the 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、分析和思考

 

一起冷静想想~

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

3、配置ASMSPFILE启动

 

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

 

 

SQL> startup pfile=/u01/app/oracle/product/11.2.0/db_1/dbs/initora11g.ora

ORACLE instance started.

 

Total System Global Area  263639040 bytes

Fixed Size                  1344312 bytes

Variable Size             134221000 bytes

Database Buffers          125829120 bytes

Redo Buffers                2244608 bytes

Database mounted.

Database opened.

SQL> show parameter spfile

 

NAME                                 TYPE        VALUE

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

spfile                               string

 

SQL> create spfile='+DATA/ORA11G/spfileora11g.ora' from pfile;

File created.

 

 

此时,我们在ASM里面可以看到生成的spfile二进制文件。

 

 

ASMCMD> ls -l

Type           Redund  Striped  Time             Sys  Name

                                                 Y    CONTROLFILE/

                                                 Y    DATAFILE/

                                                 Y    ONLINELOG/

                                                 Y    PARAMETERFILE/

                                                 Y    TEMPFILE/

                                                 N    spfileora11g.ora => +DATA/ORA11G/PARAMETERFILE/spfile.267.829130539

 

 

第二部是创建维护一个“转发”参数文件。

 

 

 

SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

 

[oracle@SimpleLinux ~]$ cd $ORACLE_HOME

[oracle@SimpleLinux db_1]$ cd dbs

[oracle@SimpleLinux dbs]$ ls -l

total 28

-rw-rw---- 1 oracle asmadmin 1544 Sep 12 12:58 hc_ora11g.dat

-rw-r--r-- 1 oracle oinstall 2851 May 15  2009 init.ora

-rwxr-x--- 1 oracle oinstall  959 Oct 18 09:51 initora11g.ora

-rwxrwx--- 1 oracle oinstall  887 Sep 29 09:31 initora11g.ora.bk

-rw-r----- 1 oracle asmadmin   24 Sep 12 12:58 lkORA11G

-rw-r----- 1 oracle oinstall 1536 Sep 12 13:11 orapwora11g

-rw-r----- 1 oracle asmadmin 2560 Oct 18 09:57 spfileora11g.ora

 

 

在里面要完成两件事情,一个是将dbs目录下面的spfile删除。因为依据Oracle启动的原则,是先找spfile,之后再找pfile。第二件是修改文本参数文件,作为转发。

 

 

[oracle@SimpleLinux dbs]$ mv spfileora11g.ora spfileora11g.ora.bk

 

[oracle@SimpleLinux dbs]$ cat initora11g.ora

SPFILE='+DATA/ora11g/spfileora11g.ora’ –注意:不能包括*前缀或者SID前缀

 

[oracle@SimpleLinux dbs]$ ls -l

total 28

-rw-rw---- 1 oracle asmadmin 1544 Sep 12 12:58 hc_ora11g.dat

-rw-r--r-- 1 oracle oinstall 2851 May 15  2009 init.ora

-rwxr-x--- 1 oracle oinstall   41 Oct 18 10:07 initora11g.ora

-rwxrwx--- 1 oracle oinstall  887 Sep 29 09:31 initora11g.ora.bk

-rw-r----- 1 oracle asmadmin   24 Sep 12 12:58 lkORA11G

-rw-r----- 1 oracle oinstall 1536 Sep 12 13:11 orapwora11g

-rw-r----- 1 oracle asmadmin 2560 Oct 18 09:57 spfileora11g.ora.bk

 

 

使用srvctl关闭和启动数据库。

 

 

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

[oracle@SimpleLinux dbs]$ 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:

 

[oracle@SimpleLinux dbs]$ srvctl status database -d ora11g

Database is running.

 

 

数据库中,spfile参数被设置为ASM路径。

 

 

SQL> show parameter spfile;

 

NAME                                 TYPE        VALUE

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

spfile                               string      +DATA/ora11g/spfileora11g.ora

 

 

故障彻底解决。

 

4、结论

 

综合上面的实验,我们可以看到ASMSpfile使用的方法。ASM下的Spfile并不是抛弃原有的启动规则,而是借助原有的pfile进行了目标转接。之后笔者查看MOS中的对应方案,官方推荐的也是这样的做法。

 

这样就需要一个前提,就是dbs或者database目录中不能包括spfile。如果包括了,Oracle设置的转接机制就被替换掉了。

 

另一个问题是我们一直看到的错误提示信息,提示参数文件initora11g.ora格式不能识别。笔者的理解是,原始的文件是笔者使用create pfile from spfile创建出来的,默认的SPFILE=XXX的内容被覆盖。而Oracle Restart不能识别这种非转接内容文件,所以报错。

 

目录
相关文章
|
Oracle 关系型数据库
oracle asm 磁盘显示offline
oracle asm 磁盘显示offline
810 2
|
负载均衡 Oracle 网络协议
Oracle中TAF与SCANIP全面解析
通过本文的解析,读者可以清晰地理解Oracle中TAF与SCAN IP的概念、工作原理及其在实际应用中的优势和局限性。TAF通过自动故障转移提升了会话的高可用性,而SCAN则通过简化客户端连接和负载均衡提升了集群的可管理性和扩展性。这两种技术在现代企业数据库架构中扮演着重要角色,能够显著提高系统的稳定性和可用性。
571 6
|
存储 Oracle 关系型数据库
数据库数据恢复—Oracle ASM磁盘组故障数据恢复案例
Oracle数据库数据恢复环境&故障: Oracle ASM磁盘组由4块磁盘组成。Oracle ASM磁盘组掉线 ,ASM实例不能mount。 Oracle数据库故障分析&恢复方案: 数据库数据恢复工程师对组成ASM磁盘组的磁盘进行分析。对ASM元数据进行分析发现ASM存储元数据损坏,导致磁盘组无法挂载。
|
监控 Oracle 关系型数据库
"深度剖析:Oracle SGA大小调整策略——从组件解析到动态优化,打造高效数据库性能"
【8月更文挑战第9天】在Oracle数据库性能优化中,系统全局区(SGA)的大小调整至关重要。SGA作为一组共享内存区域,直接影响数据库处理能力和响应速度。本文通过问答形式介绍SGA调整策略:包括SGA的组成(如数据缓冲区、共享池等),如何根据负载与物理内存确定初始大小,手动调整SGA的方法(如使用`ALTER SYSTEM`命令),以及利用自动内存管理(AMM)特性实现智能调整。调整过程中需注意监控与测试,确保稳定性和性能。
1142 2
|
SQL DataWorks Oracle
DataWorks产品使用合集之datax解析oracle增量log日志该如何操作
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
190 0
|
存储 Oracle 关系型数据库
【数据库数据恢复】Oracle数据库ASM磁盘组掉线的数据恢复案例
oracle数据库ASM磁盘组掉线,ASM实例不能挂载。数据库管理员尝试修复数据库,但是没有成功。
【数据库数据恢复】Oracle数据库ASM磁盘组掉线的数据恢复案例
|
缓存 Oracle 关系型数据库
oracle 软软解析
oracle 软软解析
96 0
|
SQL Oracle 关系型数据库
Oracle ASM磁盘和磁盘组的常用SQL语句
Oracle ASM磁盘和磁盘组的常用SQL语句
572 0
|
文字识别 Oracle NoSQL
oracle 11g 单机asm配置
oracle 11g 单机asm配置
851 0
|
Oracle 关系型数据库
❤️Oracle ASM加磁盘及剔盘操作❤️
❤️Oracle ASM加磁盘及剔盘操作❤️
778 0

推荐镜像

更多