Oracle如何检查点涉及的SCN

发布时间:2021-11-10 14:29:23 作者:小新
来源:亿速云 阅读:231

这篇文章主要介绍Oracle如何检查点涉及的SCN,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

1. 检查点涉及的SCN

(1). 数据文件中的文件头启动检查点的scn

存储在每个数据文件的文件头中

select name,checkpoint_change# 

from v$datafile_header;

在安全关闭数据库的过程中,系统会执行一个检查点动作,这时所有数据文件的终止scn都会设置成数据文件头中的那个启动scn的值。

在数据库重新启动的时候,Oracle将文件头中的那个启动scn(存在于各个数据文件里)与数据库文件检查点scn(存在于控制文件里)进行比较,如果这两个值相互匹配,oracle接下来还要比较数据文件头中的启动scn和控制文件中数据文件的终止scn。如果这两个值也一致,就意味着所有数据块的redo记录都已经提交,所有对数据库的修改都没有在关闭数据库的过程中丢失,因此这次启动数据库的过程也不需要任何恢复操作,此时数据库就可以打开了。 

(2).数据文件检查点SCN,

存储在控制文件中:

SELECT T.NAME,T.CHECKPOINT_CHANGE#,b.tablespace_name

FROM  V$DATAFILE T,dba_data_files b

where t.FILE#=b.file_id;

(3).数据文件的终止scn

存储在控制文件中

select name,last_change# 

from v$datafile;

终止SCN在数据库关闭或者表空间脱机是才会涉及到,在正常的数据库操作过程中,所有正处于联机读写模式下的数据文件的终止scn都为null.

在安全关闭数据库的过程中,系统会执行一个检查点动作,这时所有数据文件的终止scn都会设置成数据文件头中的那个启动scn的值。

(4).系统检查点SCN

存储在控制文件中

select  t.CHECKPOINT_CHANGE#

from v$database t;

(5). 日志文件的scn

select t.FIRST_CHANGE# 开始时的SCN,t.FIRST_TIME,t.NEXT_CHANGE#  结束时的SCN

from V$log_History  t

order by t.FIRST_TIME;

2. 发生完全检查点时:

数据文件头,标识上次处理完的启用scn。

而CKPT进程则将所有数据文件(无论redo log中的数据是否影响到该数据文件)文件头上记录的Start SCN更新为Next SCN; (通过视图v$datafile_header的字段checkpoint_change#可以查询)

同时将控制文件中的System Checkpoint SCN更新为Next SCN; (通过视图v$database的字段checkpoint_change#可以查询)

每个数据文件对应的Datafile Checkpoint)也更新为Next SCN;(通过视图v$datafile的字段checkpoint_change#可以查询)

从Low SCN到Next SCN之间的所有redo记录的数据就被DBWn进程写入数据文件中.    

3. 系统是如何产生一个最新的SCN的:

实际上,这个数字是由当时的timestamp转换过来的。每当需要产生一个最新的SCN到redo记录时,系统获取当时的timestamp,将其转换为数字作为SCN。

我们可以通过函数SCN_TO_TIMESTAMP将其转换回timestamp:

select dbms_flashback.get_system_change_number, SCN_TO_TIMESTAMP(dbms_flashback.get_system_change_number) 

from dual;

也可以用函数timestamp_to_scn将一个timestamp转换为SCN:

select timestamp_to_scn(SYSTIMESTAMP) as scn 

from dual;

4. SCN除了作为反映事务数据变化并保持同步外,它还起到系统的"心跳"作用——每隔3秒左右系统会刷新一次系统SCN。

以上是“Oracle如何检查点涉及的SCN”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!

推荐阅读:
  1. oracle scn重温
  2. Oracle SCN_TO_TIMESTAMP函数的使用

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

oracle scn

上一篇:postgresql如何检查点调整checkpoint

下一篇:Django中的unittest应用是什么

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》