- 浏览: 4407018 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (634)
- Oracle日常管理 (142)
- Oracle体系架构 (45)
- Oracle Tuning (52)
- Oracle故障诊断 (35)
- RAC/DG/OGG (64)
- Oracle11g New Features (48)
- DataWarehouse (15)
- SQL, PL/SQL (14)
- DB2日常管理 (9)
- Weblogic (11)
- Shell (19)
- AIX (12)
- Linux/Unix高可用性 (11)
- Linux/Unix日常管理 (66)
- Linux桌面应用 (37)
- Windows (2)
- 生活和工作 (13)
- 私人记事 (0)
- Python (9)
- CBO (15)
- Cognos (2)
- ORACLE 12c New Feature (2)
- PL/SQL (2)
- SQL (1)
- C++ (2)
- Hadoop大数据 (5)
- 机器学习 (3)
- 非技术 (1)
最新评论
-
di1984HIT:
xuexilee!!!
Oracle 11g R2 RAC高可用连接特性 – SCAN详解 -
aneyes123:
谢谢非常有用那
PL/SQL的存储过程和函数(原创) -
jcjcjc:
写的很详细
Oracle中Hint深入理解(原创) -
di1984HIT:
学习了,学习了
Linux NTP配置详解 (Network Time Protocol) -
avalonzst:
大写的赞..
AIX内存概述(原创)
SCN号概述
SCN是当Oracle数据库更新后,由DBMS自动维护去累积递增的一个数字。Oracle数据库中一共有4种SCN分别为
系统检查点SCN: 系统检查点SCN位于控制文件中,当检查点进程启动时(ckpt),Oracle就把系统检查点的SCN存储到控制文件中。该SCN是全局范围的,当发生文件级别的SCN时,例如将表空间置于只读状态,则不会更新系统检查点SCN。
查询系统检查点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
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
2 where vf.group#=v.group#
3* and v.status='CURRENT'
MEMBER STATUS FIRST_CHANGE#
------------------------------------------------------------ -------------- -------------
/u01/app/oradata/orcl/redo02.log CURRENT 587705
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
user_dump_dest string /home/oracle/admin/c001/udump
打开转储出来的文件,可以看到
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命令好才可以打开数据库。
参考至:《教你如何成为10g OCP》韩思捷著
http://blog.csdn.net/daimin1983/archive/2008/12/09/3484173.aspx
http://apps.hi.baidu.com/share/detail/24548269
http://blog.csdn.net/liweiah/archive/2009/07/13/4345656.aspx
http://lanying1982.blog.163.com/blog/static/230677482009015112027385/
原创文章,转载请注明出处、作者
如有错误,欢迎指正
邮箱:czmcj@163.com
发表评论
-
Oracle 锁与锁争用
2015-05-08 02:13 4180大多数的锁都是行级 ... -
Oracle SQL Parsing
2014-07-30 22:24 1949Stages of SQL Processing Fig ... -
Oracle 11g中的direct path read(原创)
2014-06-16 23:01 5788在11g中,全表扫描可能使用direct path rea ... -
深入解析direct path read
2014-06-16 22:35 2598传统读取数据的 ... -
ORA-01555和延迟块清除
2014-06-16 21:13 206001555, 00000, "snapshot t ... -
Oracle(block clean out)的块清除
2014-06-16 21:09 1287Oracle(block clean out)的块清除Cl ... -
SCN之fast cleanout
2014-06-07 16:13 1751SQL> select dbms_rowid.row ... -
SCN之delayed block cleanout
2014-06-07 16:09 1195Block的cache header部分 ... -
Oracle rman change tracking CTWR(原创)
2014-04-25 11:10 2981block change tracking介绍Block c ... -
SSM自动段空间管理 简介
2014-03-27 19:46 1360因为ASSM的官方文档很少,经过多次的查证之后,终于弄明白了 ... -
undo表空间相关(原创)
2014-03-25 21:48 2111DML语句与undo ... -
Bitmap Index vs B-tree Index(原创)
2014-03-08 21:09 1532Introduction Conventional wi ... -
bitmap索引的深入研究
2014-03-08 14:59 1465位图(bitmap)索引是另外一种索引类型,它的组织形式与 ... -
Oracle 10g/11g Latch机制的变化
2013-01-09 18:57 1548Oracle 10g/11g Latch机制 ... -
ASM内部原理(原创)
2012-12-24 21:55 9950ASM的SGA组成 ASM实例 ... -
ASM的元数据(原创)
2012-12-18 21:16 3070概述 ASM Filesystem是建立在ASM D ... -
Oracle数据块深入分析总结
2012-04-23 12:51 7912最近在研究块的内部结构,把文档简单整理了一下,和大家分享一下。 ... -
深入理解重建索引(原创)
2012-04-10 16:58 20795什么时候需要重建索引 ... -
Oracle中B-TREE索引的深入理解(原创)
2012-04-09 20:59 15938索引概述 索引与表一样,也属于段(segment)的 ... -
深入理解Oracle中的latch(原创)
2012-04-04 18:17 11169串行化 概述 串行化 - 数据库系统本 ...
相关推荐
### Oracle SCN详解 #### 一、SCN基础 ##### 1. 什么是SCN **SCN(System Change Number,系统变更号)**是Oracle数据库内部用于标识事务处理中的事件顺序以及确保数据一致性的关键机制之一。SCN是一种逻辑的...
### Oracle SCN 详解 #### 一、SCN概念解析 **SCN (System Change Number)** 是Oracle数据库中用于标识数据库状态变化的一种内部编号机制。它是一个递增的数字,每当数据库发生更新操作时,SCN就会增加。这个机制...
Oracle系统的System Change Number (SCN)是其内部用于记录数据库变化的关键组件,它是一个不断递增的数值,确保了数据库操作的顺序性和一致性。SCN的重要性在于,它不受操作系统时间的影响,避免了由于时间篡改导致...
Oracle SCN(System Change Number)机制是Oracle数据库中用于跟踪和保证数据一致性的重要组成部分。SCN是一个不断递增的数字,代表了数据库中的时间线,它记录了每一次对数据库的修改。Oracle利用SCN来确定数据的...
### 个人经验总结:Oracle数据库SCN号详解 #### 一、引言 在Oracle数据库管理与维护过程中,了解SCN(System Change Number)的概念及其作用至关重要。SCN是Oracle数据库内部用于跟踪数据库状态变化的一个重要机制,...
Oracle SCN 详解 Oracle 中的 SCN(system change number)是一种时间号,类似于我们的北京时间,但是它的意义不同于北京时间。SCN 是 Oracle 用来记录所有操作的先后顺序的重要机制。 为什么 Oracle 不使用时间...
### Oracle SCN 概念解析 #### 一、SCN 的定义与作用 **SCN (System Change Number)** 是 Oracle 数据库中的一个重要概念,用于记录数据库的状态变化。它本质上是一个递增的逻辑计数器,每当数据库发生变化时就会...
Oracle SCN(System Change Number)是Oracle数据库中一个关键的概念,它是数据库内部的逻辑时钟,用来标记数据库在特定时刻的状态。SCN是一个递增的序列号,每次事务提交时,都会分配一个唯一的SCN,以此确保数据库...
### Oracle SCN详解 #### 一、SCN概念与作用 **SCN(System Change Number)**,即系统变更号,是Oracle数据库中的一个重要机制。它主要用于跟踪数据库内部的变化,包括但不限于数据恢复、Data Guard、Streams复制...
【Oracle SCN增长过快问题详解】 Oracle数据库中的System Change Number(SCN)是数据库内部用于追踪事务时间顺序的关键机制。SCN是一个递增的计数器,它在每次事务提交时都会增加,确保数据的一致性和可恢复性。...
- FLASHBACK_TIME/SCN:用于时间点恢复或基于SCN的恢复。 通过这些参数,用户可以根据实际需求定制导出操作,实现更精细的控制。 总结起来,Oracle数据泵是Oracle数据库管理中不可或缺的工具,它提供了高效、灵活...
### Oracle语法详解:数据操作与控制语言 #### 一、概述 Oracle是一种广泛使用的数据库管理系统,提供了丰富的数据操作和控制语言来支持数据管理的各种需求。本文档旨在提供一个详细的Oracle语法指南,帮助读者理解...
SCN在Oracle的事务管理中起到关键作用,用于判断数据的一致性和完整性。当同一个SCN影响超过254行数据时,将会为这个事务分配一个新的SCN。 Oracle数据块还可能包含数据的校验信息,如校验值、序列号、块的状态标记...
Oracle 12c 闪回技术 Flashback Database.pdf Oracle 12c 闪回技术 Oracle ...Oracle 12c SCN详解.pdf Oracle 12c RMAN备份与恢复数据库.pdf Oracle 12c EXPDP和IMPDP指令详解.pdf Oracle 12c EXP和IMP指令详解.pdf
### Oracle RMAN 命令详解 #### 一、RMAN 概述 RMAN (Recovery Manager) 是 Oracle 提供的一种强大而灵活的工具,主要用于数据库备份与恢复。RMAN 支持多种类型的命令,主要包括独立命令和作业命令。 - **独立...
### Oracle导入/导出数据详解 #### 一、Oracle导入实用程序概述 Oracle的导入实用程序(Import Utility),简称IMP,是一种强大的工具,用于将数据从一个操作系统文件中加载到Oracle数据库中。IMP的主要功能是从...
### Oracle 增量恢复详解 #### 一、Oracle RMAN 增量备份概述 在Oracle数据库管理系统中,RMAN(Recovery Manager)是一种强大的工具,用于执行数据库的备份与恢复操作。其中,增量备份作为一种高效的方式,在实际...
### Oracle 10g 回闪技术详解 #### 引言 在Oracle 10g中,回闪技术是一项非常重要的功能,它可以帮助数据库管理员(DBA)轻松地将数据库或其部分恢复到之前的某个时间点状态。这项技术极大地方便了数据库的管理和维护...
### Oracle中IMP命令详解 #### 一、概述 Oracle 的导入实用程序(Import utility)是一种强大的工具,允许用户从一个数据库提取数据,并将其写入操作系统文件。这在进行数据库迁移、备份恢复等操作时非常有用。IMP...