知识大全 SCN机制解析

Posted 文件

篇首语:即使道路坎坷不平,车轮也要前进;即使江河波涛汹涌,船只也航行。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 SCN机制解析相关的知识,希望对你有一定的参考价值。

Oracle重要机制:SCN机制解析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  SCN(System Chang Number)作为oracle中的一个重要机制 在数据恢复 Data Guard Streams复制 RAC节点间的同步等各个功能中起着重要作用 理解SCN的运作机制 可以帮助你更加深入地了解上述功能

  在理解SCN之前 我们先看下oracle事务中的数据变化是如何写入数据文件的

   事务开始

   在buffer cache中找到需要的数据块 如果没有找到 则从数据文件中载入buffer cache中

   事务修改buffer cache的数据块 该数据被标识为 脏数据 并被写入log buffer中

   事务提交 LGWR进程将log buffer中的 脏数据 写入redo log file中

   当发生checkpoint CKPT进程更新所有数据文件的文件头中的信息 DBWn进程则负责将Buffer Cache中的脏数据写入到数据文件中

  经过上述 个步骤 事务中的数据变化最终被写入到数据文件中 但是 一旦在上述中间环节时 数据库意外宕机了 在重新启动时如何知道哪些数据已经写入数据文件 哪些没有写呢(同样 在DG streams中也存在类似疑问 redo log中哪些是上一次同步已经复制过的数据 哪些没有)?SCN机制就能比较完善的解决上述问题

  SCN是一个数字 确切的说是一个只会增加 不会减少的数字 正是它这种只会增加的特性确保了Oracle知道哪些应该被恢复 哪些应该被复制

  总共有 中SCN 系统检查点(System Checkpoint)SCN 数据文件检查点(Datafile Checkpoint)SCN 结束SCN(Stop SCN) 开始SCN(Start SCN) 其中其面 中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

  当日志切换或发生checkpoint(上述第五个步骤)时 从Low SCN到Next SCN之间的所有redo记录的数据就被DBWn进程写入数据文件中 而CKPT进程则将所有数据文件(无论redo log中的数据是否影响到该数据文件)的文件头上记录的Start SCN(通过视图v$datafile_header的字段checkpoint_change#可以查询)更新为Next SCN 同时将控制文件中的System Checkpoint SCN(通过视图v$database的字段checkpoint_change#可以查询) 每个数据文件对应的Datafile Checkpoint(通过视图v$datafile的字段checkpoint_change#可以查询)也更新为Next SCN 但是 如果该数据文件所在的表空间被设置为read only时 数据文件的Start SCN和控制文件中Datafile Checkpoint SCN都不会被更新

  那系统是如何产生一个最新的SCN的?实际上 这个数字是由当时的timestamp转换过来的 每当需要产生一个最新的SCN到redo记录时 系统获取当时的timestamp 将其转换为数字作为SCN 我们可以通过函数SCN_TO_TIMESTAMP( g以后)将其转换回timestamp

  

  SQL> select dbms_flashback get_system_change_number SCN_TO_TIMESTAMP(dbms_flashback get_system_change_number) from dual;

  GET_SYSTEM_CHANGE_NUMBER SCN_TO_TIMESTAMP(DBMS_FLASHBACK GET_SYSTEM_CHANGE_NUMBER)               AUG PM

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

  

  SQL> select timestamp_to_scn(SYSTIMESTAMP) as scn from dual;        SCN SQL> select timestamp_to_scn(SYSTIMESTAMP) as scn from dual;

  SCN

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

  下面 在简单介绍一下SCN如何在数据库恢复中起作用

  数据库在正常关闭(shutdown immediate/normal)时 会先做一次checkpoint 将log file中的数据写入数据文件中 将控制文件 数据文件中的SCN(包括控制文件中的Stop SCN)都更新为最新的SCN

  数据库异常/意外关闭不会或者只更新部分Stop SCN

  当数据库启动时 Oracle先检查控制文件中的每个Datafile Checkpoint SCN和数据文件中的Start SCN是否相同 再检查每个Datafile Checkpoint SCN和Stop SCN是否相同 如果发现有不同 就从Redo Log中找到丢失的SCN 重新写入数据文件中进行恢复 具体的数据恢复过程这里就不再赘述

  SCN作为Oracle中的一个重要机制 在多个重要功能中起著 控制器 的作用 了解SCN的产生和实现方式 帮助DBA理解和处理恢复 DG Streams复制的问题

cha138/Article/program/Oracle/201311/17975

相关参考

知识大全 如何更改数据库的SCN?

如何更改数据库的SCN?  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!    很多时候我们需要调整

知识大全 如何获得当前数据库的SCN值

如何获得当前数据库的SCN值  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!主要可以通过两种方式: 

知识大全 详细讲解获得当前SCN的几种有效方式

详细讲解获得当前SCN的几种有效方式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!在阅读本文前大家

知识大全 Oracle中如何获得当前数据库的SCN值

Oracle中如何获得当前数据库的SCN值  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  阅读本

知识大全 解析Java的多线程机制

解析Java的多线程机制  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一进程与应用程序的区别 

知识大全 全面解析Oracledeveloper的异常处理机制

全面解析Oracledeveloper的异常处理机制  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 Java包导入机制的研究与解析

Java包导入机制的研究与解析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  java中有两种包

市场机制中的核心机制是

市场机制中的核心机制是_____。A、价格机制B、供求机制C、竞争机制D、约束机制答案:A解析:市场机制是通过市场价格的波动、市场主体对利益的追求、市场供求的变化,调节经济运行的机制,是市场经济机体内

下列属于市场机制构成要素的是

下列属于市场机制构成要素的是_____。A、竞争B、技术C、资本D、企业答案:A解析:市场机制是指在任何市场都存在并发生作用的市场机制,主要包括供求机制、价格机制、竞争机制和风险机制。

市场是通过__机制配置资源

市场是通过_____机制配置资源。A、市场B、竞争C、价格D、调控答案:C解析:价格机制是市场机制的核心机制,市场是通过价格-枳制配置资源。故选C。