ORA-00059: maximum number of DB_FILES exceeded 处理
===========================================================
今天添加数据文件,结果报错,ORA-00059: maximum number of
DB_FILES exceeded 。
---------------
数据库参数显示,db_files 设置为 200, 而
select count(*) from v$datafile; 之后得到的数据也是 200 , 说明已经达到了设置的最大值。
SQL> show parameter db_files
NAME TYPE VALUE
------------------------------------ -----------
------------------------------
db_files integer 200
SQL>
解决办法:
先不要shutdown immediate
Sql>alter system set db_files=1000(最大1024) scope=spfile;
Sql>shutdown immediate
Sql>startup
即可
以下参考:
不过通过 SQL> alter database backup controlfile to trace ;
在udump下面找到控制文件文本,查看发现 MAXDATAFILES 1024 , 如下面
:
# be invalidated. Use this only if online logs are damaged.
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS ARCHIVELOG
-- SET STANDBY TO MAXIMIZE PERFORMANCE
MAXLOGFILES 192
MAXLOGMEMBERS 3
MAXDATAFILES 1024
MAXINSTANCES 32
MAXLOGHISTORY 3857
LOGFILE
GROUP 1 (
'/ocfs_ctrl_redo/orcl/redo01.log',
'/ocfs_data/orcl/redo01b.log'
) SIZE 100M,
由于db_files 参数值 200没有超过 maxdatafiles 1024 的大小,所以可
以通过直接加大参数db_files 值来防止此错误出现,以便正确加入数据文
件。 但是如果 db_files 已经设置和maxdatafiles 一样大小了,
报错ORA-00059, 那么就只有修改控制文件中的值了,需要重新生成控制文
件。使用 alter database backup controlfile to trace ,
到你的udump 目录下找到这个刚刚生成的trc文件,去掉其中的解释部分,
保留Create controlfile 部分,编辑此文件,增加MAXDATAFILES 的值,
然后关闭数据库shutdown immediate , 全备份一次数据库, 将现有的控
制文件备份到其他地方,然后从控制文件目录删除,假设将编辑好的trc文
件命名为 recreate_control.sql ; 那么我们现在可以执行重新建立控制
文件了。 注意修改的trc 文件开头都会有 STARTUP NOMOUNT 。
SQL> @recreate_control.sql
SQL> alter database open noresetlogs;
如果你收到了 Statement processed 的反馈信息,那么生效 。