MOS 参考文章
MAXDATAFILES and DB_FILES Parameters (文档 ID 119507.1)
ORA-00059报错描述
- 数据库版本:11gR2双节点RAC
- 添加数据文件时,出现 ORA-00059 报错,显示DB_FILES参数已达到最大
ORA-00059: maximum number of DB_FILES exceeded
Cause: The value of the DB_FILES initialization parameter was exceeded.
Action: Increase the value of the DB_FILES parameter and warm start.
- 通过增加DB_FILES参数的值,重启数据库实例解决该报错
DB_FILES参数分析
DB_FILES 参数介绍
- 1)DB_FILES 指定可以为数据库打开的数据库文件的最大数量,受操作系统限制,包括由 ADD DATAFILE 语句添加的文件
SQL> show parameter db_files
NAME TYPE VALUE
------------------------ ------- ----------
db_files integer 200
DB_FILES 值为 200,如果数据库中数据文件数达到或超过200,就需要更改该参数
- 2)更改 DB_FILES 参数的方式:如果系统允许打开的文件数值大于 200,则可以通过 alter 方式来修改 DB_FILES 的值;因此,需要查看系统允许打开的文件数
[oracle@rac1 ~]$ ulimit -a
open files (-n) 65536
- 3)对于 oracle 8i 及以上版本,当数据文件的个数超过了控制文件maxdatafiles参数的限制时,maxdatafiles参数值会自动的增加,自动增加的最大值就是DB_FILES参数的值
db_files参数测试一
- 数据库版本:11gR2双节点RAC
- 1)当前测试环境,数据库DB_FILES参数是30
SQL> show parameter db_files
NAME TYPE VALUE
----------------------- ----------- ------------------------------
db_files integer 30
- 备份控制文件,去相应trace文件查看MAXDATAFILES的值,当前值为20
SQL> alter database backup controlfile to trace;
SQL> show parameter user_dump_dest
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS NOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 20
MAXINSTANCES 8
MAXLOGHISTORY 292
- 2)查看数据文件的数量
SQL> select count(*) from dba_data_files;
COUNT(*)
----------
10
- 3)向USERS表空间持续添加数据文件,当数据文件数量超过20时,可以发现控制文件中的 MAXDATAFILES 自动增加
SQL> alter tablespace users add datafile '+DATA' size 10M AUTOEXTEND OFF;
Tablespace altered.
SQL> select count(*) from dba_data_files;
COUNT(*)
----------
21
- 4)数据库alert日志中会有记录
Expanded controlfile section 4 from 20 to 50 records
Requested to grow by 30 records;added 1 blocks of records
- 5)再次添加数据文件,数据文件总数达到 30 以后,再添加就会报错ORA-00059
SQL> select count(*) from dba_data_files;
COUNT(*)
----------
30
SQL> alter tablespace users add datafile '+DATA' size 10M AUTOEXTEND OFF;
alter tablespace users add datafile '+DATA' size 10M AUTOEXTEND OFF
*
ERROR at line 1:
ORA-00059: maximum number of DB_FILES exceeded
- 6)增加 DB_FILES 的值
SQL> alter system set DB_FILES=200 sid='*' scope=spfile;
System altered.
- 7)db_files参数在两节点需要保持一致,修改参数后,需要同时重启两节点实例,使该参数生效
[oracle@rac1 dbs]$ srvctl stop database -d rac
[oracle@rac1 dbs]$ srvctl start database -d rac
- 8)此时,可以继续添加数据文件
SQL> alter tablespace users add datafile '+DATA' size 10M AUTOEXTEND OFF;
Tablespace altered.
SQL> select count(*) from dba_data_files;
COUNT(*)
----------
31
db_files参数测试二
- 如果 DB_FILES 参数大于操作系统的限制,再启动数据库时就会报错
- 1)修改 DB_FILES 参数为 70000
SQL> alter system set db_files=70000 sid='*' scope=spfile;
System altered.
- 2)重启数据库实例,会出现报错
[oracle@rac1 ~]$ srvctl stop database -d rac
[oracle@rac1 dbs]$ srvctl start database -d rac
PRCR-1079 : Failed to start resource ora.rac.db
CRS-5017: The resource action "ora.rac.db start" encountered the following error:
ORA-01078: failure in processing system parameters
ORA-01131: DB_FILES system parameter value 70000 exceeds limit of 65534
. For details refer to "(:CLSN00107:)" in "/u01/app/11.2.0/grid/log/rac2/agent/crsd/oraagent_oracle/oraagent_oracle.log".
CRS-5017: The resource action "ora.rac.db start" encountered the following error:
ORA-01078: failure in processing system parameters
ORA-01131: DB_FILES system parameter value 70000 exceeds limit of 65534
. For details refer to "(:CLSN00107:)" in "/u01/app/11.2.0/grid/log/rac1/agent/crsd/oraagent_oracle/oraagent_oracle.log".
CRS-2674: Start of 'ora.rac.db' on 'rac1' failed
CRS-2674: Start of 'ora.rac.db' on 'rac2' failed
CRS-2632: There are no more servers to try to place resource 'ora.rac.db' on that would satisfy its placement policy
- 3)解决报错
1、手动创建 PFILE,然后修改PFILE文件中参数 DB_FILES的值为 200
SQL> create pfile='/home/oracle/rac.init' from spfile='+DATA/rac/spfilerac.ora';
注意:在 RAC 中创建 PFILE 时要指定位置;在 $ORACLE_HOME/dbs 下面有一个 init
[oracle@rac1 dbs]$ cat initrac1.ora
SPFILE='+DATA/rac/spfilerac.ora'
2、使用 PFILE 启动数据库,然后重新生成 SPFILE
SQL> startup pfile='/home/oracle/rac.init'
SQL> show parameter spfile
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string
SQL> create spfile='+DATA/rac/spfilerac.ora' from pfile='/home/oracle/rac.init';
3、重启所有的数据库实例
[oracle@rac1 ~]$ srvctl stop database -d rac
[oracle@rac1 ~]$ srvctl start database -d rac
4、查看 SPFILE 和 DB_FILES 参数的信息
SQL> show parameter spfile
NAME TYPE VALUE
----------------------- ----------- ------------------------------
spfile string +DATA/rac/spfilerac.ora
SQL> show parameter db_files
NAME TYPE VALUE
----------------------- ----------- ------------------------------
db_files integer 200
最后修改时间:2022-11-14 15:21:00
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




