目录📚 前言上篇讲了 Oracle pfile 参数文件 ,这篇讲讲 spfile 参数文件! Oracle数据库启动时,第一步开启到nomount状态,需要使用到参数文件。 spfile 也是参数文件的一种,全称:服务器参数文件(Server Parameter Files)! ☀️ spfile 介绍spfileSID.ora 文件就是 spfile 参数文件,是二进制文件。 从 Oracle 9i 开始,Oracle 引入 使用 spfile 参数文件有以下好处:
所以,现在基本都是默认使用 spfile 来启动数据库,但是如果由于 spfile 修改参数数据库无法启动时,就只能使用 pfile 修改参数进行启动。 如何查看当前数据库使用的是不是 spfile 启动? 连接数据库之后,执行以下命令: show parameter spfile 如果以下框选的地方不为空,则代表当前数据库使用 spfile 启动,否则是 pfile 启动。 ⭐️ spfile 参数文件位置单机数据库,spfile 参数文件通常存在于以下目录下:
RAC 集群,spfile 通常是存放在 ASM 磁盘中,以上目录仅存放 pfile 文件。
🌛 启动优先级如果同时有 pfile 和 spfile 文件,数据库启动的优先级是如何的? 官方说法: ⭐️ 拓展: 我看到网上一个有趣的说法,如果使用 spfileSID.ora 文件复制出一个 spfile.ora 文件,那么优先级顺序是: 所以,我做了个小测试: 1、首先关闭数据库: sqlplus / as sysdbashutdown immediateexit
cd $ORACLE_HOME/dbscp 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
5、先关闭当前数据库,设置一个新的 ORACLE_SID,启动数据库 export ORACLE_SID=lucifer sqlplus / as sysdba startup 根据上图实验,实例名为 lucifer,数据库也是可以成功启动😂。 所以,如果 ORACLE_SID 设置错误的情况下,如果存在 spfile.ora 文件,那么优先级会跳过 spfileSID.ora 文件,直接优先选择 spfile.ora 文件来启动数据库。 6、最后删除所有 spfile 文件,重启数据库 source ~/.bash_profilerm -rf spfile* sqlplus / as sysdbashutdown immediate startup 当没有 spfile 文件时,最后只能选择 initSID.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 sysdbashutdown 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/dbsvi initorcl.ora 打开之后,修改 processes 参数为正确✅的数值即可。 3、使用修改后的 pfile 参数文件启动数据库 sqlplus / as sysdba startup pfile=$ORACLE_HOME/dbs/initorcl.ora 此时,数据库已经成功打开。 4、数据库启动成功后,切换回 spfile 重新启动数据库 sqlplus / as sysdba create spfile from pfile; 修改完之后,重启数据库生效: sqlplus / as sysdbashutdown 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 文件。 本次分享到此结束啦~ 如果觉得文章对你有帮助,点赞、收藏、关注、评论,一键四连支持,你的支持就是我创作最大的动力。 |
|
来自: LuciferLiu > 《待分类》