问题描述
增加表空间数据文件报错:
alter tablespace ENTSERVICE add datafile '/oradata/topicis/entservice02.dbf' size 1M autoextend on NEXT 1M MAXSIZE UNLIMITED;
ORA-00059: 超出 DB_FILES 的最大值
脚本行 43,语句行 1
问题原因
Oracle数据库默认数据文件总数量为200个,超过200个就无法新建数据文件。
分析过程
--查数据库默认数据文件数量参数
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
--修改参数
SQL> alter system set db_files=5000 scope=spfile;
--重启库
SQL> shutdown immediate
SQL> startup
集群
--备份当前的参数文件(备份的目的是规避重启失败)
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
注意事项
集群中shutdown immediate 是关闭1个实例,其他实例依然是open状态