ORA-00059 maximum number of DB_FILES exceeded
2018-11-28ERROR at line 1:
ORA-00059: maximum number of DB_FILES exceeded
1、创建表空间时错误
CREATE TABLESPACE VIEWER_INVITE_DATA_TS datafile '/data6/oracle/viewer_invite_data_ts_201812_1.dbf' SIZE 512M AUTOEXTEND ON NEXT 256M MAXSIZE UNLIMITED BLOCKSIZE 8K
*
2、show parameter db_files
db_files integer 200
alter system set db_files=800 scope=spfile;(pfile/both)
增加数量需要重启
conn /as sysdba
create pfile from spfile;
shutdown immediate
startup
由此可看出db_files值为200,如果数据库中数据文件数达到或超过200,就需要更改该参数了。
现有datafiles数量:
select count(file_name) from dba_data_files;
select count(1) from dba_data_files;
3、更改db_files有两种情况:
- 如果控制文件中定义的maxdatafiles以及系统允许打开的文件数值大于200,则可以通过alter方式来修改db_files的值
- 如果控制文件中maxdatafiles值等于200,则需要重建控制文件来修改maxdatafiles值。
4、察看MAXDATAFILES 方法
SQL>alter database backup controlfile to trace;
到$ORACLE_BASE/admin/db_name/udump下面查找最新生成的trc文件
$grep –i MAXDATAFILES boss_ora_4310.trc
MAXDATAFILES 200
系统允许打开文件数可用ulimit –a察看
$ulimit –a
open files (-n) 1024
5、oracle 9i 控制文件 maxdatafiles 会自动扩展 ,自动扩展的值不能超过db_files,所以我们在规划数据库时,db_files的值一定要设置比较大。
当使用CREATE DATABASE命令或CREATE CONTROFILE命令,MAXDATAFILES参数决定了控制文件中关于数据文件的大小尺寸——对控制文件的大小也有影响。但是,如果添加一个数据文件时,其编号已经超出了MAXDATAFILES的设定值,但是小于或等于DB_FILES的设定值,控制文件会自动扩展以满足容纳更多的数据文件信息。
有人测试过,得出如下结论: 如果 db_files 足够,每当超过控制文件中的 maxdatafiles,maxdatafiles会翻倍增加(动态增加)。有兴趣可以自己测试一下。
假设,db_files = 600 ,通过trace查看控制文件中的 maxdatafiles =500 ,当数据文件增加到 501个的时候,maxdatafiles 会自动扩展到 500 *2= 1000 , 我们增加文件数到 601的时候, 系统会因为 db_files=600而报错 ORA-00059: 超过 DB_FILES 的最大值。 我们需要增加 db_files 参数值,不能动态更改,需要重新启动数据库生效。 比如增加到 db_files = 4096, 那么当数据文件增加到 1001 时, 控制文件中的 maxdatafiles 会自动翻倍,增加到 1000 * 2 = 2000, 以此类推, 文件增加到 2001 时,没有超过db_file 4096 , 不会报错,但是控制文件中的 maxdatafiles 会翻倍,增加到 2000*2=4000 个 。
6、修改控制文件MAXDATAFILES 200
alter database backup controlfile to trace;
在$ORACLE_BASE/admin/db_name/udump(或者$ORACLE_BASE/diag/rdbms/talk99db/talk99db/trace)目录下新生成的trc文件oracle/admin/boss/udump/boss_ora_4310.trc
根据上述文件创建控制文件生成脚本recreate_control.sql
control_files string
/u02/oracle/oradata/talk99db/control01.ctl,
/u02/oracle/fast_recovery_area/talk99db/control02.ctl
SQL>shutdown
mv /u02/oracle/oradata/talk99db/control01.ctl /u02/oracle/oradata/talk99db/control01.ctl.bak
mv /u02/oracle/fast_recovery_area/talk99db/control02.ctl /u02/oracle/fast_recovery_area/talk99db/control02.ctl.bak
创建新的控制文件
$sqlplus /nolog
SQL>conn / as sysdba
SQL>@~/recreate_control.sql
ORACLE instance started.
RECOVER DATABASE USING BACKUP CONTROLFILE
resetlogs方式启动数据库
SQL> ALTER DATABASE OPEN RESETLOGS;
Database altered
恢复临时表空间
SQL> ALTER TABLESPACE TEMP ADD TEMPFILE '/oracle/oradata/boss/temp01.dbf'
2 SIZE 20971520 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;
分类:数据库 | 标签: |