客户要求给经分库的几个表空间中增加数据文件,于是把脚本写好之后,就开始执行...,在进行的一半时,数据库报ORA-59错误,见下:
Fri Apr 29 00:08:13 2011
ORA-59 signalled during: alter tablespace TBS_UBI_DW add
datafile '/dev/rv05_data043' size 4090M autoextend off...
Fri Apr 29 00:24:18 2011
alter tablespace TBS_UBI_DW add datafile '/dev/rv05_data043'
size 4090M autoextend off
Fri Apr 29 00:24:32 2011
ORA-59 signalled during: alter tablespace TBS_UBI_DW add
datafile '/dev/rv05_data043' size 4090M autoextend off...
很明显,是由于datafile超出了数据库参数db_files参数值了。
查看当前数据库已有的数据文件数:
SQL> select count(*) from v$datafile;
COUNT(*)
----------
200
查看数据库的参数设置:
SQL> show parameter db_files;
NAMETYPEVALUE
------------------------------------ ----------- ------------------------------
db_filesinteger200
trace下控制文件,检查下控制文件MAXDATAFILES参数设置:
SQL> alter database backup controlfile to trace;
Database altered.
***/udump>more haibi_ora_901226.trc
----省略----
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "HAIBI"
NORESETLOGSNOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 200
MAXINSTANCES 8
MAXLOGHISTORY 18688
----省略----
可以看出db_files和控制文件中的maxdatafiles值均为200,所以添加数据文件失败也就情有可原了...
不过,需要说明的是,自Oracle 9i及之后,db_files是硬限制,控制文件中的maxdatafiles是软限制(主要为了尽可能减小控制文件大小),也就是说,当数据库中的数据文件数超过了控制文件中的参数maxdatafiles值时,控制文件中的maxdatafiles是会自动增加的,但是db_files是静态参数,若需修改,需要重启DB。
处理过程:
1、调整参数db_files:
SQL> alter system set db_files=999 scope=spfile;
System altered.
2、停止数据库
SQL>!lsnrctl stop
SQL>shutdown immediate
3、启动数据库
SQL>!lsrnctl start
SQL>startup
4、确认修改的参数db_files
SQL> show parameter db_files;
NAMETYPEVALUE
------------------------------------ ----------- ------------------------------
db_filesinteger999
5、继续添加数据文件就不会有问题了
[@more@]