转载自:http://www.debugease.com/oracle/767079.html
控制文件的HeartBeat
在正常MOUNT 数据库的过程中,数据库的警报日志文件仅记录如下信息:
alter database mount
Sat Apr 29 10:20:42 2006
Successful mount of redo thread 1, with mount id 1408096182.
Sat Apr 29 10:20:42 2006
Database mounted in Exclusive Mode.
Completed: alter database mount
在这一步骤中,数据库需要计算mount id 并将其记录在控制文件中,然后开始启动心跳
(Heartbeat),每3 秒更新一次控制文件。可以用以下命令间隔3 秒转储2 次控制文件信息:
alter session set events 'immediate trace name CONTROLF level 8' ;
在Linux 上用diff 命令比较2 个文件可以发现,控制文件在MOUNT 状态下发生改变的
只有这个Heartbeat:
[oracle@jumper udump]$ diff conner_ora_25542.trc conner_ora_25706.trc
...
64c63
< heartbeat: 588983634 mount id: 1408096182

< heartbeat: 588983636 mount id: 1408096182
Heartbeat表明实例已经被特定例程所Mount,这个属性主要用于OPS/RAC环境。但是
Heartbeat在单实例环境中同样存在。可以从一个内部表(需要以SYS用户登录)中查询到当前
的Heartbeat值(X$KCCCP的含义为[K]ernel [C]ache [C]ontrolfile management [C]heckpoint
[P]rogress):
其中cpods 为 ” on disk scn” ,cpodr_seq||cpodr_bno||cpodr_bof为”on disk rba”.
CPHBT为heartbeat number:
SELECT CPHBT from X$KCCCP;

从Oracle 9i 开始,Oracle 在数据库内部通过等待事件control file heartbeat 来记录这个事件
的相关等待;在Oracle 10g 中,如果使用自动存储管理技术(Automatic Storage Management,
ASM),那么还会增加一个ASM 实例的心跳事件。以下输出来自Oracle10g:

SQL> select event#,name from v$event_name where name like '%heart%';
EVENT# NAME


282 ASM mount : wait for heartbeat
423 control file heartbeat

了解了启动的各个步骤,也就可以在发生问题的时候,快速定位,准确判断,从而快速
解决问题。