Oracle ASM存储Spfile解析

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介:   在之前的文章《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 ~]cdORACLE_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不能识别这种非转接内容文件,所以报错。

 

目录
打赏
0
0
0
0
43
分享
相关文章
|
6月前
|
深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。
【10月更文挑战第16天】本文深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。HashSet基于哈希表实现,添加元素时根据哈希值分布,遍历时顺序不可预测;而TreeSet利用红黑树结构,按自然顺序或自定义顺序存储元素,确保遍历时有序输出。文章还提供了示例代码,帮助读者更好地理解这两种集合类型的使用场景和内部机制。
80 3
Tablestore深度解析:面向AI场景的结构化数据存储最佳实践
《Tablestore深度解析:面向AI场景的结构化数据存储最佳实践》由阿里云专家团队分享,涵盖Tablestore十年发展历程、AI时代多模态数据存储需求、VCU模式优化、向量检索发布及客户最佳实践等内容。Tablestore支持大规模在线数据存储,提供高性价比、高性能和高可用性,特别针对AI场景进行优化,满足结构化与非结构化数据的统一存储和高效检索需求。通过多元化索引和Serverless弹性VCU模式,助力企业实现低成本、灵活扩展的数据管理方案。
178 12
基于Java的Hadoop文件处理系统:高效分布式数据解析与存储
本文介绍了如何借鉴Hadoop的设计思想,使用Java实现其核心功能MapReduce,解决海量数据处理问题。通过类比图书馆管理系统,详细解释了Hadoop的两大组件:HDFS(分布式文件系统)和MapReduce(分布式计算模型)。具体实现了单词统计任务,并扩展支持CSV和JSON格式的数据解析。为了提升性能,引入了Combiner减少中间数据传输,以及自定义Partitioner解决数据倾斜问题。最后总结了Hadoop在大数据处理中的重要性,鼓励Java开发者学习Hadoop以拓展技术边界。
100 7
PyPI 存储库中的 JarkaStealer:深入解析与防范措施
PyPI 存储库中的 JarkaStealer:深入解析与防范措施
62 2
Oracle中TAF与SCANIP全面解析
通过本文的解析,读者可以清晰地理解Oracle中TAF与SCAN IP的概念、工作原理及其在实际应用中的优势和局限性。TAF通过自动故障转移提升了会话的高可用性,而SCAN则通过简化客户端连接和负载均衡提升了集群的可管理性和扩展性。这两种技术在现代企业数据库架构中扮演着重要角色,能够显著提高系统的稳定性和可用性。
224 6
数据库数据恢复—Oracle ASM磁盘组故障数据恢复案例
Oracle数据库数据恢复环境&故障: Oracle ASM磁盘组由4块磁盘组成。Oracle ASM磁盘组掉线 ,ASM实例不能mount。 Oracle数据库故障分析&恢复方案: 数据库数据恢复工程师对组成ASM磁盘组的磁盘进行分析。对ASM元数据进行分析发现ASM存储元数据损坏,导致磁盘组无法挂载。
构建您的第一个Python网络爬虫:抓取、解析与存储数据
【9月更文挑战第24天】在数字时代,数据是新的金矿。本文将引导您使用Python编写一个简单的网络爬虫,从互联网上自动抓取信息。我们将介绍如何使用requests库获取网页内容,BeautifulSoup进行HTML解析,以及如何将数据存储到文件或数据库中。无论您是数据分析师、研究人员还是对编程感兴趣的新手,这篇文章都将为您提供一个实用的入门指南。拿起键盘,让我们开始挖掘互联网的宝藏吧!
深入解析MySQL数据存储机制:从表结构到物理存储
深入解析MySQL数据存储机制:从表结构到物理存储
880 1
“云端融合:WPF应用无缝对接Azure与AWS——从Blob存储到RDS数据库,全面解析跨平台云服务集成的最佳实践”
【8月更文挑战第31天】本文探讨了如何将Windows Presentation Foundation(WPF)应用与Microsoft Azure和Amazon Web Services(AWS)两大主流云平台无缝集成。通过具体示例代码展示了如何利用Azure Blob Storage存储非结构化数据、Azure Cosmos DB进行分布式数据库操作;同时介绍了如何借助Amazon S3实现大规模数据存储及通过Amazon RDS简化数据库管理。这不仅提升了WPF应用的可扩展性和可用性,还降低了基础设施成本。
174 0

热门文章

最新文章

推荐镜像

更多