`

Oracle10g 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。
 
当日志切换或发生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(10g以后)将其转换回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)
---------------------------------------------------------------------------
              2877076756
17-AUG-07 02.15.26.000000000 PM
  
也可以用函数timestamp_to_scn将一个timestamp转换为SCN:
 
SQL> select timestamp_to_scn(SYSTIMESTAMP) as scn from dual;
 
       SCN
----------
2877078439
 
 
最后,SCN除了作为反映事务数据变化并保持同步外,它还起到系统的“心跳”作用——每隔3秒左右系统会刷新一次系统SCN。
 
下面,在简单介绍一下SCN如何在数据库恢复中起作用。
 
数据库在正常关闭(shutdown immediate/normal)时,会先做一次checkpoint,将log file中的数据写入数据文件中,将控制文件、数据文件中的SCN(包括控制文件中的Stop SCN)都更新为最新的SCN。
 
数据库异常/意外关闭不会或者只更新部分Stop SCN。
 
当数据库启动时,Oracle先检查控制文件中的每个Datafile Checkpoint SCN和数据文件中的Start SCN是否相同(这个地方个人觉得有点问题,应该是检查cnt,而不是scn),再检查每个Datafile Checkpoint SCN和Stop SCN是否相同。如果发现有不同,就从Redo Log中找到丢失的SCN,重新写入数据文件中进行恢复。具体的数据恢复过程这里就不再赘述。
 
SCN作为Oracle中的一个重要机制,在多个重要功能中起着“控制器”的作用。了解SCN的产生和实现方式,帮助DBA理解和处理恢复、DG、Streams复制的问题。
 
最后提一句,利用SCN机制,在Oracle10g、11g中又增加了一些很实用的功能——数据库闪回、数据库负载重现等。
分享到:
评论

相关推荐

    oracle SCN 祥解

    **SCN(System Change Number,系统变更号)**是Oracle数据库内部用于标识事务处理中的事件顺序以及确保数据一致性的关键机制之一。SCN是一种逻辑的时间戳,它用于排序数据库中发生的事件,以满足事务的ACID特性...

    Oracle SCN机制解析.docx

    总之,Oracle SCN机制是数据库恢复和一致性保证的核心,它通过跟踪每个事务的状态和顺序,确保了数据的准确性和一致性。了解和掌握SCN的工作方式对于优化数据库性能、处理故障恢复和实施高可用性解决方案(如Data ...

    oracle 10G 实验手册

    《Oracle 10G 实验手册》:深入解析Oracle闪回功能 Oracle 10G引入了一系列创新功能,其中最为显著的是闪回技术(Flashback)。这一特性在Oracle 9i的基础上进行了重大改进,极大地简化了数据库管理员(DBA)的工作...

    Oracle11g通过DBF恢复数据

    Oracle11g提供了一套完整的恢复机制,包括联机日志(Redo Logs)、归档日志以及控制文件等。在数据恢复过程中,通常需要以下步骤: 1. **创建备份**:在任何恢复操作之前,确保有最新的数据库备份至关重要。这可以...

    expert one-on-one oracle (10g) ch2

    尽管Oracle 10g 在不同平台上采用了不同的物理实现机制,但其架构具有足够的通用性,使得我们可以在所有平台上获得对Oracle工作原理的深刻理解。这主要得益于其核心组件的一致性和可移植性。 #### Oracle 10g 架构...

    Oracle11g备份恢复笔记文档

    通过上述分析,我们可以看到Oracle 11g提供了丰富的备份与恢复机制,涵盖了从逻辑到物理层面的各种故障场景。合理规划备份方案,并结合闪回技术的应用,可以有效提高数据库系统的稳定性和数据安全性。

    用Oracle 10g新的行时间戳捕捉变化

    综上所述,`ORA_ROWSCN`伪列是Oracle 10g提供的一种高效且灵活的数据变更追踪机制,尤其适用于需要对现有系统进行无侵入式监控的情况。它简化了数据仓库的数据同步过程,同时在数据审计和性能优化方面也发挥了重要...

    精通Oracle.10G备份与恢复1.rar

    本文将深入探讨Oracle 10G数据库的备份与恢复机制,包括其核心概念、工具、策略以及最佳实践。 首先,我们要理解Oracle数据库备份的基本类型。Oracle支持物理备份(如使用RMAN或操作系统的备份工具)和逻辑备份(如...

    Oracle 10g中闪回查询的应用.pdf

    Oracle 10g中的闪回查询(Flashback Query)是一种强大的功能,允许用户查看数据库在某个特定时间点或系统变更号(SCN)的状态,从而恢复错误的数据操作。这一特性对于数据库管理员和开发人员来说非常实用,因为它...

    Oracle 10G中的回收站

    Oracle 10G的闪回功能与回收站紧密相关,它们共同为用户提供了一种强大的数据保护机制。通过闪回查询(FLASHBACK QUERY)和闪回事务(FLASHBACK TRANSACTION),用户可以查看或恢复到过去的数据库状态,而闪回删除...

    ORACLE_OCP10g学习笔记.pdf

    ### ORACLE_OCP10g学习笔记知识点梳理 #### 一、Oracle简介及OCP认证背景 - **Oracle**:源自中国殷墟出土的甲骨文(oracle bone inscriptions),在英语中有“神谕”之意。Oracle公司是全球领先的信息管理软件开发...

    oracle入门及提高

    "10-闩锁、锁定和并发性.ppt"关注了Oracle的并发控制机制,包括行级锁定、表锁定以及各种类型的闩锁,这些内容对于处理多用户环境下数据的并发访问至关重要。 "13-手工管理的备份恢复.ppt"和"14-RMAN管理的备份和...

    ORACLE FLASHBACK综述.pdf

    在 Oracle 10g 版本中,Flashback 可以通过 SQL 语句 FLASHBACK DATABASE 语句,让数据库前滚到前一个时刻点或 SCN,而不需要做时刻点的恢复。 Oracle 为了实现达一个功能,创建了另外一组日志,就是 Flashback Logs...

    oracle如何将删除的表找回

    总的来说,Oracle的SCN机制和闪回功能为数据库管理员提供了强大的工具,能够在数据意外删除后进行有效的恢复。然而,这些操作需要谨慎执行,因为错误的操作可能会导致进一步的数据损坏。在进行任何恢复操作之前,...

    Oracle RMAN 11g Backup and Recovery

    综上所述,《Oracle RMAN 11g Backup and Recovery》这本书涵盖了Oracle 11g版本下RMAN的各个方面,从基础知识到高级话题都有涉及,对于希望深入了解Oracle备份和恢复机制的专业人士来说是一本非常有价值的参考书。...

    Oracle10gFlashback实践.doc

    Oracle 10g Flashback 技术是一种强大的数据库恢复和数据修正工具,它在9i版本引入,并在10g中得到了显著增强。Flashback主要包含三个关键特性:Flashback Query、Flashback Table和Flashback Database。 **...

Global site tag (gtag.js) - Google Analytics