ITPub博客

首页 > 数据库 > Oracle > MAXDATAFILES 和 DB_FILES 参数探究

MAXDATAFILES 和 DB_FILES 参数探究

原创 Oracle 作者:Darren_Guo 时间:2015-07-30 14:57:56 0 删除 编辑
   MAXDATAFILES 和 DB_FILES是用来限制数据文件数量的参数,MAXDATAFILES是在创建数据库的时候指定,存储于控制文件中,DB_FILES存储于参数文件中,
是静态参数,修改
DB_FILES需要重启数据库。下面对这两个参数的几个重要方面进行讨论。
  一、在RAC中能否滚动修改
 DB_FILES
   DB_FILES是一个静态参数,修改是需要重启才能生效的,但是在RAC数据库中能不能分别对单个实例进行修改,然后分别重启各个实例?或者修改时指定sid='*',
然后分别重启每个实例,保证数据库持续提供服务?这个问题的结论很无情,上面的方法都不行。如果采用上面的方法修改DB_FILES,再重启实例时将出现下面的
错误:
  1. ORA-01105: mount is incompatible with mounts by other instances
  2. ORA-01174: DB_FILES is 300 buts needs to be 200 to be compatible
   结论:修改DB_FILES参数必须同时重启整个数据库,因为Oracle要求这个参数在数据库范围内是一致的,不能在RAC中进行滚动修改。
  在RAC中,还有下面的几个参数也是要求在数据库范围内是一致的:ACTIVE_INSTANCE_COUNT,CLUSTER_DATABASE_INSTANCES, COMPATIBLE, CONTROL_FILES,  DB_NAME, DB_UNIQUE_NAME, UNDO_MANAGEMENT。

  二、修改MAXDATAFILES参数是否需要重建控制文件
  前文已经提到,MAXDATAFILES参数是存储在控制文件中的,那么如果数据文件的数量达到了MAXDATAFILES值,要修改MAXDATAFILES值需要重建控制文件吗?下面
对这个问题进行探究:
  实验环境为11.2.0.3:
  1. SQL> select * from v$version;
  2. BANNER
  3. --------------------------------------------------------------------------------
  4. Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
  5. PL/SQL Release 11.2.0.3.0 - Production
  6. CORE    11.2.0.3.0    Production
  7. TNS for Linux: Version 11.2.0.3.0 - Production
  8. NLSRTL Version 11.2.0.3.0 - Production
     DB_FILES目前为200:
  1. SQL> show parameter db_files

  2. NAME                 TYPE     VALUE
  3. ------------------------------------ ----------- ------------------------------
  4. db_files             integer     200
    MAXDATAFILES目前为100:

  1. SQL> oradebug setmypid;
  2. Statement processed.
  3. SQL> oradebug tracefile_name;
  4. /oracle/app/oracle/diag/rdbms/gyl/gyl/trace/gyl_ora_2517.trc

  5. SQL> alter database backup controlfile to trace;

  1. more /oracle/app/oracle/diag/rdbms/gyl/gyl/trace/gyl_ora_2517.trc
  2. ......省略部分输出
  3. CREATE CONTROLFILE REUSE DATABASE "GYL" NORESETLOGS NOARCHIVELOG
  4.     MAXLOGFILES 16
  5.     MAXLOGMEMBERS 3
  6.     MAXDATAFILES 100
  7.     MAXINSTANCES 8
  8.     MAXLOGHISTORY 292
    下面向数据库中添加数据文件,观察数据文件数量能到达多少:

  1. --使用下面的shell脚本生成添加数据文件的语句
  2. # !/bin/bash
  3. # echo "add tablespace"
  4. for ((i=1;i<200;i++))
  5. do
  6. echo "alter tablespace test add datafile '/oradata/gyl/test${i}.dbf' size 2m;">>/tmp/add_datafile.sql
  7. done
  --添加数据文件
  1. SQL>@/tmp/add_datafile.sql
  2. ......省略部分输出

  3. alter tablespace test add datafile '/oradata/gyl/test194.dbf' size 2m
  4. *
  5. ERROR at line 1:
  6. ORA-00059: maximum number of DB_FILES exceeded
  7. ......出现报错退出后,查询数据文件的数量:

  8. SQL> select count(*) from dba_data_files;

  9.   COUNT(*)
  10. ----------
  11.        200
    数据文件的数量已经超过MAXDATAFILES,到达了DB_FILES限制时才出现报错,注意,这里没有查询临时文件的数量,因为DB_FILES不对临时文件进行限制。再观察此时的MAXDATAFILES参数值:

  1. SQL> oradebug setmypid;
  2. Statement processed.
  3. SQL> oradebug tracefile_name;
  4. /oracle/app/oracle/diag/rdbms/gyl/gyl/trace/gyl_ora_2724.trc
  5. SQL> alter database backup controlfile to trace;

  6. Database altered.

  7. more /oracle/app/oracle/diag/rdbms/gyl/gyl/trace/gyl_ora_2724.trc
  8. ......省略部分输出
  9. CREATE CONTROLFILE REUSE DATABASE "GYL" NORESETLOGS NOARCHIVELOG
  10.     MAXLOGFILES 16
  11.     MAXLOGMEMBERS 3
  12.     MAXDATAFILES 200
  13.     MAXINSTANCES 8
  14.     MAXLOGHISTORY 292
    此时的MAXDATAFILES参数值已经自动变为200,与DB_FILES值相同。
   继续上面的实验,接下来观察如果修改DB_FILES,MAXDATAFILES参数会不会立即进行调整,以便适应DB_FILES参数:

  1. SQL> alter system set db_files=300 scope=spfile;

  2. SQL> shutdown immediate;

  3. SQL> startup

  4. SQL> show parameter db_files

  5. NAME                 TYPE     VALUE
  6. ------------------------------------ ----------- ------------------------------
  7. db_files             integer     300
  8. SQL> oradebug setmypid
  9. Statement processed.
  10. SQL> oradebug tracefile_name;
  11. /oracle/app/oracle/diag/rdbms/gyl/gyl/trace/gyl_ora_28531.trc
  12. SQL> alter database backup controlfile to trace;
  13. more /oracle/app/oracle/diag/rdbms/gyl/gyl/trace/gyl_ora_28531.trc
  14. ......省略部分输出
  15. CREATE CONTROLFILE REUSE DATABASE "GYL" RESETLOGS NOARCHIVELOG
  16.     MAXLOGFILES 16
  17.     MAXLOGMEMBERS 3
  18.     MAXDATAFILES 200
  19.     MAXINSTANCES 8
  20.     MAXLOGHISTORY 292
   结论:在oracle 8i 及以上版本中,
MAXDATAFILES参数会自动调整达到DB_FILES值,因此不需要重建控制文件来修改MAXDATAFILES参数,但是
修改DB_FILES的值后MAXDATAFILES参数不会立即进行调整,而是会在有新的数据文件添加到数据库且超过了MAXDATAFILES时进行调整。

   
   三、在Oracle 8i以后,MAXDATAFILES参数是不是已经没有限制
   从前面的结论可以看出,
MAXDATAFILES参数能够自动调整以适应DB_FILES,但是MAXDATAFILES参数是有上限的,不能无限的增大。在10g和11g中,
MAXDATAFILES的上限为65534。DB_FILES的上限也是65534,DB_FILES设置超过65534后数据库将不能启动:

  1. SQL> alter system set db_files=65535 scope=spfile;

  2. System altered.

  3. SQL> shutdown immediate;
  4. Database closed.
  5. Database dismounted.
  6. ORACLE instance shut down.
  7. SQL> startup
  8. ORA-01131: DB_FILES system parameter value 65535 exceeds limit of 65534
     结论:10g、11g中MAXDATAFILES的上限为65534,不能超过这个限制。
     除了MAXDATAFILES外,Oracle数据库中还存在一些其他限制,具体如下:
    10g限制

CREATE CONTROLFILE and CREATE DATABASE Parameters

Parameter Default Maximum Value

MAXLOGFILES

16

255

MAXLOGMEMBERS

2

5

MAXLOGHISTORY

100

65534

MAXDATAFILES

30

65534

MAXINSTANCES

1

63



File Size Limits

File Type Platform

Data files

Any

4,194,303 multiplied by the value of the DB_BLOCK_SIZE parameter

Import/Export files and SQL*Loader files

Tru64 UNIX

16 TB

 

AIX, HP-UX, Linux, and Solaris: 32-bit with 32-bit files

2,147,483,647 bytes

 

AIX, HP-UX, Linux, Mac OS X, and Solaris: 64-bit files

Unlimited

Control files

HP-UX, Linux, Mac OS X, and Solaris

20000 database blocks

 

AIX

10000 database blocks

 

Tru64 UNIX

19200 database blocks



11g限制

Table C-1 CREATE CONTROLFILE and CREATE DATABASE Parameters

Parameter Default Maximum Value

MAXLOGFILES

16

255

MAXLOGMEMBERS

2

5

MAXLOGHISTORY

100

65534

MAXDATAFILES

30

65534

MAXINSTANCES

1

1055



File Size Limits

File Type Platform File size limit

Data files

Any

4,194,303 multiplied by the value of the DB_BLOCK_SIZE parameter

Import/Export files and SQL*Loader files

AIX, HP-UX, Linux, and Solaris: 32-bit with 32-bit files

2,147,483,647 bytes

 

AIX, HP-UX, Linux, and Solaris: 64-bit files

Unlimited

Note: File size is limited by limits allowed by the operating system on different file systems.

Control files

HP-UX, Linux, and Solaris

20000 database blocks

 

AIX

10000 database blocks







来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29821678/viewspace-1756675/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: 一个索引惹的祸
请登录后发表评论 登录
全部评论

注册时间:2014-08-23

  • 博文量
    29
  • 访问量
    505850