由于控制文件中记录了数据库中数据文件、日志文件的位置信息,检查点信息等重要信息,在数据库的OPEN阶段,Oracle将根据控制文件中记录的这些信息找到这些文件,然后进系检查点及完整性检查。
一、OPEN阶段的一致性校验
在数据库OPEN的过程中,Oralce进行的检查中包括一下两项:
- 第一次检查文件头中的检查点计数(Checkpoint CNT)是否和控制文件中的检查点计数一致。此步骤检查用以确认数据文件是否来自同一版本,而不是从备份中恢复而来(因为Checkpoint CNT不会被冻结,会一直被修改)。
- 第二次检查文件头的开始SCN和控制文件中记录的该文件的结束SCN是否一致,如果控制文件中记录的结束SCN等于数据文件头的开始SCN,则不需要对那个文件进行恢复。对每个数据文件都完成检查后,打开数据库,锁定数据文件,同时将每个数据文件的结束SCN设置为无穷大。
如果某个数据文件丢失,在mount数据库时Oracle会在后台将文件丢失信息记录在告警日志文件中;而在open阶段,则会在前台发出错误警告,数据库将停止启动。
二、Oracle 11g Automatic Diagnostic Repository新特性
告警日志文件的存储位置收到一个新的参数影响,这个参数时diagnostic_dest:
SQL> show parameter diag;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
diagnostic_dest string /home/oracle/app/oracle
该目录用于存放数据库诊断日志、跟踪文件等,通常称作ADR Base。diagnostic_dest参数的缺省值和环境变量ORACLE_BASE有关:
- 如果设置了ORACLE_BASE,则DIAGNOSTIC_DEST=ORACLE_BASE;
- 如果未设置ORACLE_BASE,则DIAGNOSTIC_DEST=ORACLE_HOME/log。
ADR信息可以通过v$diag_info视图查询,其中Diag Alert和Diag Trace对应的目录分别存储了XML和文本格式的告警日志文件:
SQL> select * from v$diag_info;
INST_ID NAME VALUE
--------------------------------------------------
1 Diag Enabled TRUE
1 ADR Base /home/oracle/app/oracle
1 ADR Home /home/oracle/app/oracle/diag/rdbms/orcl/orcl
1 Diag Trace /home/oracle/app/oracle/diag/rdbms/orcl/orcl/trace
1 Diag Alert /home/oracle/app/oracle/diag/rdbms/orcl/orcl/alert
1 Diag Incident /home/oracle/app/oracle/diag/rdbms/orcl/orcl/incident
1 Diag Cdump /home/oracle/app/oracle/diag/rdbms/orcl/orcl/cdump
1 Health Monitor /home/oracle/app/oracle/diag/rdbms/orcl/orcl/hm
1 Default Trace File /home/oracle/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_5824.trc
1 Active Problem Count 0
1 Active Incident Count 0
11 rows selected.