Oracle SCN 详解

什么是 SCN

SCN (System Change Number) 即系统改变号,是一个由 Oracle 数据库使用的逻辑、内部的时间戳。SCN 按数据库中发生的事件排序,以满足事务 ACID 属性的需要。可以被看做是 Oracle 的内部逻辑时钟机制。Oracle 数据库在系统全局区(SGA)中递增 SCN。
SCN 在数据库中无处不在,常见的事务表、控制文件、数据文件头、日志文件、数据块头等都记录有 SCN 值。

SCN 的作用

  • 一致性读
  • 数据恢复
  • Flashback
  • 分布式事务
  • Stream

SCN 的查看与转换

主要有两种查看系统当前 SCN 的方法,一个是 V$DATABASE 中的 CURRENT_SCN 列,另外一个就是通过 DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBE。

例子:

SELECT CURRENT_SCN SCN FROM V$DATABASE;
SELECT DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER SCN FROM DUAL;

将 SCN 转换成时间戳
SCN_TO_TIMESTAMP(scn_number)
将时间戳转换成 SCN
TIMESTAMP_TO_SCN(timestamp)

例子:

SELECT SCN_TO_TIMESTAMP(CURRENT_SCN) TIMESTAMP FROM V$DATABASE;

SCN 常见分类

系统检查点 SCN

一个数据库一个

存在位置:
控制文件

获取方式:

SELECT CHECKPOINT_CHANGE# FROM V$DATABASE; 

文件检查点 SCN

一个文件一个

存在位置:
控制文件

获取方式:

SELECT NAME,CHECKPOINT_CHANGE# FROM V$DATAFILE;

文件最终检查点 SCN

一个文件一个

存在位置:
控制文件

获取方式:

SELECT NAME,LAST_CHANGE# FROM V$DATAFILE;

文件头部检查点 SCN

一个文件一个

存在位置:
控制文件

获取方式:

SELECT NAME,CHECKPOINT_CHANGE# FROM V$DATAFILE_HEADER;

RedoFile 文件开始 SCN

一个文件一个

存在位置:
RedoFile

获取方式:

SELECT FIRST_CHANGE# FROM V$LOG;

RedoFile 文件结束 SCN

一个文件一个

存在位置:
RedoFile

获取方式:

SELECT NEXT_CHANGE# FROM V$LOG;

RedoLog 条目的 SCN

一个条目一个
存在位置:
RedoFile

各 SCN 之间的关系

正常情况下,控制文件的系统SCN、控制文件中的数据文件开始SCN和数据文件头部的开始SCN是相等的,文件的最终检查点SCN是空。

正常关闭数据库,oracle会做下列操作。

  • 将所有的脏块写到磁盘上。
  • 用关闭的时间点 SCN 更新系统 SCN、文件检查点 SCN、文件最终检查点 SCN、数据文件头部检查点 SCN。此时 4 种 SCN 的值相同。

数据库非正常关闭(abort),数据库不做写脏块操作和更新 SCN 操作。此时文件最终检查点依然为空,数据库需要进行实例恢复。数据库在 open 的过程中,从控制文件的检查点条目中的每个检查点队列中取得 LRBA (检查点队列中第一个脏块的 LRBA )和 ON DISK RBA (对应 REDO FILE 的最后一条 redolog 条目),然后从 LRBA 跑日志到 ON DISK RBA。

数据库正常关闭,用一个备份的数据文件覆盖其中一个数据文件,此时数据文件头部的检查点 SCN 小于控制文件中的“文件检查点SCN”,此时就需要进行介质恢复。

增量检查点会更新控制文件 checkpoint 条目的 LRBA 值。不会改变 SCN。
日志切换,假如切换之后将 active 类型的日志文件切换为inactive,则会更新系统检查点 SCN、文件检查点 SCN 和文件头部检查点 SCN。
全量检查点会将脏块全部写到数据文件,所以日志状态会发生变化,所以会更新系统检查点 CSN、文件检查点 SCN 和文件头部检查点 SCN。

RBA
LTI
一致性读

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值