`
nesta2001zhang
  • 浏览: 70727 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

深入了解Oracle SCN(1)

 
阅读更多

[说明] 本来在研究Backup and Recovery,可是在做实验的时候遇到一些问题不是很理解,进而追根求源,想搞清楚,于是必须搞清楚SCN和Recovery之间的关系。于是乎转而研究SCN,这两天看了很多文章,包括Eygle网站上的文章,itpub 上biti等大师以前发过或者参与讨论过的帖子,发现思路有模糊到清晰,再由清晰到模糊,越走越深,至今还没有完全搞清楚。决定暂时到此为止,等以后各方面的知识积累多了,再转过来研究一下。本想自己写个总结性的文章,可是发现了一篇文章已经写的很好了,我就懒惰的以逸待劳,copy过来了,在此谢谢前辈们的工作,大家辛苦了~

SCN 的概念

SCN 是顺序递增的一个数字,在 Oracle 中用来标识数据库 的每一次改动,及其先后顺序。 SCN 的最大值是 0xffff.ffffffff

SCN 管理 方式

Oracle SCN 的管理,分为单节点和 RAC 两种方式。

单节点的 instance

单节点的 instance 中, SCN 值存在 SGA 区,由 system commit number latch 保护。任何进程要得到当前的 SCN 值,都要先得到这个 latch

RAC/OPS 环境中

Oracle 通过排队机制 (Enqueue) 实现 SCN 在各并行节点之间的顺序增长。具体有两种方法:

Lamport 算法:又称面包房算法,先来先服务算法。跟很多银行采用的排队机制一样。客户到了银行,先领取一个服务号。一旦某个窗口出现空闲,拥有最小服务号的客户就可以去空闲窗口办理业务。

Commit 广播算法:一有 commit 完成,最新的 SCN 就广播到所有节点中。

上述两种算法可以通过调整初始化参数 max_commit_propagation_delay 来切换。在多数系统 ( 除了 Compaq Tur64 Unix) 中,该参数的默认值都是 700 厘秒 (centisecond) ,采用 Lamport 算法。如果该值小于 100 厘秒, Oracle 就采用广播算法,并且记录在 alert.log 文件中。

几种重要的 SCN

Commit SCN

当用户提交 commit 命令后,系统将当前 scn 赋给该 transaction 。这些信息都反映在 redo buffer 中,并马上更新到 redo log 文件里。

Offline SCN

除了 System tablespace 以外的任何表空间,当我们执行 SQL>alter tablespace offline normal 命令时,就会触发一个 checkpoint ,将内存中的 dirty buffer 写入磁盘文件中。 Checkpoint 完成后,数据文件头会更新 checkpoint scn offline normal scn 值。其中数据库文件头的 checkpoint scn 值可通过查询列 x$kccfe.fecps 得到。

如果执行 SQL>alter tablespace offline 命令时采用 temporary immediate 选项,而不用 normal 选项时, offline normal scn 会被设成 0 。这样当数据库重启后通过 resetlog 方式打开时,该表空间就无法再改回在线状态。

Checkpoint SCN

当数据库内存的脏数据块 (dirty blocks) 写到各数据文件中时,就发生一次 checkpoint 。数据库的当前 checkpoint scn 值存在 x$kccdi.discn 中。 Checkpoint scn 在数据库恢复中起着至关重要的作用。无论你用何种办法恢复数据库,只有当各个数据库文件的 checkpoint scn 都相同时,数据库才能打开。

虽然参数“ _allow_resetlogs_corruption ”可以在 checkpoint scn 不一致时强制打开数据库,但是这样的数据库在 open 后必须马上作全库的 export ,然后重建数据库并 import 数据。

Resetlog SCN

数据库不完全恢复时,在指定时间点后的 scn 都无法再应用到数据库中。 Resetlog 时的 scn 就被设成当前数据库 scn redo log 也会被重新设置。

Stop SCN

Stop scn 记录在数据文件头上。当数据库处在打开状态时, stop scn 被设成最大值 0xffff.ffffffff 。在数据库正常关闭过程中, stop scn 被设置成当前系统的最大 scn 值。在数据库打开过程中, Oracle 会比较各文件的 stop scn checkpoint scn ,如果值不一致,表明数据库先前没有正常关闭,需要做恢复。

High and Low SCN

Oracle Redo log 会顺序纪录数据库的各个变化。一组 redo log 文件写满后,会自动切换到下一组 redo log 文件。则上一组 redo log high scn 就是下一组 redo log low scn

在视图 v$log_history 中, sequence# 代表 redo log 的序列号, first_change# 表示当前 redo log low scn ,列 next_change# 表示当前 redo log high scn

SQL> col recid format 9999

SQL> col requence# format 9999

SQL> col first_change# format 9,999,999,999,999

SQL> col next_change# format 9,999,999,999,999

SQL> select recid,sequence#,first_change#,next_change# from v$log_history where rownum<6;

RECID SEQUENCE# FIRST_CHANGE# NEXT_CHANGE#

----- ---------- ------------------ ------------------

484 484 1,928,645,840,091 1,928,645,840,436

485 485 1,928,645,840,436 1,928,645,840,636

486 486 1,928,645,840,636 1,928,778,045,209

487 487 1,928,778,045,209 1,929,255,480,725

488 488 1,929,255,480,725 1,930,752,214,033

 

分享到:
评论

相关推荐

    Oracle SCN机制解析

    Oracle SCN(System Change Number)机制是Oracle数据库中用于追踪和管理数据变化的关键组件。SCN是一个不断递增的数字,确保了数据库能够准确地识别和处理...因此,掌握SCN机制是深入了解Oracle数据库核心功能的基础。

    oracle scn概念解析

    ### Oracle SCN 概念解析 #### 一、SCN 的定义与作用 **SCN (System Change Number)** 是 ...通过这些 SQL 查询,可以深入了解 SCN 在实际应用中的工作原理,对于数据库的性能调优、故障排查等方面都有着重要的意义。

    oracle scn

    ### Oracle SCN详解 #### 一、SCN概念与作用 **SCN(System Change Number)**,即系统变更号,是Oracle...通过对SCN的理解,我们可以更深入地了解Oracle数据库的内部运作机制,从而更好地管理和优化数据库性能。

    Oracle数据库IO深入分析

    在深入了解Oracle数据库的I/O操作之前,我们首先需要了解Oracle数据库的基本物理结构,这有助于更好地理解I/O产生的原因及其过程。 **1.1.1 控制文件** 控制文件是Oracle数据库的核心组成部分之一,它包含了关于...

    Oracle内存管理(深入解析)

    了解这些工具和视图可以帮助DBA有效地管理和优化Oracle数据库的内存使用,提高系统性能。 总的来说,Oracle内存管理涉及到多个层面,包括进程私有内存(PGA)和全局共享内存(SGA)的配置、使用和优化。深入理解...

    lr_oracle计数器

    4. Cached Commit SCN referenced (V$SESSTAT1/[SYS]/ABCDEF/ORACLE.EXE) (绝对) 记录引用缓存的“提交SCN”(系统改变号)的次数,用于确保数据的一致性。 5. Commit SCN cached (V$SESSTAT1/[SYS]/ABCDEF/ORACLE....

    oracle介质恢复的内部过程

    - **Controlfile Dump分析**:通过对控制文件的dump内容进行分析,可以深入了解介质恢复所需的关键信息,如数据文件的位置、重做日志文件的状态等。 - **Redolog Dump分析**:重做日志文件包含了数据库的所有更改...

    oracle入门及提高

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统,其在企业级数据存储和处理中扮演着重要角色。...通过学习这些内容,不仅可以掌握Oracle的基本操作,还能深入了解其内部机制,从而更好地管理和优化数据库。

    论文研究-Oracle8i数据库日志文件的分析与恢复.pdf

    在实际操作中,除了掌握日志文件的结构和格式之外,还需要了解Oracle数据库的配置、运行状态以及发生故障的具体情况。通过综合分析,采用合适的恢复方法,可以将数据库恢复到一致和可用的状态。 总之,Oracle 8i...

    Oracle数据块结构分析说明BLOCK结构详解

    Oracle是业界广泛使用的大型关系型数据库管理系统,其核心组成部分之一就是数据块结构(Block)。数据块是Oracle数据库中最小的...因此,对数据块结构的深入了解对于确保数据库的稳定运行和数据的安全具有重要意义。

    oracle机制及内存区的优化建议

    Oracle数据库的优化是一个复杂而关键的任务,涉及到多个层面,包括其内部机制、内存区的配置以及数据文件和...通过深入了解Oracle的组件结构和工作原理,我们可以更好地调整和优化数据库,从而提升整体系统的运行效率。

    oracle数据误删找回

    本文将深入探讨如何在 Oracle 10g 中找回被误删的数据,主要涉及 SCNs(系统改变号)的概念及其在恢复过程中的作用。 SCN,即 System Change Number,是 Oracle 数据库的一个关键组件,它充当了数据库的内部时钟,...

    oracle checkpoint工作原理

    在深入了解Checkpoint的工作机制之前,我们需要熟悉几个关键概念: - **RBA(Redo Byte Address)**:表示重做日志块的地址,类似于数据文件中的ROWID,用于定位特定的重做日志记录。 - **LRBA(Low RBA)**:表示...

    存储管理---深入ORACLE9I核心.pdf

    ### 存储管理深入Oracle9I核心 #### 11.1 大脑—控制文件 **11.1.1 控制文件的...通过上述知识点的学习,我们深入了解了Oracle9i数据库中存储管理的核心概念和技术细节,这对于日常数据库管理和维护具有重要意义。

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

    通过这些章节的学习,读者不仅能够了解Oracle 10g 在各个层面的运作机制,还能掌握如何针对不同的操作系统环境进行有效的架构调整和优化。这不仅有助于提高数据库的性能,还能够确保其在各种应用场景下的稳定性和...

    A02_ORACLE数据库体系结构.pdf

    Oracle数据库体系结构是数据库管理员和开发人员必须深入理解的关键知识领域。Oracle数据库体系结构主要由实例和数据库组成。...对于想要深入了解Oracle数据库技术的人来说,掌握这些知识点是必不可少的。

    Oracle架构的基础知识(入门级)

    了解这些结构对于理解Oracle如何存储和管理数据至关重要。 ##### 1. 数据库文件类型 Oracle数据库主要包括以下几种类型的文件: - **数据字典文件**(`.datadictionary`):存储数据库元数据信息。 - **重做日志...

    在oracle中Logmnr进行日志挖掘

    在Oracle中使用Logmnr进行日志挖掘是一项复杂但非常有用的技能,它为数据库管理员提供了深入洞察数据库活动的能力。通过理解和掌握上述工作流程和示例代码,你可以有效地利用Logmnr来增强数据管理和安全审计能力。

Global site tag (gtag.js) - Google Analytics