同事反馈在进行扩展表空间时增加数据文件报错ORA-00059: 超出 DB_FILES 的最大值,查询发现现场是RAC环境,DB_FILES参数为200,而当前数据文件总数已是200个引发的报错。随即沟通了停库窗口,进行了db_files参数的更改,启库提示报错:ORA-01105: mount is incompatible with mounts by other instances。
更改参数步骤如下:
--查数据库默认数据文件数量参数
SQL> show parameter db_files;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_files integer 200
或
select * from v$parameter where name like '%db_files%'
--查数据库数据文件数量总数
select count(*) from dba_data_files ;
200
总数已经是200了
--更改参数前 备份当前的参数文件(备份的目的是规避重启失败,建议更改任何参数前都先备份参数文件)
SQL> create pfile='/home/oracle/pfileywrac20240108.ora' from spfile;
--查看备份的参数文件
[oracle@gsdb ~]#cat /home/oracle/pfileywrac20240108.ora
--更改db_files参数(sid='*' 1个节点执行 2个节点都生效,不用2个节点都执行更改参数语句)
SQL> alter system set db_files=5000 sid='*' scope=spfile ;
System altered.
--节点1关库
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
--节点1启库
SQL> startup
ORACLE instance started.
Total System Global Area 1.6729E+11 bytes
Fixed Size 2262368 bytes
Variable Size 3.2212E+10 bytes
Database Buffers 1.3475E+11 bytes
Redo Buffers 321286144 bytes
ORA-01105: mount is incompatible with mounts by other instances
ORA-01174: DB_FILES is 5000 buts needs to be 200 to be compatible
shutdown immediate是关闭1个节点的操作,第二个节点参数未生效,RAC场景下需要2个节点参数都生效方可启库成功。分别查2个节点的状态
--节点1
SQL> select status from v$instance;
STATUS
------------------------------------
STARTED
--节点2
SQL> select status from v$instance;
STATUS
------------------------------------
open
采用srvctl的方式重启库,具体步骤如下:
--在open状态的节点上 备份当前的参数文件(备份的目的是规避重启失败)
SQL> create pfile='/home/oracle/pfileywrac20240108.ora' from spfile;
--查看备份的参数文件
[oracle@gsrac2 ~]#cat /home/oracle/pfileywrac20240108.ora
--修改参数
SQL> alter system set db_files=5000 sid='*' scope=spfile ; #1个节点执行,所有实例生效
--重启数据库 法一(建议)
su - grid
crsctl stat res -t #查集群状态
srvctl stop database -d racdb #1个节点操作,两个节点的数据库实例都会关闭
srvctl start database -d racdb #1个节点操作,两个节点的数据库实例都会启动
srvctl status database -d racdb #查看集群数据库状态
crsctl stat res -t #查集群状态
sid='*'是指在所有实例上生效
--重启数据库 法二
su - oracle
SQL> shutdown immediate #节点1和节点2分别执行
SQL> startup #节点1和节点2分别执行
法二场景必须按顺序操作,不然提示如下报错:
ORA-01105: mount is incompatible with mounts by other instances
ORA-01174: DB_FILES is 5000 buts needs to be 200 to be compatible
1、更改参数前先备份参数文件,为规避万一启库失败好回退。
2、集群中shutdown immediate 是关闭1个实例,其他实例依然是open状态
作为专业人员是不该出现这低级错误的,果真是基础不牢,地动山摇。还得多巩固多实验写文档,按规范的步骤操作,毕竟现在需要掌握的库类别多了,记忆力也不如从前了。