Oracle SCN详解

Oracle SCN 分析 SCN (System Change Number) 是 Oracle 数据库中的一个逻辑时间戳,它具有以下特点: - 单调递增 - 全局唯一 - 用于标识数据库变更的时间点 阅读详情

SCN号概述
SCN是当Oracle数据库更新后,由DBMS自动维护去累积递增的一个数字。Oracle数据库中一共有4种SCN分别为

系统检查点SCN: 系统检查点SCN位于控制文件中,当检查点进程启动时(ckpt),Oracle就把系统检查点的SCN存储到控制文件中。该SCN是全局范围的,当发生文件级别的SCN时,例如将表空间置于只读状态,则不会更新系统检查点SCN。 笔者浅见,该检查点的作用为促进LGWR将redo buffer中的数据写入redo log以减少恢复时间,并检验介质故障,待验证

查询系统检查点SCN的命令如下

SQL> select CHECKPOINT_CHANGE# from v$database;
CHECKPOINT_CHANGE#
------------------
            590694

数据文件scn:当ckpt进程动时,包括全局范围的(比如日志切换)以及文件级别的检查点(将表空间置为只读、begin backup或将某个数据文件设置为offline等),这时会在控制文件中记录的scn。
查询数据文件SCN的命令如下

SQL> alter tablespace users read only;
Tablespace altered.

SQL> select file#,checkpoint_change# from v$datafile;
     FILE# CHECKPOINT_CHANGE#
---------- ------------------
         1             592277
         2             592277
         3             592277
         4             592291
         5             592277


SQL> select checkpoint_change# from v$database;
CHECKPOINT_CHANGE#
------------------
            592277

可以看到4号文件也就是users表空间所属的文件scn值和其他文件不一致,且比系统检查点的scn要大。
结束scn:每个数据文件都有一个结束scn,在数据库的正常运行中,只要数据文件在线且是可读写的,结束scn为null。否则则存在具体的scn值。结束scn也记录在控制文件中。

SQL>select TABLESPACE_NAME,STATUS from dba_tablespaces
TABLESPACE_NAME   STATUS
----------------- ---------------------------
SYSTEM            ONLINE
UNDOTBS1          ONLINE
SYSAUX            ONLINE
TEMP              ONLINE
USERS             READ ONLY
EXAMPLE           ONLINE


SQL> select file#,LAST_CHANGE# from  v$datafile;
     FILE# LAST_CHANGE#
---------- ------------
         1
         2
         3
         4       592291
         5

可以看到除了users表空间的结束scn不为空,其他数据文件的结束scn为空。

将数据库至于mount状态,由于该状态下所有的数据文件都不可写,故mount状态下所有的数据文件都具有结束scn。

SQL> shutdown immediate;
SQL> startup mount;

SQL> select file#,last_change# from v$datafile;
     FILE# LAST_CHANGE#
---------- ------------
         1       592608
         2       592608
         3       592608
         4       592291
         5       592608

数据文件头scn:不同于上述的SCN数据文件开始scn记录在每个数据文件中。当发生系统及文件级别的检查点后,不仅将这时的SCN号记录在控制文件中,同样也记录在数据文件后中。

查询 数据文件头SCN的命令如下

SQL> select file#,CHECKPOINT_CHANGE# from v$datafile_header;
     FILE# CHECKPOINT_CHANGE#
---------- ------------------
         1             592608
         2             592608
         3             592608
         4             592291
         5             592608

scn的机制

数据库运行时的SCN

我们先看下oracle事务中的数据变化是如何写入数据文件的:

1、 事务开始;

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

3、 事务修改buffer cache的数据块,该数据被标识为“脏数据”,并被写入log buffer中;

4、 事务提交,LGWR进程将log buffer中的“脏数据”写入redo log file中;

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

Redo log中的high scn和low scn

Oracle的Redo log会顺序纪录数据库的各个变化。一组redo log文件写满后,会自动切换到下一组redo log文件。则上一组redo log的high scn就是下一组redo log的low scn。在current log中high scn为无穷大。
可通过查询v$log_history查看 low scn和 high scn。
SQL> select recid,sequence#,first_change#,next_change# from v$log_history ;             
     RECID  SEQUENCE# FIRST_CHANGE# NEXT_CHANGE#
---------- ---------- ------------- ------------
         1          1        446075       474154
         2          2        474154       497385
         3          3        497385       516087
         4          4        516087       540659
         5          5        540659       564897
         6          6        564897       564903
         7          7        564903       565320
         8          8        565320       565704
         9          9        565704       565715
        10         10      565715       567343
        11         11      567343       587705
查看currnet redolog中的hith scn
SQL>select vf.member,v.status,v.first_change# from v$logfile vf,v$log v
  2      where vf.group#=v.group#
  3*   and v.status='CURRENT'

MEMBER                                                              STATUS             FIRST_CHANGE#
------------------------------------------------------------    --------------           -------------
/u01/app/oradata/orcl/redo02.log                             CURRENT         587705

打开转储出来的文件,可以看到

DUMP OF REDO FROM FILE '/u01/app/oradata/orcl/redo02.log'
 Opcodes *.*
 RBAs: 0x000000.00000000.0000 thru 0xffffffff.ffffffff.ffff
 SCNs: scn: 0x0000.00000000 thru scn: 0xffff.ffffffff
 Times: creation thru eternity
 FILE HEADER:
        Compatibility Vsn = 169869568=0xa200100
        Db ID=1269936864=0x4bb1b2e0, Db Name='ORCL'
        Activation ID=1269912032=0x4bb151e0
        Control Seq=696=0x2b8, File size=102400=0x19000
        File Number=2, Blksiz=512, File Type=2 LOG
 descrip:"Thread 0001, Seq# 0000000012, SCN 0x00000008f7b9-0xffffffffffff"
 thread: 1 nab: 0x34f6 seq: 0x0000000c hws: 0x9 eot: 1 dis: 0
 resetlogs count: 0x2c3c676f scn: 0x0000.0006ce7b (446075)
 resetlogs terminal rcv count: 0x0 scn: 0x0000.00000000
 prev resetlogs count: 0x2184ef74 scn: 0x0000.00000001 (1)
 prev resetlogs terminal rcv count: 0x0 scn: 0x0000.00000000
 Low  scn: 0x0000.0008f7b9 (587705) 04/20/2011 09:35:56
 Next scn: 0xffff.ffffffff 01/01/1988 00:00:00
 Enabled scn: 0x0000.0006ce7b (446075) 02/03/2011 18:29:03
 Thread closed scn: 0x0000.00090ae0 (592608) 04/20/2011 15:29:05
 Disk cksum: 0x30ee Calc cksum: 0x30ee
 Terminal recovery stop scn: 0x0000.00000000
 Terminal recovery  01/01/1988 00:00:00
 Most recent redo scn: 0x0000.00000000
 Largest LWN: 1920 blocks
 End-of-redo stream : No
 Unprotected mode
 Miscellaneous flags: 0x0
 Thread internal enable indicator: thr: 0, seq: 0 scn: 0x0000.00000000

redo log中当前系统的SCN记录当前最新的数据库scn值可通过如下命令查看

SQL> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
                  594373

如果需要进行实例恢复,则需要恢复的记录为587705至594373中redo log中的记录。

日志切换或者checkpoint

当日志切换或发生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都不会被更新。

心跳
在Oracle中有一个事件叫Heartbeat,这个词在很多地方被提及,并且有着不同的含义(比如RAC中),我们这里要讨论的是CKPT的Heartbeat机制。
Oracle通过CKPT进程每3秒将Heartbeat写入控制文件,以减少故障时的恢复时间

数据库正常关闭启动

数据库正常关闭时,系统会执行一个完全检查点动作,并用该检查点时的SCN号更新上述4个SCN号,这时所有数据文件的终止SCN号会设置为数据文件头的那个启动SCN(除了离线和只读的数据文件)

数据库重新启动时,Oracle将数据文件头中的启动SCN与数据文件检查点SCN比较,如果这两个值匹配,Oracle接下来再比较数据文件头中的SCN和控制文件中数据文件的终止SCN,如果这个值也匹配,就意味着所有数据块已经提交,因此数据库不需要进行恢复,此时数据库直接打开。当所有的数据文件都打开之后,在线且可读写的数据文件终止SCN再次被设置为NULL,表示数据文件已经打开并能够正常使用了。有些表空间是只读的,这时控制文件中的系统检查点SCN号会不断增长,而数据文件SCN号和文件头中的启动SCN(直号会停止更新到表空间又设置为可读写),显然这时系统检查点SCN号会大于数据文件SCN和文件头启动SCN。

数据库非正常关闭
数据库非正常关闭 ( 或称为实例崩溃 ) 时,终止 SCN 不会被设置,依然为 NULL ,这可以通过把数据库启动至 mount 状态查询出来。 这样重新启动时,SMON进程 会执行实例恢复工作,即先执行前滚、回滚操作,再把数据库打开。

数据文件介质故障

出现介质故障时,数据文件检查点SCN及系统检查点SCN比文件头启动SCN大。系统发生介质故障时,数据文件被以前的备份代替,控制文件中的数据文件检查点SCN肯定比文件头中的启动SCN要大,这样Oracle就知道要对这个文件进行介质 恢复

控制文件介质故障

系统检查点SCN及数据文件SCN比数据文件头启动SCN小:
在数据库恢复时,控制文件可能不是最新的,即把一个较早的控制文件还原为当前的控制文件,然后再执行恢复操作,这时控制文件中的系统检查点SCN和数据文件SCN可能比文件头的启动SCN小。这时恢复数据库要用下面命令:recover database using Backup Controlfile或其他的恢复语句。

备份时的实例崩溃

当执行begin backup时实例崩溃:控制文件中的数据文件检查点SCN号和数据文件头部检查点SCN号相同,但是每个可读写的在线数据文件之间检查点SCN号不同,那么要求介质恢复,例如发出begin backup命令后就会出现这种情况,需要通过end backup命令好才可以打开数据库。

关于oracle dblink 使scn 增加 关于Oracle里SCN的基本知识: 1、Oracle的SCN在每秒16384次commit的情况下可以维持534年,每秒16384次commit是Oracle早先认为的任何系统的极限commit强度; 2、Oracle里SCN的起点是1988年1月1日; 3、_minimum_giga_scn=n的含义是把SCN往前推进到nG,但请注意,只有在SCN小于nG的时候才会用到这个隐含参数,反之 阅读详情

相关推荐

随机配置网络SCN实现的matlab代码——亲测可用

随机配置网络SCN实现的matlab代码——亲测可用

在oracle的scn详细说明

在Oracle数据库中,SCN(System Change Number)是一个全局唯一的标识符,用于标识数据库中每个数据块的变化。SCN值是一个单调递增的整数,以秒为单位,自Oracle数据库实例启动以来不断增长。SCN值主要用于以下目的:控制并发事务:Oracle使用SCN来检测并发访问的数据块是否已被修改。当多个事务访问同一数据块时,它们必须等待对该数据块的上一个事务的提交或回滚。这通过SCN来判断,因为只有在SCN大于数据块上的最新修改时,Oracle才允许其他事务访问该数据块。

weixin_63131036的博客 2218

SMILES:化学结构的线性表示方法

SMILES:化学结构的线性表示方法

jasminefeng的博客 1万+

在oracle中的scn技术

在数据库中,SCN也可以说是无处不在,数据文件头,控制文件,数据块头,日志文件等等都标记着SCN。如果有表空间read only,那么该表空间的所有datafile的start SCN和stop SCN将被冻结,这个时候就跟System Checkpoint SCN不一致,但在库open的时候是不需要做media recovery的,如果没有DatafileCheckpoint SCN就无法判断这些datafile是否是最新的。SCN可以说是Oracle中一个很基础的部分,但同时它也是一个很重要的。

weixin_63131036的博客 1672

Windows 环境下 OpenClaw 的安装与千问大模型配置

为了不占用 C 盘空间,重装系统也不丢失配置,本文详细记录了如何将 OpenClaw 安装在非系统盘,比如D 盘,并对接阿里云 通义千问大模型的全过程。主要是利用 NVM 和 npm 进行安装,方便后续一键升级,配置具有免费额度的Qwen API,这个只需要在阿里云百炼注册一个账号就能获得免费额度。

博客 6536

华为手环实时心率数据导出到UWP项目中

hello大家好呀O(∩_∩)O最近在做毕设 其中有个小功能要用到实时心率数据。查找网上的资料发现只有小米手环的实时心率数据导出但是没有华为手环的,我试了华为手环但是并不能行得通哈哈哈。现在分享一下华为手环实时心率数据导出的代码。

apple_63713858的博客 1581

oracle数据库scn是什么

SCN(System Change Number,系统改变号)是顺序递增的一个数字,在Oracle 中用来标识数据库的每一次改动,及其先后顺序。SCN的最大值是0xffff.ffffffff。Oracle对SCN的管理,分为单节点和RAC两种方式。单节点的instance中单节点的instance中,SCN值存在SGA区,由system commit number latch保护。任何进程要得到当前的SCN值,都要先得到这个latch。RAC/OPS环境中Oracle通过排队机制(Enqueue)实现SCN

顺其自然~专栏 3271

Claude Code Router 401错误修复

claude code router配置相关环境变量问题

如沐春风 6357

Oracle SCN 详解

什么是 SCN SCN (System Change Number) 即系统改变号,是一个由 Oracle 数据库使用的逻辑、内部的时间戳。SCN 按数据库中发生的事件排序,以满足事务 ACID 属性的需要。可以被看做是 Oracle 的内部逻辑时钟机制。Oracle 数据库在系统全局区(SGA)中递增 SCN。 SCN 在数据库中无处不在,常见的事务表、控制文件、数据文件头、日志文件、数据块头等...

Ray Song 的 blog 1282

深度强化学习-D3QN算法原理与代码

Dueling Double Deep Q Network(D3QN)算法结合了Double DQN和Dueling DQN算法的思想,进一步提升了算法的性能。如果对Doubel DQN和Dueling DQN算法还不太了解的话,可以参考我的这两篇博文:深度强化学习-Doubel DQN算法原理与代码和深度强化学习-Dueling DQN算法原理与代码,分别详细讲述了这两个算法的原理以及代码实现。本文就带领大家了解一下D3QN算法,代码链接见下方。 代码:https://github.com/indigo

weixin_46133643的博客 2万+

使用 Simulink Real-Time 搭建一个完整的实时信号采集与滤波系统模型

本文详细介绍了基于Simulink Real-Time构建实时信号采集与滤波系统的完整流程。主要内容包括:系统配置(模型创建与参数设置)、信号采集模块搭建(模拟信号源或真实硬件连接)、实时滤波器设计(浮点/定点)、输出可视化(Scope/ToWorkspace等)、模型编译与下载到目标机、外部模式在线调试及数据保存方法。系统可实现微秒级实时信号处理,适用于工业控制、航空航天等对时间确定性要求高的场景。文章还提供了优化建议(多速率建模、优先级调度等)和应用场景说明,帮助读者快速掌握实时系统开发的核心技能。

amy_mhd的博客 304

详解Oracle数据库scn原理

Oracle数据库的SCN(System Change Number)原理是其内部实现事务处理、并发控制、数据恢复及多版本一致性读的重要机制。Oracle SCN机制是一个深度集成于数据库核心架构的概念,它不仅在数据库内部事务处理中起到至关重要的作用,还确保了数据库在面对各种异常情况时仍能保持数据的完整性和一致性。

专注于数据库技术分享,包含但不限于Oracle,MySQL,PostgreSQL,ElasticSearch及国产数据库等 1225

全局注意机制 GAM | Global Attention Mechanism: Retain Information to Enhance Channel-Spatial Interactions

全局注意机制 GAM

Coding... 2575

oracle之SCN

//concept作者: fuyuncat来源: www.HelloDBA.comSCN(System Chang Number)作为oracle中的一个重要机制,在数据恢复、Data Guard、Streams复制、RAC节点间的同步等各个功能中起着重要作用。理解SCN的运作机制,可以帮助你更加深入地了解上述功能。在理解SCN之前,我们先看下oracle事

DAVID的专栏 4459

SAP 经营范围(Operating Concern) 和业务范围 (Business Area) 在核算架构或是管理架构中的区别和联系分别是什么 请给具体的示例

摘要:SAP系统中,业务范围(Business Area)和经营范围(Operating Concern)在核算架构中具有不同功能。业务范围是FI/CO共用维度,用于跨公司码的业务线核算(如电子产品、机械设备),支持内部管理和简单对外报表。经营范围则是CO-PA专属维度,聚焦获利能力分析,可细化到产品+客户+区域组合(如分析手机在华东区域的获利情况)。两者存在层级关联:经营范围包含业务范围作为基础维度,业务范围数据会传递至经营范围进行深度分析。实际应用中需先配置业务范围,再设置经营范围并关联相关维度,共同支

金牌架构师 94

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Oracle SCN 实现机制总结

Oracle SCN 实现机制总结     author:润明 2012-2-4  QQ:226399587  http://blog.youkuaiyun.com/runming918 SCN(System Chang Number)作为oracle中的一个重要机制,在数据恢复、Data Guard、Streams复制、RAC节点间的同步等各个功能中起着重要作用。理解SCN的运作机制,可以帮助你更加

润明--oracle--unix-IT技术专栏 1836

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

oracle scn详解

1.什么是scn? SCN用以标识数据库在某个确切时刻提交的版本。在事务提交时,它被赋予一个唯一的标识事务的SCN。SCN同时被作为Oracle数据库的内部时钟机制,可被看做逻辑时钟,每个数据库都有一个全局的SCN生成器。 SCN(System Change Number),也就是通常所说的系统改变号,是数据库中非常重要的一个数据结构。 SCN用以标识数据库在某个确切时刻提交

荣耀之路 7871

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

查询oracle历史scn,ORACLE中的各种SCN查询

1.查询系统当前SCN两条命令 SQL> select current_scn from v$database;SQL> select dbms_flashback.get_system_change_number from dual;GET_SYSTEM_CHANGE_NUMBER------------------------1781893另一个查SCN的方法,稍有延迟是因为执行命...

weixin_39676021的博客 1918

oracle scn 作用,Oracle SCN(一)

What is System Change Number (SCN)?ConceptThe SCN is a stamp that defines a committed version of a database at a point in time. Oracle assigns every committed transaction a unique SCN. The value of a ...

weixin_36372452的博客 397

oracle的scn技术,Oracle SCN机制详细解读

SCN即系统改变号(System Change Number),是在某个时间点定义数据库已提交版本的时间戳标记。 Oracle为每个已提交的事务分配一个唯一的SCN。 SCN的值是对数据库进行更改的逻辑时间点。 Oracle使用此编号记录对数据库所做的更改。在数据库中,SCN也可以说是无处不在,数据文件头,控制文件,数据块头,日志文件等等都标记着SCN。也正是这样,数据库的一致性维护和SCN密切...

weixin_29699579的博客 2530

oracle数据库的scn,Oracle数据库SCN详解

SCN号概述SCN是当Oracle数据库更新后,由DBMS自动维护去累积递增的一个数字。Oracle数据库中一共有4种SCN分别为系统检查点SCN: 系统检查点SCN位于控制文件中,当检查点进程启动时(ckpt),Oracle就把系统检查点的SCN存储到控制文件中。该SCN是全局范围的,当发生文件级别的SCN时,例如将表空间置于只读状态,则不会更新系统检查点SCN。查询系统检查点SCN的命令如下S...

weixin_34138192的博客 717

oracle scn 作用,Oracle中scn讲解

SCNSystem Change Numbers (SCNs)&System Commit Numbers(系统改变号&系统提交号)A system change number (SCN) is a logical, internal time stamp used by Oracle Database;***************************************...

weixin_42476987的博客 500

oracle创建dblinks出现scn,关于oracle dblink 使scn 增加

关于Oracle里SCN的基本知识:1、Oracle的SCN在每秒16384次commit的情况下可以维持534年,每秒16384次commit是Oracle早先认为的任何系统的极限commit强度;2、Oracle里SCN的起点是1988年1月1日;3、_minimum_giga_scn=n的含义是把SCN往前推进到nG,但请注意,只有在SCN小于nG的时候才会用到这个隐含参数,反之则Oracl...

weixin_33664951的博客 700
上一篇: 通过JavaScript操作HTML中select标签
下一篇: Oracle EM相关知识
JavaMan_KA
博客等级 码龄16年 12粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值