现在的位置: 首页 > 综合 > 正文

DATAFILE与MAXDATAFILES的自增长

2014年02月01日 ⁄ 综合 ⁄ 共 3430字 ⁄ 字号 评论关闭

     Oracle中当数据文件的个数超出了控制文件中MAXDATAFILES的个数时,从ORACLE8以后控制文件中MAXDATAFILES的个数会自动增长。不必重建控制文件

 

kccrsz: expanded controlfile message in "alert.log" [ID 101020.1]中的描述

 

Starting in Oracle8 the controlfile is automatically expanded. A new datafile is added beyond the maxdatafiles limited

specified  in the control file. 

 

This also happens if new records are added to the "log_history" section of  the control files and there are no entries that could be replaced. 

 

The routine that performs the expansion writes this message to the alert log. The messages specifies the section that was expanded and the amount of the expansion. Please note that this message cannot be turned off.

 

The automatic expansion only occurs up to the limit of the "init.ora" parameter"DB_FILES".
 
下面用实验来模拟一下: 

 

SQL*Plus: Release 11.2.0.1.0 Production on 星期六 4月 9 23:54:58 2011

--1.转储控制文件
SQL> alter database backup controlfile to trace ;
数据库已更改。

 

alert*.log中记录了转储控制文件的位置

d:/oracle/liangwei/diag/rdbms/liangwei/liangwei/trace/liangwei_ora_3736.trc

 

--2.在liangwei_ora_3736.trc中发现控制文件中MAXDATAFILES的个数为100
CREATE CONTROLFILE REUSE DATABASE "LIANGWEI" RESETLOGS  ARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292

 

--3.重建控制文件,将MAXDATAFILES修改为10
SQL>STARTUP NOMOUNT
SQL> CREATE CONTROLFILE REUSE DATABASE "LIANGWEI" NORESETLOGS  ARCHIVELOG
  2      MAXLOGFILES 16
  3      MAXLOGMEMBERS 3
  4      MAXDATAFILES 10
  5      MAXINSTANCES 8
  6      MAXLOGHISTORY 292
  7  LOGFILE
  8    GROUP 1 'D:/ORACLE/LIANGWEI/ORADATA/LIANGWEI/REDO01.LOG'  SIZE 50M BLOCKSIZE 512,
  9    GROUP 2 'D:/ORACLE/LIANGWEI/ORADATA/LIANGWEI/REDO02.LOG'  SIZE 50M BLOCKSIZE 512,
 10    GROUP 3 'D:/ORACLE/LIANGWEI/ORADATA/LIANGWEI/REDO03.LOG'  SIZE 50M BLOCKSIZE 512
 11  -- STANDBY LOGFILE
 12  DATAFILE
 13    'D:/ORACLE/LIANGWEI/ORADATA/LIANGWEI/SYSTEM01.DBF',
 14    'D:/ORACLE/LIANGWEI/ORADATA/LIANGWEI/SYSAUX01.DBF',
 15    'D:/ORACLE/LIANGWEI/ORADATA/LIANGWEI/UNDOTBS01.DBF',
 16    'D:/ORACLE/LIANGWEI/ORADATA/LIANGWEI/USERS01.DBF',
 17    'D:/ORACLE/LIANGWEI/ORADATA/LIANGWEI/EXAMPLE01.DBF',
 18    'D:/ORACLE/LIANGWEI/ORADATA/LIANGWEI/TBS_REPORT1.DBF',
 19    'D:/ORACLE/TEST02.DBF',
 20    'D:/ORACLE/TEST01.DBF'
 21  CHARACTER SET AL32UTF8
 22;

 

 

SQL> show parameter db_files

NAME       TYPE        VALUE
---------- ----------- -------
db_files   integer     200  

 

--4.数据库中目前数据文件数为8
SQL> SELECT COUNT(1) FROM Dba_Data_Files;

  COUNT(1)
----------
        8

--5.添加数据文件到MAXDATAFILES的限制,看看能否添加成功。       

SQL> alter tablespace  TEST  add DATAFILE 'D:/ORACLE/TEST09.DBF' size  2M;
Tablespace altered

 

SQL> alter tablespace  TEST  add DATAFILE 'D:/ORACLE/TEST10.DBF' size  2M;
Tablespace altered

 

--6.此时数据文件已经超过了MAXDATAFILES的限制,但仍然可以创建成功。
SQL> alter tablespace  TEST  add DATAFILE 'D:/ORACLE/TEST11.DBF' size  2M;
Tablespace altered

 

SQL> alter tablespace  TEST  add DATAFILE 'D:/ORACLE/TEST12.DBF' size  2M;
Tablespace altered

 

SQL> SELECT COUNT(1) FROM Dba_Data_Files;

  COUNT(1)
----------
        12

 

--7.虽然数据文件可以添加成功,但alert*.log里有这样一段描述,说MAXDATAFILES已经增加到42个

 

Sat Apr 09 23:52:23 2011
alter tablespace  TEST  add DATAFILE 'D:/ORACLE/TEST10.DBF' size  2M
Expanded controlfile section 4 from 10 to 42 records
Requested to grow by 32 records; added 1 blocks of records
Completed: alter tablespace  TEST  add DATAFILE 'D:/ORACLE/TEST10.DBF' size  2M

alter tablespace  TEST  add DATAFILE 'D:/ORACLE/TEST11.DBF' size  2M
Completed: alter tablespace  TEST  add DATAFILE 'D:/ORACLE/TEST11.DBF' size  2M

 

再来转储一下控制文件,看看目前的MAXDATAFILES是否与alert*.log中描述的一致

SQL> alter database backup controlfile to trace ;

在转储的trace文件中可以发现控制文件中的MAXDATAFILES已增加到42个。

 

CREATE CONTROLFILE REUSE DATABASE "LIANGWEI" NORESETLOGS  ARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 42
    MAXINSTANCES 8
    MAXLOGHISTORY 292       

          

抱歉!评论已关闭.