ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 关于控制文件的扩展问题 (全面) - Expanded controlfile section

关于控制文件的扩展问题 (全面) - Expanded controlfile section

原创 Linux操作系统 作者:tolywang 时间:2010-04-01 04:07:36 0 删除 编辑

近期发现Oracle10.2.0.4 RAC (Linux AS 5.3) 两个节点的数据库alert log中有报一些控制文件扩展的信息, 具体如下,有些是节点1上的,有些是节点2上的,可以通过thread号看出来:


这是一个还未上线的数据库,目前仅仅偶尔有一些测试数据, 最近好几次出现控制文件扩展,
都是关于archived log 及 log history  (对应控制文件section 11 及section 9 ) ,
参数 control_file_record_keep_time = 7  , 当controlfile 中可以重复使用的部分 log history 及archived log 使用完了预留给他们的slot , 由于 control_file_record_keep_time = 7 ,需要保留 7 天的log ,  不能在控制文件中覆盖掉这些记录  , 所以需要扩展两个section 的大小, 一般每次扩展都是上次大小的2倍, 如果我们设置了 control_file_record_keep_time=0,     controlfile 就没有必要扩展section来保存archive log 信息, 用完预留的 slot 后就开始循环使用而不会扩展了 。

 

Thu Apr  8 22:18:29 2010
Thread 1 advanced to log sequence 197 (LGWR switch)
  Current log# 14 seq# 197 mem# 0: /b2bdata/oracle/oradata/wmb2bprd/redo14a.log
  Current log# 14 seq# 197 mem# 1: /b2bdata1/oracle/oradata/wmb2bprd/redo14b.log
Thu Apr  8 22:18:29 2010
Expanded controlfile section 11 from 112 to 224 records
Requested to grow by 112 records; added 4 blocks of records
Thu Apr  8 22:48:29 2010
Thread 1 advanced to log sequence 198 (LGWR switch)
  Current log# 15 seq# 198 mem# 0: /b2bdata/oracle/oradata/wmb2bprd/redo15a.log
  Current log# 15 seq# 198 mem# 1: /b2bdata1/oracle/oradata/wmb2bprd/redo15b.log

 


Sat Apr 10 20:58:27 2010
Thread 2 advanced to log sequence 247 (LGWR switch)
Current log# 26 seq# 247 mem# 0: /b2bdata/oracle/oradata/wmb2bprd/redo26a.log
Current log# 26 seq# 247 mem# 1: /b2bdata1/oracle/oradata/wmb2bprd/redo26b.log
Sat Apr 10 21:28:26 2010
Expanded controlfile section 9 from 292 to 584 records
Requested to grow by 292 records; added 1 blocks of records
Sat Apr 10 21:28:26 2010
Thread 2 advanced to log sequence 248 (LGWR switch)
  Current log# 19 seq# 248 mem# 0: /b2bdata/oracle/oradata/wmb2bprd/redo19a.log
  Current log# 19 seq# 248 mem# 1: /b2bdata1/oracle/oradata/wmb2bprd/redo19b.log

 


Mon Apr 12 14:58:55 2010
Expanded controlfile section 11 from 448 to 896 records
Requested to grow by 448 records; added 16 blocks of records
Mon Apr 12 15:28:57 2010
Thread 2 advanced to log sequence 332 (LGWR switch)
Current log# 23 seq# 332 mem# 0: /b2bdata/oracle/oradata/wmb2bprd/redo23a.log
Current log# 23 seq# 332 mem# 1: /b2bdata1/oracle/oradata/wmb2bprd/redo23b.log

 

 

Wed Apr 14 10:20:01 2010
Thread 1 advanced to log sequence 461 (LGWR switch)
  Current log# 14 seq# 461 mem# 0: /b2bdata/oracle/oradata/wmb2bprd/redo14a.log
  Current log# 14 seq# 461 mem# 1: /b2bdata1/oracle/oradata/wmb2bprd/redo14b.log
Wed Apr 14 10:50:01 2010
Expanded controlfile section 9 from 584 to 1168 records
Requested to grow by 584 records; added 2 blocks of records
Wed Apr 14 10:50:01 2010
Thread 1 advanced to log sequence 462 (LGWR switch)
  Current log# 15 seq# 462 mem# 0: /b2bdata/oracle/oradata/wmb2bprd/redo15a.log
  Current log# 15 seq# 462 mem# 1: /b2bdata1/oracle/oradata/wmb2bprd/redo15b.log

 

 

 

4/10 backup controlfile trace :


STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "WMB2BPRD" NORESETLOGS  ARCHIVELOG
    MAXLOGFILES 192
    MAXLOGMEMBERS 3
    MAXDATAFILES 2048
    MAXINSTANCES 32
    MAXLOGHISTORY 292
LOGFILE

 

 

4/13 backup controlfile trace :


STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "WMB2BPRD" NORESETLOGS  ARCHIVELOG
    MAXLOGFILES 192
    MAXLOGMEMBERS 3
    MAXDATAFILES 2048
    MAXINSTANCES 32
    MAXLOGHISTORY 584
LOGFILE

 

4/14 backup controlfile trace :

STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "WMB2BPRD" NORESETLOGS  ARCHIVELOG
    MAXLOGFILES 192
    MAXLOGMEMBERS 3
    MAXDATAFILES 2048
    MAXINSTANCES 32
    MAXLOGHISTORY 1168
LOGFILE

 

 

-------------------------------------------------------------------------------------------------------------------------------- 

参考文章:

MAXLOGHISTORY和control_file_record_keep_time
===========================================================
这两个参数都和controlfile有关,也都和log file有关。很容易混淆在一起。

如果你对这两个参数有不清楚的地方,希望这篇文章可以扫除你的疑惑。

这两个参数对应于controlfile中不同的section。存放于完全不同的存储空间内。

MAXLOGHISTORY 对应于”LOG HISTORY ” section. 对应于view v$log_history & v$loghist,单位为log的个数

control_file_record_keep_time 对应于”ARCHIVED LOG” section, 对应于view v$archived_log 单位为keep的天数

这里所指的section可以从v$controlfile_record_section中查到

SQL> select TYPE,RECORDS_TOTAL,RECORDS_USED from v$controlfile_record_section
2 where type in (’LOG HISTORY’,'ARCHIVED LOG’);

TYPE RECORDS_TOTAL RECORDS_USED
——————– ————- ————
LOG HISTORY 907 526
ARCHIVED LOG 447 411

MAXLOGHISTORY 定义了controlfile中可以存储多少个log file的信息,可以从v$loghist, v$log_history中查到

control_file_record_keep_time 定义了controlfile中*至少*要keep多少天的archive log信息,可以从v$archived_log中查到。

我们来做下面这个简单的试验,大致可以明白这两个参数的含义

1. 重建controlfile maxloghistory=100, resetlogs open database,设置control_file_record_keep_time=0
SQL> select TYPE,RECORDS_TOTAL,RECORDS_USED from v$controlfile_record_section
2 where type in (’LOG HISTORY’,'ARCHIVED LOG’);

TYPE RECORDS_TOTAL RECORDS_USED
——————– ————- ————

LOG HISTORY 226 0
ARCHIVED LOG 111 0

这时候看到”LOG HISTORY”预先分配了226个record的空间,RECORDS_USED=0

“ARCHIVED LOG”预先分配了111个record的空间, RECORDS_USED=0

这里 “LOG HISTORY”不是如我们设置的maxloghistory=100那样预分配100个record的空间,是因为controlfile中分配空间以 block为单位的,这里block size为8k,一个record的大小为36 bytes,算下来差不多226个,如果你一开始指定maxloghistory=300,那么oracle会分配两个block,”LOG HISTORY”中与分配的RECORD数将为452左右(可能会有细小的误差)。所以更准确的说,创建controlfile时 maxloghistory的值指定了oracle将预分配多少个block给”LOG HISTORY” section

这里”ARCHIVED LOG”预分配了111个record的空间,”ARCHIVE LOG” section一条记录的大小为584bytes, 计算下来大约为8个block

2. 不断的产生archive log,看这两个存储空间如何扩展

SQL> begin
2 for i in 1..300 loop
3 execute immediate ‘alter system archive log current’;
4 end loop;
5 end;
6 /

PL/SQL procedure successfully completed.

在此过程中,一开始, 两者的RECORDS_USED都不断增加,因为有预留的空间可以使用

TYPE RECORDS_TOTAL RECORDS_USED
——————– ————- ————

LOG HISTORY 226 57
ARCHIVED LOG 111 57

当archive log section中RECORDS_USED到达111时,RECORDS_USED停止增加,log history仍然继续增长直到226

TYPE RECORDS_TOTAL RECORDS_USED
——————– ————- ————

LOG HISTORY 226 146
ARCHIVED LOG 111 111

最后300个archive log产生结束后,log history section存储226条信息,archived log存储111条信息,controlfile没有扩展,size保持不变

没有扩展的原因是我们设置了 control_file_record_keep_time=0, controlfile没有必要扩展来保存archive log 信息,所以用完一开始保留的111个slot后就开始循环使用了。
TYPE RECORDS_TOTAL RECORDS_USED
——————– ————- ————

LOG HISTORY 226 226
ARCHIVED LOG 111 111

3.接下来我们设置control_file_record_keep_time=1,继续生成300个archive logs

SQL> alter system set control_file_record_keep_time=1;

System altered.
SQL> begin
2 for i in 1..300 loop
3 execute immediate ‘alter system archive log current’;
4 end loop;
5 end;
6 /

PL/SQL procedure successfully completed.

在此过程中,一开始两个section就同时扩展了,LOG HISTORY section和ARCHIVED LOG section都扩展了到了原来的两倍大小(后面的试验中始终以2的倍数扩展)。controlfile size变大。

这里因为我们需要至少keep一天的archive log信息,所以archived log section自然要进行扩展。又因为这些archive log的信息同时也要在log history section中有记录,所以log history section也进行了扩展。
TYPE RECORDS_TOTAL RECORDS_USED
——————– ————- ————

LOG HISTORY 453 229
ARCHIVED LOG 223 114

两个section的RECORDS_USED持续增长, 当archived log的RECORDS_USED达到223时,这个section进行了第二次扩展,从223扩到了447,扩大到了原来的两倍大小

此时LOG HISTORY section中仍然有空间存放,所以不需要扩展该section
TYPE RECORDS_TOTAL RECORDS_USED
——————– ————- ————

LOG HISTORY 453 350
ARCHIVED LOG 447 235

当LOG HISTORY section中的 RECORDS_USED增长到453时,该section发生了第二次扩展,从453到907,扩大了一倍,此时ARCHIVE LOG section仍然后可用空间,并没有扩展

TYPE RECORDS_TOTAL RECORDS_USED
——————– ————- ————

LOG HISTORY 907 469
ARCHIVED LOG 447 354

所以从上面看出,两个section的扩展并没有什么关系,当自身需要扩展的时候就扩展一倍大小。MAXLOGHISTORY这个参数随着LOG HISTORY section的扩展而变大。
最后有一些常见的问题和解答:

1.为什么v$log_history和v$archived_log中记录数不一样

上面的试验已经解答了这个问题。这两个view对应于不同的东西,在controlfile中的存储空间也不同。

2. 为什么有时v$archived_log的keep的archive log 的天数大于control_file_record_keep_time所指定的天数

这种情况很常见,例如当系统某段时间很繁忙的时候,生成的archive log比较多,这时候为了keep指定天数的archive log,controlfile进行了大量的扩展,这部分空间扩展后不会回缩,而且是以两倍大小来扩展,所以当系统不是很繁忙的时候,就可以keep更多天的数据

control_file_record_keep_time指定的是至少要keep的天数,并不是说v$archived_log之只保留多少天的archive log

3. 为什么创建controlfile时指定的maxloghistory要小于实际的log history section预留的record数

这个问题前面也解释到了。空间分配以block为单位。准确的说创建controlfile时的maxloghistory规定了大致会预留多少个block,一个block大约可以存放226条记录

4. 如何dump controlfile

选自ixora,原文地址 http://www.ixora.com.au/notes/controlfile_dumps.htm

The contents of the current controlfile can be dumped in text form. to a process trace file in the user_dump_dest directory using the CONTROLF dump. The levels for this dump are as follows.

Dump Level Dump Contains
1 only the file header
2 just the file header, the database info record, and checkpoint progress records
3 all record types, but just the earliest and latest records for circular reuse record types
4 as above, but includes the 4 most recent records for circular reuse record types
5+ as above, but the number of circular reuse records included doubles with each level

For example, the following syntax could be used to get a text dump on the controlfile in the trace file of the current process showing all the controlfile record types but only the oldest and most recent of the circular reuse records.

oradebug setmypid
oradebug dump controlf 3

Of course, the session must be connected AS SYSDBA to use the ORADEBUG facility. However, any session with the ALTER SESSION privilege can use the following event syntax to take the same dump.

alter session set events 'immediate trace name controlf level 3';

上面所说的各个section记录的size就是从dump文件中看出的,我使用的是level 3

***************************************************************************
LOG FILE HISTORY RECORDS
***************************************************************************
(blkno = 0×7b, size = 36, max = 907, in-use = 782, last-recid= 856)
Earliest record:
RECID #75 Recno 756 Record timestamp 08/13/06 23:42:26 Thread=1 Seq#=75 Link-Recid=74
Low scn: 0×0000.01865bef 08/13/06 23:42:26 Next scn: 0×0000.01865bf2
Latest record:
RECID #856 Recno 630 Record timestamp 08/14/06 00:03:45 Thread=1 Seq#=856 Link-Recid=855
Low scn: 0×0000.018665c7 08/14/06 00:03:45 Next scn: 0×0000.018665ca

***************************************************************************
ARCHIVED LOG RECORDS
***************************************************************************
(blkno = 0×86, size = 584, max = 895, in-use = 667, last-recid= 856)
Earliest record:
RECID #190 Recno 863 Record timestamp 08/13/06 23:44:23 Thread=1 Seq#=190
Flags:
Resetlogs scn and time scn: 0×0000.0186593c 08/13/06 23:32:41
filename /oracle/GBPGW/archive/BABY/BABY_190.arc
Low scn: 0×0000.01865d4a 08/13/06 23:44:23 Next scn: 0×0000.01865d4d 08/13/06 23:44:23
Block count=1 Blocksize=512
Latest record:
RECID #856 Recno 634 Record timestamp 08/14/06 00:03:45 Thread=1 Seq#=856
Flags:
Resetlogs scn and time scn: 0×0000.0186593c 08/13/06 23:32:41
filename /oracle/GBPGW/archive/BABY/BABY_856.arc
Low scn: 0×0000.018665c7 08/14/06 00:03:45 Next scn: 0×0000.018665ca 08/14/06 00:03:45
Block count=1 Blocksize=512

 

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

上一篇: [zt] 关于汽车
请登录后发表评论 登录
全部评论
Oracle , MySQL, SAP IQ, SAP HANA, PostgreSQL, Tableau 技术讨论,希望在这里一起分享知识,讨论技术,畅谈人生 。

注册时间:2007-12-10

  • 博文量
    5595
  • 访问量
    14695689