您好,欢迎访问一九零五行业门户网

Oracle数据库启动过程验证检查点SCN

scn(system change number,系统改变号)是oracle数据库非常重要的机制。scn在数据库启动,读一致性,数据的恢复,flashback操作
scn(system change number,系统改变号)是oracle数据库非常重要的机制。scn在数据库启动,读一致性,数据的恢复,flashback操作等情况下都会用到。
1.scn号是重要的时间机制,两者之间可以相互的转换。
1).将时间转换为scn号:
sql> select timestamp_to_scn(sysdate) from dual;
timestamp_to_scn(sysdate)
-------------------------
                  920939
 2).将scn号转换为具体时间:
sql> select scn_to_timestamp(920000) from dual;
scn_to_timestamp(920000)
---------------------------------------------------------------------------
07-feb-10 01.06.11.000000000 am
3).查看当前数据库最新的scn号:
sql> select current_scn from v$database;
current_scn
-----------
    920782
    当前最新的scn号,该scn号会不停的在内存中被刷新,oracle 10g每隔3秒就会被刷新。
2.数据库启动过程对scn号的验证。
    下面我们先来了解4种类型的scn,这4种类型的scn实际都是检查点scn,都是由ckpt进程更新,存储在控制文件和数据文件头中,不同类型的scn有不同的作用。
1).数据库检查点scn:
sql> select checkpoint_change# from v$database;
checkpoint_change#
------------------
            920459
    数据库检查点scn,每执行一次检查点,ckpt进程会更新控制文件中的数据库检查点scn。
2).数据文件scn:
sql> select checkpoint_change# from v$datafile;
checkpoint_change#
------------------
            920459
            920459
            920459
            920459
            920459
            920459
            920459
            920459
            920459
            920459
            920459
36 rows selected.
    数据文件scn,每个数据文件都有一个数据文件scn,每执行一次检查点,由ckpt进程都将更新位于控制文件中的数据文件scn。
3).数据文件启动scn:
sql>  select checkpoint_change# from v$datafile_header;
checkpoint_change#
------------------
            920459
            920459
            920459
            920459
            920459
            920459
            920459
            920459
            920459
            920459
            920459
36 rows selected.
    启动scn,每个数据文件都有一个启动scn,每执行一次检查点,ckpt进程都将更新数据文件头中的检查点scn,这被叫做启动scn。
4).数据文件终止scn:
sql> select last_change# from v$datafile;
last_change#
------------
36 rows selected.
    终止scn,每个数据文件都有一个终止scn,该scn存储在控制文件中,当数据库被open之后,该值即变成#ffffff无穷大。
数据库在启动过程中对scn的验证分为两个阶段:
  第一阶段,检查控制文件和数据文件中数据文件的检查点次数是否一致(不同的数据文件检查点次数可能是不同的),如果不一致说明要么控制文件过旧,要么数据文件过旧,需要执行相应的恢复操作;如果一致继续执行下一步检查。
  第二阶段,检查数据文件的启动scn和终止scn是否一致,如果数据库关闭是非正常关闭,那么终止scn肯定是无穷大,这个时候需要完成一个实例恢复的过程;如果启动scn和终止scn相同,那么数据库就可以open了。
  另外,存储在控制文件中的数据库scn、数据文件scn和存储在数据文件头中的启动scn实际都是在执行检查点时由ckpt进程对控制文件和数据文件头的更新,3者必定是相同的,在执行shutdown immediate|normal|transantional关闭数据库时会再次触发检查点,这时前面3种类型的scn和存储在控制文件中的终止scn必定是相同的。
 下面我们通过对控制文件和数据文件头的转储来验证上面的说法:
1).正常关闭数据库的状态。
sql> shutdown immediate
 database closed.
 database dismounted.
 oracle instance shut down.
 sql> startup mount
 oracle instance started.
 total system global area  599785472 bytes
 fixed size                  2022600 bytes
 variable size            230687544 bytes
 database buffers          360710144 bytes
 redo buffers                6365184 bytes
 database mounted.
 sql> @?/rdbms/admin/gettrace
 trace_file_name
 --------------------------------------------------------------------------------
 /u01/app/oracle1/admin/orcl/udump/orcl_ora_4132.trc
 sql> alter session set events 'immediate trace name controlf level 8';
其它类似信息

推荐信息