Chinaunix首页 | 论坛 | 博客
  • 博客访问: 263572
  • 博文数量: 36
  • 博客积分: 2000
  • 博客等级: 大尉
  • 技术积分: 830
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-05 11:57
文章分类

全部博文(36)

文章存档

2009年(1)

2008年(35)

我的朋友

分类: Oracle

2008-07-15 01:53:37

在控制文件中的一些槽位(slot)是可以被重用的,典型的例子就是记录log history的地方。
这个重用是受control_file_record_keep_time初始化参数设定的值制约的,假设这个值是7天,那么在7天之内,这个槽位即使满了,也不会被重用,此时继续写入数据就引起控制文件的增长,这就是有些人会问为什么我的控制文件会不停增长,那就可能是产生了太多的redo和归档的原因。
控制文件的扩展可以在alert.log文件中看到。
如果超过7天,那么这个slot就会被重用,最早的数据将被覆盖。
至于unreusble的slot,那就比如说数据文件的记录这些地方是不能被覆盖的。当你添加数据文件的时候,只会不断追加。
大体上就是这样。
  
最后我们再深入一点点,看看相关的v$视图。
SQL> select type,records_total from v$controlfile_record_section where type='LOG HISTORY';
  
TYPE                         RECORDS_TOTAL
---------------------------- -------------
LOG HISTORY                            454
  
Executed in 0.01 seconds
  
SQL> select count(*) from v$log_history;
  
   COUNT(*)
----------
        454
  
Executed in 0.02 seconds
  
现在可以看到这两个视图之间是怎么样的关系了,呵呵。
每个可以重用的v$controlfile_record_section中的section,都有一个相应的v$视图可以查看,有兴趣的可以自己再找些深入的资料看看。
 
我们可以利用oradebug命令来dump出控制文件中的内容
  
[zhangleyi@fedora zhangleyi]$ sqlplus /nolog
  
SQL*Plus: Release 10.1.0.2.0 - Production on Thu Apr 15 01:17:54 2004
  
Copyright (c) 1982, 2004, Oracle.  All rights reserved.
  
@>conn sys/dba as sysdba
Connected.
  
SYS@ora10g>oradebug setmypid
Statement processed.
SYS@ora10g>oradebug dump controlf 4
Statement processed.
  
生成的dump文件作为附件上传了,有兴趣的可以下载看看。
  
如果搞清楚了控制文件中的各个部分的含义,对于Oracle的大部分机制也可以说就很明白了。
  
先说一个,我们注意下面两个部分。
***********************************************************
DATABASE ENTRY
***********************************************************
[color=red]Database checkpoint: Thread=1 scn: 0x0000.00120a61[/color]
  
***********************************************************
DATA FILE RECORDS
***********************************************************
DATA FILE #1:  
   (name #7) /u01/oracle/oradata/ora10g/system01.dbf
creation size=0 block size=8192 status=0xe head=7 tail=7 dup=1
  tablespace 0, index=1 krfil=1 prev_file=0
  unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00
[color=red] Checkpoint cnt:267 scn: 0x0000.00121076 04/14/2004 23:23:58
  Stop scn: 0xffff.ffffffff 04/14/2004 05:32:53[/color]
  
我们可以看到所有的数据文件Stop scn: 0xffff.ffffffff,这是一个极大的值,说明我们的数据库是打开的。
  
我们知道,shutdown abort的时候,没有checkpoint,控制文件也不会被更新,当数据库重新启动的时候,Oracle会发现这个SCN仍然是这个极大值,和数据库的Checkpoint SCN不一样,此时数据库就会进行恢复,只有当这两个SCN一样,数据库才能OPEN。
  
大家也可以自己作个实验,shutdown immediate数据库,这是正常关闭,然后startup mount,然后dump控制文件,会发现Stop SCN和Checkpoint SCN是一样的值。
  
另外大家都知道SCN这个名词,但是我们可以看到其实Oracle中有很多类型的SCN,而每个SCN负责不同的功能。
  
从这几行信息里面我们就可以印证很多我们在文档上看到过的知识了。
阅读(1359) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~