一、SCN基础
1、什么是scn?
在oracle数据库中保证数据一致性的方法就是事务。事务是一个逻辑的、原子性的作业单元,通常由一个或多个sql组成,一个事务中的所有sql操作,要么失败全部回滚,要么成功全部提交。数据库的事务最主要的作用就是保证了数据的一致性,每次事务的提交都是将数据库从一种一致性状态带进另外一种一致性状态。
scn在数据库中是一个单一的不断的随着数据库一致性状态的改变而自增的序列。每个scn值代表着数据库运行中的一个一致性的点。
2、SCN概述
2.1、系统检查点scn(systmen checkpoint scn)
存在于控制文件,检查点进程启动、全局范围内,oracle就把系统检查点scn记录到控制文件中。
SQL> select dbid,name,log_mode,checkpoint_change# from v$database;
2.2、文件检查点scn(datafile checkpoint scn)
存在于控制文件,检查点进程启动、全局范围内以及文件级别的检查点(将表空间只读、begin backup或某个文件置为offline),oracle把该检查点记录到控制文件中。
SQL> alter tablespace testtbs04 begin backup;
SQL> select
2 ts.name "表空间名"
3 , df.file# "文件号"
4 , df.checkpoint_change# "检查点"
5 , df.last_change# "终止检查点"
6 , df.name "文件名"
7 from v$tablespace ts,v$datafile df
8 where ts.ts#=df.ts#
9 order by df.file#;
表空间名 文件号 检查点 终止检查点 文件名
------------------------------ ---------- ---------- ---------- ----------------------------------------
SYSTEM 1 745206 /oracle/oradata/boss/system01.dbf
UNDOTBS1 2 745206 /oracle/oradata/boss/undotbs01.dbf
SYSAUX 3 745206 /oracle/oradata/boss/sysaux01.dbf
USERS 4 745206 /oracle/oradata/boss/users01.dbf
EXAMPLE 5 745206 /oracle/oradata/boss/example01.dbf
TESTTBS01 6 745206 /oracle/oradata/boss/testtbs01_01.dbf
TESTTBS01 7 745206 /oracle/oradata/boss/testtbs01_02.dbf
TESTTBS02 8 745206 /oracle/oradata/boss/testtbs02_01.dbf
TESTTBS03 9 652799 652799 /oracle/oradata/boss/testtbs03_01.dbf
TESTTBS04 10 745405 /oracle/oradata/boss/testtbs04_01.dbf
SQL> select file#,name,status,CHECKPOINT_CHANGE#,recover from v$datafile_header;
FILE# NAME STATUS CHECKPOINT_CHANGE# REC
---------- ---------------------------------------- ------- ------------------ ---
1 /oracle/oradata/boss/system01.dbf ONLINE 745206 NO
2 /oracle/oradata/boss/undotbs01.dbf ONLINE 745206 NO
3 /oracle/oradata/boss/sysaux01.dbf ONLINE 745206 NO
4 /oracle/oradata/boss/users01.dbf ONLINE 745206 NO
5 /oracle/oradata/boss/example01.dbf ONLINE 745206 NO
6 /oracle/oradata/boss/testtbs01_01.dbf ONLINE 745206 NO
7 /oracle/oradata/boss/testtbs01_02.dbf ONLINE 745206 NO
8 /oracle/oradata/boss/testtbs02_01.dbf ONLINE 745206 NO
9 /oracle/oradata/boss/testtbs03_01.dbf ONLINE 652799
10 /oracle/oradata/boss/testtbs04_01.dbf ONLINE 745405 NO
2.3、终止scn(stop scn)
保存在控制文件,每个数据文件都有一个终止scn,数据库正常运行中,只要数据文件在线且是可读写的,结束scn为null,否则就存在具体的scn值。
2.4、数据文件头scn(start scn)
保存在数据文件中,系统以及文件级别的检查点
SQL> select file#,name,status,CHECKPOINT_CHANGE#,recover from v$datafile_header;
3、scn的相关概念
3.1、redo log中的high scn和low scn
一个重做日志写满后,会自动切换到下一个重做日志,上一个重做日志的high scn就是下一个重做日志的low scn,current log 的high scn无穷大。
SQL> select recid,sequence#,first_change#,next_change# from v$log_history;
RECID SEQUENCE# FIRST_CHANGE# NEXT_CHANGE#
---------- ---------- ------------- ------------
1 1 707655 707656
2 1 710834 741781
3 2 741781 744120
4 3 744120 745576
SQL> select group#,members,sequence#,archived,status,first_change# from v$log;
GROUP# MEMBERS SEQUENCE# ARC STATUS FIRST_CHANGE#
---------- ---------- ---------- --- ---------------- -------------
1 1 2 YES INACTIVE 741781
2 1 3 YES INACTIVE 744120
3 1 4 NO CURRENT 745576
##转储当前重做日志
SQL> alter system dump logfile '/oracle/oradata/boss/redo03.log';
SQL> alter system switch logfile;
SQL> select group#,members,sequence#,archived,status,first_change# from v$log;
GROUP# MEMBERS SEQUE