oracle中在创建表空间的时候经常会遇到数据文件超过就大数的限制,如何解决 这个问题呢?
这个问题受两个参数的限制一个是maxdatafiles,一个是db_files。maxdatafiles在控制文件中指定,db_files在参数文件中指定,一般db_files<=maxdatafiles:
select count(*) from dba_data_files;
当查询已经达到db_files时,需要修改db_files,把这个值调大。修改方法是,在8i中,在init$ORACLE_SID.ora指定这个值即可,如在文件末尾添加 db_files=xxx,然后重启数据库即可,在9i中如果是使用spfile参数文件的话,使用下面的sql:lter system set db_files=xxx scope=both; 即可。
当db_files达到maxdatafiles的值时,就要修改maxdatafiles,把这个值调大,因为这个参数值在控制文件中指定,要修改的话,就要 重建控制文件,方法如下:
- 备份控制文件
sqlplus "/ as sysdba"
alter database backup controlfile to trace;
show parameter user_dump_dest;
- 修改生重建控制文件的脚本
到user_dump_dest参数指定的目录查看刚才生成的trace文件,把它改名为 create_control.sql,用vi修改这个文件,把注释以及无关的文件描述删除后保存。
CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS NOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG' SIZE 50M,
GROUP 2 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG' SIZE 50M,
GROUP 3 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03.LOG' SIZE 50M
DATAFILE
'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF',
'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF',
'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF',
'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF',
'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF',
'E:\ORACLE\DATE\ZMCS.ORA',
'E:\ORACLE\DATE\GJ.ORA',
'E:\ORACLE\DATE\FAXIN.ORA',
'E:\ORACLE\DATE\WWW.ORA',
'E:\ORACLE\DATE\CRE.ORA',
'E:\ORACLE\DATE\CRE1.ORA',
'E:\ORACLE\DATE\ZHENGJIA.ORA'
CHARACTER SET ZHS16GBK
;
修改maxdatafiles参数的值,把它调大到你所要的值。
- 重建控制文件
sqlplus /nolog
sql>connect internal
sql>shutdown immediate
sql>@ctl.sql
sql>alter database open;
此时数据库已按新的参数运行。