oracle SCN

A stamp that defines a committed version of a database at a point in time. Oracle assigns every committed transaction a unique SCN.
SCN是顺序递增的一个数字,在Oracle中用来标识数据库的每一次改动,及其先后顺序。SCN的最大值是0xffff.ffffffff。

Commit SCN
Offline SCN
Checkpoint SCN
Resetlog SCN
Stop SCN
High and Low SCN

3. SCN & checkpoint
CKPT进程在checkpoint发生时,将当时的SCN号写入数据文件头和控制文件,同时通知DBWR进程将数据块写到数据文件。
CKPT进程也会在控制文件中记录RBA(redo byte address),以标志Recovery需要从日志中哪个地方开始。
与checkpoint相关的SCN号有四个,其中三个存在控制文件中,一个存放在数据文件头中。
3.1. System Checkpoint SCN(系统检查点scn)
当checkpoint完成后,ORACLE将System Checkpoint SCN号存放在控制文件中。
SQL>alter system checkpoint;
SQL> select checkpoint_change# from v$database;
CHECKPOINT_CHANGE#
------------------
1198248
3.2. Datafile Checkpoint SCN(数据文件检查点)
当checkpoint完成后,ORACLE将Datafile Checkpoint SCN号存放在控制文件中。
SQL> select name,checkpoint_change# from v$datafile;

NAME CHECKPOINT_CHANGE#
------------------------------ ------------------
/home/oracle/oradata/edison/system01.dbf 1198248
/home/oracle/oradata/edison/undotbs01.dbf 1198248
/home/oracle/oradata/edison/sysaux01.dbf 1198248
/home/oracle/oradata/edison/users01.dbf 1198248

NAME CHECKPOINT_CHANGE#
------------------------------ ------------------
/home/oracle/oradata/edison/example01.dbf 1198248
/mnt/disk2/oradata/edison/ioffice02.dbf 1198248
/mnt/disk2/oradata/edison/ioffice03.dbf 1198248
/home/oracle/oradata/edison/ioffice01.dbf 1198248

12 rows selected.
3.3. Start SCN号
ORACLE将Start SCN号存放在数据文件头中,这个SCN用于检查数据库启动过程是否需要做Media Recovery。
SQL>select name,checkpoint_change# from v$datafile_header;
3.4. End SCN (Stop SCN)号
ORACLE将End SCN号存放在控制文件中。
SQL> select name,last_change# from v$datafile;

NAME LAST_CHANGE#
---------------------------------------- ------------
/home/oracle/oradata/edison/system01.dbf
/home/oracle/oradata/edison/undotbs01.dbf
/home/oracle/oradata/edison/sysaux01.dbf
/home/oracle/oradata/edison/users01.dbf
/home/oracle/oradata/edison/example01.dbf
/mnt/disk2/oradata/edison/ioffice02.dbf
/mnt/disk2/oradata/edison/ioffice03.dbf
/home/oracle/oradata/edison/ioffice01.db

在数据库正常运行的情况下,对可读写的,online的数据文件,该SCN号为NULL.

3.5. SCN不连续的原因
SQL> select checkpoint_change# from v$database;
CHECKPOINT_CHANGE#
------------------
1198248
SQL>alter system checkpoint;
SQL>select checkpoint_change# from v$database;
CHECKPOINT_CHANGE#
------------------
1199800

1.当发生日志组切换的时候
2.当符合LOG_CHECKPOINT_TIMEOUT,LOG_CHECKPOINT_INTERVAL,fast_start_io_target,fast_start_mttr_target参数设置的时候
3.当运行ALTER SYSTEM SWITCH LOGFILE的时候
4.当运行ALTER SYSTEM CHECKPOINT的时候
5.当运行alter tablespace XXX begin backup,end backup的时候
6.当运行alter tablespace ,datafile offline的时候;


4. SCN#与数据库启动
在数据库启动过程中,当System Checkpoint SCN、Datafile Checkpoint SCN和Start SCN号都相同时,数据库可以正常启动,不需要做media recovery.三者当中有一个不同时,则需要做media recovery。如果在启动的过程中,End SCN号为NULL,则需要做instance recovery。ORACLE在启动过程中首先检查是否需要media recovery,然后再检查是否需要instance recovery。

5. SCN#与数据库关闭
如果数据库的正常关闭的话,将会触发一个checkpoint,同时将数据文件的END SCN号设置为相应数据文件的Start SCN号。 当数据库启动时,发现它们是一致的,则不需要做instance recovery。在数据库正常启动后,ORACLE会将END SCN号设置为NULL。如果数据库异常关闭的话,则END SCN号将为NULL.

6. SCN# 与 sequence#
Oracle提供了sequence对象,由系统提供自增长的序列号,通常用于生成数据库数据记录的自增长主键或序号的地方.

sequence#存储在数据字典中,存储于user_sequences表 LAST_NUMBER 为最终序列号

http://blog.csdn.net/george188/archive/2010/03/16/5385937.aspx

http://blog.chinaunix.net/u1/57982/showart_612902.html

http://tolywang.itpub.net/post/48/307162
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值