Oracle spfile 参数文件
Posted Lucifer三思而后行
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle spfile 参数文件相关的知识,希望对你有一定的参考价值。
目录
📚 前言
上篇讲了 Oracle pfile 参数文件 ,这篇讲讲 spfile 参数文件!
Oracle数据库启动时,第一步开启到nomount状态,需要使用到参数文件。
spfile 也是参数文件的一种,全称:服务器参数文件(Server Parameter Files)!
☀️ spfile 介绍
spfileSID.ora 文件就是 spfile 参数文件,是二进制文件。
从 Oracle 9i 开始,Oracle 引入 spfile
文件,使用spfile用户可以通过 ALTER SYSTEM 或者 ALTER SESSION 来修改参数,而不再需要通过手工修改。
使用 spfile 参数文件有以下好处:
- 动态参数的更改可以立即生效,用户可以选择使更改只应用于当前实例还是应用到spfile,或者都应用;
- 可以彻底告别手工修改初始化参数文件,也就大大减少了人为错误的发生;
- spfile 是一个二进制文件,可以使用rman进行备份,增加数据库的安全,便于恢复;
所以,现在基本都是默认使用 spfile 来启动数据库,但是如果由于 spfile 修改参数数据库无法启动时,就只能使用 pfile 修改参数进行启动。
如何查看当前数据库使用的是不是 spfile 启动?
连接数据库之后,执行以下命令:
show parameter spfile
如果以下框选的地方不为空,则代表当前数据库使用 spfile 启动,否则是 pfile 启动。
⭐️ spfile 参数文件位置
单机数据库,spfile 参数文件通常存在于以下目录下:
- Windows: $ORACLE_HOME/database
- Linux: $ORACLE_HOME/dbs
RAC 集群,spfile 通常是存放在 ASM 磁盘中,以上目录仅存放 pfile 文件。
- pfile 文件格式为:
initSID.ora
- spfile 文件格式为:
spfileSID.ora
🌛 启动优先级
如果同时有 pfile 和 spfile 文件,数据库启动的优先级是如何的?
官方说法: spfileSID.ora > initorcl.ora
⭐️ 拓展:
我看到网上一个有趣的说法,如果使用 spfileSID.ora 文件复制出一个 spfile.ora 文件,那么优先级顺序是:spfileSID.ora > spfile.ora > initorcl.ora
。
所以,我做了个小测试:
1、首先关闭数据库:
sqlplus / as sysdba
shutdown immediate
exit
2、从 spfileSID.ora 复制一个 spfile.ora 文件:
cd $ORACLE_HOME/dbs
cp spfileorcl.ora spfile.ora
3、重新启动数据库
sqlplus / as sysdba
startup
show parameter spfile
从上图可以看出,优先级最高的是 spfileSID.ora,验证没有问题。
4、删除 spfileSID.ora 文件,重启数据库
cd $ORACLE_HOME/dbs
rm -rf spfileorcl.ora
sqlplus / as sysdba
shutdown immediate
startup
show parameter spfile
根据上图所示,居然真的优先识别到的是 spfile.ora 文件,那就有一个问题,如果是随便 export 一个 ORACLE_SID,是不是也能启动呢?
5、先关闭当前数据库,设置一个新的 ORACLE_SID,启动数据库
export ORACLE_SID=lucifer
sqlplus / as sysdba
startup
根据上图实验,实例名为 lucifer,数据库也是可以成功启动😂。
所以,如果 ORACLE_SID 设置错误的情况下,如果存在 spfile.ora 文件,那么优先级会跳过 spfileSID.ora 文件,直接优先选择 spfile.ora 文件来启动数据库。
6、最后删除所有 spfile 文件,重启数据库
source ~/.bash_profile
rm -rf spfile*
sqlplus / as sysdba
shutdown immediate
startup
当没有 spfile 文件时,最后只能选择 initSID.ora 文件来进行启动数据库。
因此,优先级顺序:spfileSID.ora > spfile.ora > initorcl.ora
是没有问题的。
❄️ 实例讲解
① 从 pfile 切换为 spfile 启动数据库
有一些特殊情况下需要切换使用参数文件,如何切换使用 pfile 和 spfile?
1、首先,使用 pfile 参数文件启动数据库:
sqlplus / as sysdba
startup pfile=$ORACLE_HOME/dbs/initorcl.ora
2、为了测试会生成 spfile 参数文件,我提前删除它:
3、确保当前数据库环境是由 pfile 文件启动,连接 sqlplus:
sqlplus / as sysdba
create spfile from pfile;
执行以上命令,可以根据 pfile 生成 spfile 文件,保存在默认的参数文件目录下。
4、重启数据库,默认会使用 spfile 文件启动:
sqlplus / as sysdba
shutdown immediate
startup
此时,数据库已经使用 spfile 启动。
② 使用 spfile 启动数据库后修改参数错误,导致数据库无法启动
一般什么情况下必须用到 pfile 参数文件?
问题重现
比如,你在数据库中通过 alter system 设置了数据库参数,关闭数据库后,重新打开数据库时报错无法打开。
此时,由于 spfile 是二进制文件,无法直接打开修改,因此需要通过手动生成 pfile 文件进行修改启动。
解决步骤
1、手动生成 pfile 文件
sqlplus / as sysdba
create pfile from spfile;
注意:以上命令可以在未开启数据库时进行执行,pfile生成路径也可以指定:pfile=生成路径/pfile文件名。
2、编辑 pfile 文件,修改错误设置的参数
cd $ORACLE_HOME/dbs
vi initorcl.ora
打开之后,修改 processes 参数为正确✅的数值即可。
3、使用修改后的 pfile 参数文件启动数据库
sqlplus / as sysdba
startup pfile=$ORACLE_HOME/dbs/initorcl.ora
此时,数据库已经成功打开。
4、数据库启动成功后,切换回 spfile 重新启动数据库
由于当前数据库是使用 pfile 进行启动,需要修改为spfile启动。
sqlplus / as sysdba
create spfile from pfile;
修改完之后,重启数据库生效:
sqlplus / as sysdba
shutdown immediate
startup
如上,数据库已经成功恢复为 spfile 启动,并且当前数据库参数也是正确的。
5、注意点
如果是 RAC 集群操作时,由于 RAC 的 spfile 文件是保存在 ASM 磁盘中,所以是跟 pfile 文件配合进行使用。
比如,下方的 RAC 集群示例:
# ASM磁盘下的 spfile 文件
ASMCMD> pwd
+data/orcl
ASMCMD> ls spfile*
spfileorcl.ora
# 一节点 ORACLE_HOME/dbs 目录下的 pfile 文件
[oracle@orcl1 dbs]$ cat initorcl1.ora
SPFILE='+DATA/orcl/spfileorcl.ora'
通过上述示例可以发现,RAC 实际上使用的还是 pfile 去启动的,但是将 spfile 路径写在 pfile 文件中。
❤️ 注意:
因此,在最后生成 spfile 时,需要手动指定 spfile 的路径为 ASM 磁盘中的路径!
需要注意 $ORACLE_HOME/dbs 目录下不能存在 spfile[ORACLE_SID].ora 文件,否则启动时优先选择 $ORACLE_HOME/dbs 下的 spfile 文件。
本次分享到此结束啦~
如果觉得文章对你有帮助,点赞、收藏、关注、评论,一键四连支持,你的支持就是我创作最大的动力。
❤️ 技术交流可以 关注公众号:Lucifer三思而后行 ❤️
以上是关于Oracle spfile 参数文件的主要内容,如果未能解决你的问题,请参考以下文章