10g R2 中控制檔案自動擴充套件 - Expanded controlfile section

tolywang發表於2010-02-17


從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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章