从10g的R2版本开始,控制文件中设置的最大值,不再是数据库中的限制,当数据库的实际值超过了控制文件中的设置,控制文件中的值会自动扩展。
在9i和10.1的时候,Oracle的控制文件中设置的参数确定了数据库的一些限制,比如数据库可以打开的最大数据文件数,数据库使用的最大日志组个数,每个日志组最大成员数等等。这个限制是数据库所能达到的最大值,如果超过了这个限制,则数据库会报错:
SQL> select type, record_size, records_total, records_used
2 from v$controlfile_record_section
3 where type = ‘REDO LOG‘;
TYPE RECORD_SIZE RECORDS_TOTAL RECORDS_USED
- -
REDO LOG 72 5 3
SQL> select group#, thread#, sequence#, bytes
2 from v$log;
GROUP# THREAD# SEQUENCE# BYTES
1 1 41 536870912
2 1 43 536870912
3 1 42 536870912
SQL> select group#, member from v$logfile;
GROUP# MEMBER
1 /data/oradata/bjtest/redo01.log
2 /data/oradata/bjtest/redo02.log
3 /data/oradata/bjtest/redo03.log
SQL> alter database add logfile group 4 ‘/data/oradata/bjtest/redo04.log‘ size 512m;
数据库已更改。
SQL> alter database add logfile group 5 ‘/data/oradata/bjtest/redo05.log‘ size 512m;
数据库已更改。
SQL> alter database add logfile group 6 ‘/data/oradata/bjtest/redo06.log‘ size 512m;
alter database add logfile group 6 ‘/data/oradata/bjtest/redo06.log‘ size 512m
*
ERROR 位于第 1 行:
ORA-01185: 日志文件组号6无效
SQL> select * from v$version;
BANNER
Oracle9i Enterprise Edition Release 9.2.0.4.0 - 64bit Production PL/SQL Release 9.2.0.4.0 - Production
CORE 9.2.0.3.0 Production
TNS for Linux: Version 9.2.0.4.0 - Production
NLSRTL Version 9.2.0.4.0 - Production
可以看到在9i中,是不能超过控制文件中设置的最大值的,如果要解决这个问题,唯一的方法就是重建控制文件。
而在10.2中Oracle做出了改进,当数据库的兼容性初始化参数COMPATIBLE设置为10.2.0.1.0以上时,这个值会随着实际的使用情况而扩大,而如果COMPATIBLE设置的值是10.1.0.1.0以下时,即使是10.2版本的数据库,也不会自动扩展控制文件的限制条件:
SQL> select * from v$version;
BANNER
-
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bi
PL/SQL Release 10.2.0.3.0 - Production
CORE 10.2.0.3.0 Production
TNS for Linux: Version 10.2.0.3.0 - Production
NLSRTL Version 10.2.0.3.0 - Production
SQL> show parameter compatible
NAME TYPE VALUE
-
compatible string 10.1.0.0.0
这是一个10.2.0.3的数据库,不过数据库兼容性设置为10.1,下面看看这个数据库的表现:
SQL> select type, record_size, records_total, records_used
2 from v$controlfile_record_section
3 where type = ‘REDO LOG‘;
TYPE RECORD_SIZE RECORDS_TOTAL RECORDS_USED
- -
REDO LOG 72 5 3
SQL> select group#, thread#, sequence#, bytes
2 from v$log;
GROUP# THREAD# SEQUENCE# BYTES
1 1 1 104857600
2 1 0 104857600
3 1 0 104857600
SQL> col member format a60
SQL> select group#, member from v$logfile;
GROUP# MEMBER
1 /data/oradata/test102/redo01.log
2 /data/oradata/test102/redo02.log
3 /data/oradata/test102/redo03.log
SQL> alter database add logfile group 4 ‘/data/oradata/test102/redo04.log‘ size 100m;
Database altered.
SQL> alter database add logfile group 5 ‘/data/oradata/test102/redo05.log‘ size 100m;
Database altered.
SQL> alter database add logfile group 6 ‘/data/oradata/test102/redo06.log‘ size 100m;
alter database add logfile group 6 ‘/data/oradata/test102/redo06.log‘ size 100m
*
ERROR at line 1:
ORA-01185: logfile group number 6 is invalid
错误信息和9i中一致,下面将兼容性设置改为10.2:
SQL> alter system set compatible = ‘10.2.0.1.0‘ scope = spfile;
System altered.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 851443712 bytes
Fixed Size 2076496 bytes
Variable Size 226492592 bytes
Database Buffers 616562688 bytes
Redo Buffers 6311936 bytes
Database mounted.
Database opened.
SQL> show parameter compatible
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/35489/viewspace-631744/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/35489/viewspace-631744/
本文介绍了从Oracle 10g R2开始,控制文件中的某些限制不再固定不变,而是可以根据数据库的实际需求自动扩展。文章通过实例对比了不同版本下兼容性参数对控制文件限制的影响。

被折叠的 条评论
为什么被折叠?



