[ORACLE]数据库启动不同阶段与动态性能视图
由于动态性能视图是在数据库启动过程中自动创建的,所以在数据库启动的不同阶段,我们能够访问的视图也各不相同。
1. 在 Nomount 阶段(读参数文件)
Nomount 初始化的过程中,只要拥有了一个参数文件(实例启动最小参数需求,在参数文件中,通常需要最少的参数是 db_name ,设置了这个参数之后,数据库实例就可以启动),就可以凭之启动实例(INSTANCE),这一步骤并不需要任何控制文件或数据文件等的参与。实际上仅仅启动了数据库实例,此时的实例信息主要来自参数文件,因此和参数文件记录的相关信息可以查询,以下是这一阶段可以获取信息的主要视图:
V$PARAMETER V$SPPARAMETER V$SGA V$SGASTAT V$BH V$INSTANCE V$OPTION V$VERSION V$PROCESS V$SESSION
2. 在 Mount 阶段(读控制文件)
当数据库启动到 Mount 状态时,控制文件被读取,并且根据控制文件中记录的数据文件位置进行数据文件的存在性判断,和控制文件相关的视图此时可以进行查询.口令文件也被读取和做存在性判断.在 Linux/Unix 平台下,在$ORACLE_HOME/dbs 目录下,还会存在另外一个文件,该文件命名规则为 lk<ORACLE_SID>,lk 指 lock,该文件在数据库启动时创建,用于操作系统对数据库的锁定。当数据库启动时获得锁定,数据库关闭时释放。
(X$KCCCP 的含义为[K]ernel [C]ache [C]ontrolfile management [C]heckpoint [P]rogress):
SYS @ D4C>SELECT CPHBT from X$KCCCP; CPHBT ---------- 1040083060 SYS @ D4C>select event#,name from v$event_name where name like '%heart%'; EVENT# NAME ---------- ---------------------------------------------------------------- 100 heartbeat monitor sleep 175 heartbeat redo informer 502 ASM mount : wait for heartbeat 772 control file heartbeat
以下是这一阶段可以获取信息的主要视图:
V$THREAD V$CONTROLFILE V$DATABASE V$DATAFILE V$LOGFILE V$DATAFILE_HEADER X$KCCCP
3. 在 Open 阶段(读数据文件)
Open 阶段的一致性校验
在数据库 Open 的过程中,Oracle 将会读取数据文件头块和控制文件信息,将两者进行对比,如果满足校验,则可以正常打开数据库;如果存在异常,则可能抛出相应异常信息,要求用户介入处理。
主要的校验包括以下两项:
第一次检查数据文件头中的检查点计数(Checkpoint cnt)是否和控制文件中的检查点计数(Checkpoint cnt)一致。此步骤检查用以确认数据文件是来自同一版本,而不是从备份中恢复而来(因为 Checkpoint Cnt 不会被冻结,会一直被修改)。
第二次检查数据文件头的开始 SCN 和控制文件中记录的该文件的结束 SCN 是否一致,如 果控制文件中记录的结束 SCN 等于数据文件头的开始 SCN,则不需要对那个文件进行恢复(如果此前数据库异常崩溃,则结束 SCN 会保持在最大值(无穷大),数据库必须执行实例恢复以确保一致性)。对每个数据文件都完成检查后,打开数据库,锁定数据文件,同时将每个数据文件的结束 SCN 设置为无穷大。
当数据库 Open 之后,所有的动态性能视图和数据字典都可以被查询。