获取当前scn号scn1_Oracle SCN机制解析

Oracle SCN

机制解析

文章分类

:

数据库

SCN

(

System

Chang

Number

)

作为

oracle

中的一个重要机制,

在数据恢复、

Data

Guard

Streams

复制、

RAC

节点间的同步等各个功能中起着重要作用。理解

SCN

的运作机制,可以帮助你更加深入地了解上述功能。

在理解

SCN

之前,

我们先看下

oracle

事务中的数据变化是如何写入数据文件的:

1

事务开始;

2

buffer cache

中找到需要的数据块,如果没有找到,则从数据文件中载

buffer cache

中;

3

事务修改

buffer cache

的数据块,该数据被标识为“脏数据”,并被写入

log buffer

中;

4

事务提交,

LGWR

进程将

log

buffer

中的“脏数据”写入

redo

log

file

中;

5

当发生

checkpoint

CKPT

进程更新所有数据文件的文件头中的信息

DBWn

进程则负责将

Buffer Cache

中的脏数据写入到数据文件中。

经过上述

5

个步骤,

事务中的数据变化最终被写入到数据文件中。

但是,

一旦在

上述中间环节时,

数据库意外宕机了,

在重新启动时如何知道哪些数据已经写入

数据文件、哪些没有写呢(同样,在

DG

streams

中也存在类似疑问:

redo

log

中哪些是上一次同步已经复制过的数据、哪些没有)?

SCN

机制就能比较完善的

解决上述问题。

SCN

是一个数字,确切的说是一个只会增加、不会减少的数字

。正是它这种只会

增加的特性确保了

Oracle

知道哪些应该被恢复、哪些应该被复制。

总共有

4

SCN

:系统检查点(

System Checkpoint

)

SCN

、数据文件检查点

(

Datafile

Checkpoint

)

SCN

、结束

SCN

(

Stop

SCN

)、开始

SCN

(

Start

SCN

)。

其中前面

3

SCN

存在于控制文件中,最后一种则存在于数据文件的文件头中。

在控制文件中,

System Checkpoint SCN

是针对整个数据库全局的,因而只存在

一个,而

Datafile Checkpoint SCN

Stop SCN

是针对每个数据文件的,因而

一个数据文件就对应在控制文件中存在一份

Datafile Checkpoint SCN

Stop

SCN

。在数据库正常运行期间,

Stop SCN(

通过视图

v$datafile

的字段

last_change#

可以查询

)

是一个无穷大的数字或者

NULL

在一个事务提交后(上述第四个步骤),会在

redo log

中存在一条

redo

记录,

同时,系统为其提供一个最新的

SCN

(通过函数

dbms_flashback.get_system_change_number

可以知道当前的最新

SCN

),记录

在该条记录中。如果该条记录是在

redo log

被清空(日志满做切换时或发生

checkpoint

时,

所有变化日志已经被写入数据文件中)

则其

SCN

被记录为

redo

log

low SCN

。以后在日志再次被清空前写入的

redo

记录中

SCN

则成为

Next

SCN

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值