SCN
号与
oracle
数据库恢复过程有着密切的关系,只有很好地理解了这层关系,才能深刻地理解恢复的原理,从而才能很好地解决这方面的问题。
SCN
与
CHECKPOINT
CKPT
进程在
checkpoint
发生时,将当时的
SCN
号写入数据文件头和控制文件,同时通知
DBWR
进程将数据块写到数据文件。
CKPT
进程也会在控制文件中记录
RBA(redo byte address),
以标志
Recovery
需要从日志中哪个地方开始。与
checkpoint
相关的
SCN
号有四个,其中三个存在控制文件中,一个存放在数据文件头中。
这四个分别是:
1.System Checkpoint SCN
当
checkpoint
完成后,
ORACLE
将
System Checkpoint SCN
号存放在控制文件
中。我们可以通过下面
SQL
语句查询:
select checkpoint_change# from v$database;
2.Datafile Checkpoint SCN
当
checkpoint
完成后,
ORACLE
将
Datafile Checkpoint SCN
号存放在控制文件
中。我们可以通过下面
SQL
语句查询所有数据文件的
Datafile Checkpoinnt SCN
号。
select name,checkpoint_change# from v$datafile;
3.Start SCN
号
ORACLE
将
Start SCN
号存放在数据文件头
中。
这个
SCN
用于检查数据库启动过程是否需要做
M
edia Recovery
.
我们可以通过以下
SQL
语句查询:
select name,checkpoint_change# from v$datafile_header;
4.End SCN (Stop SCN)
号
ORACLE
将
End SCN
号存放在控制文件
中。
这个
SCN
号用于检查数据库启动过程是否需要做
I
nstance Recovery
.
我们可以通过以下
SQL
语句查询:
select name,last_change# from v$datafile;
在数据库正常运行的情况下,对可读写的,
online
的数据文件,该
SCN
号为
NULL.
我们作个小的试验,内容如下:
在执行检查点进程之前
SCN
号如下:
System Checkpoint SCN 4609061
--select checkpoint_change# from v$database;
Datafile Checkpoint SCN 4609061
--select name,checkpoint_change# from v$datafile;
Start SCN 4609061
--select name,checkpoint_change# from v$datafile_header;
End SCN
空
--select name,last_change# from v$datafile;
执行
alter system checkpoint
。后的
SCN
号如下:
System Checkpoint SCN 4609630
--select checkpoint_change# from v$database;
Datafile Checkpoint SCN 4609630
--select name,checkpoint_change# from v$datafile;
Start SCN 4609630
--select name,checkpoint_change# from v$datafile_header;
End SCN null
--select name,last_change# from v$datafile;
SCN不连续原因可能如下:
1.
当发生日志组切换的时候
2.
当符合
LOG_CHECKPOINT_TIMEOUT
,
LOG_CHECKPOINT_INTERVAL
,
fast_start_io_target,fast_start_mttr_target
参数设置的时候
3.
当运行
ALTER SYSTEM SWITCH LOGFILE
的时候
4.
当运行
ALTER SYSTEM CHECKPOINT
的时候
5.
当运行
alter tablespace XXX begin backup
,
end backup
的时候
6.
当运行
alter tablespace ,datafile offline
的时候;
SCN
号与数据库启动
在数据库启动过程中,当
System Checkpoint SCN
、
Datafile Checkpoint SCN
和
Start SCN
号都相同时,数据库可以正常启动,不需要做
media recovery.
三者当中有一个不同时,则需要做
media recovery
。如果在启动的过程中,
End SCN
号为
NULL
,则需要做
instance recovery
。
ORACLE
在启动过程中首先检查是否需要
media recovery
,然后再检查是否需要
instance recovery
。
SCN
号与数据库关闭
如果数据库的正常关闭的话,将会触发一个
checkpoint
,同时将数据文件的
END SCN
号设置为相应数据文件的
Start SCN
号。
当数据库启动时,发现它们是一致的,则不需要做
instance recovery
。在数据库正常启动后,
ORACLE
会将
END SCN
号设置为
NULL
。如果数据库异常关闭的话,则
END SCN
号将为
NULL.
为什么需要
System checkpoint SCN
号与
Datafile Checkpoint SCN
号
为什么
ORACLE
会在控制文件中记录
System checkpoint SCN
号的同时,还需要为每个数据文件记录
Datafile Checkpoint SCN
号?
原因有二:
1.
对只读表空间,其数据文件的
Datafile Checkpoint SCN
、
Start SCN
和
END SCN
号均相同。
这三个
SCN
在表空间处于只读期间都将被冻结。
2.
如果控制文件不是当前的控制文件,则
System checkpoint
会小于
Start SCN
或
END SCN
号。记录这些
SCN
号,可以区分控制文件是否是当前的控制文件。
Recovery database using backup controlfile
当有一个
Start SCN
号超过了
System Checkpoit SCN
号时,则说明控制文件不是当前的控制文件,因此在做
recovery
时需要采用
using backup controlfile
。这是为什么需要记录
SystemCheckpoint SCN
的原因之一。
这里需要一提的是,当重建控制文件的时候,
System Checkpoint SCN
为
0
,
Datafile Checkpoint SCN
的数据来自于
Start SCN
。根据上述的描述,此时需要采用
using backup controlfile
做
recovery
。
重建控制文件,重建方式分两种(
resetlogs
和
noresetlogs)
(此段内容来自:http://space.51CTO提醒您,请勿滥发广告!/12361284/viewspace-346
)
1.
使用
resetlogs
选项时,
System Checkpoint SCN
为被归为
0
,而其中记录的各个数据文件的
Datafile Checkpoint SCN
则来自于
Start SCN
(也就是说可能会从冷备份
的数据文件的数据文件头中获取)。根据上述的描述,此时需要采用
using backup controlfile
做
recovery.
因此情况是
System Checkpoint SCN=0 < Start SCN = Datafile Checkpoint SCN。
2.
使用
noresetlogs
选项时,有一个前提就是:一定要有
online redo log
的存在。否则就要使用
resetlogs
选项。
这个时候控制文件重建好时,其
system checkpoint SCN=Datafile Checkpoint SCN=Lastest Checkpoint SCN in online redo log,
我们可以看到
Datafile Checkpoint SCN
并没有从
Start SCN
中读取。而是读取了最新的日志文件中的
SCN
作为自己的数据。此时重建的控制文件在恢复中的作用跟最新的控制文件类似,
System Checkpoint SCN(
已经读取最新的
redo log
的
checkpoint SCN
信息
)
可能会
>Start SCN
(因为数据文件可能会从冷备份中恢复),恢复时就不需要加
using backup controlfile
子句了。
关于
backup controlfile
的补充:
backup controlfile
只有备份时刻的
archive log
信息,并没有
DB crash
时刻的
archive log
信息,所以并不会自动应用
online redo log,
而是提示找不到序号为
Lastest Archive log sequence + 1
的
archive log,
尽管你可以手动指定
online redo log
来实现完全恢复,但因为一旦使用了
using backup controlfile
子句,
Oracle
就视为不完全恢复,必须
open resetlogs!
实际上,假如你有旧的控制文件又不想
resetlogs
,那很简单,使用旧的控制文件
mount
然后
backup to trace
,然后手工创建控制文件,使用
reuse database ... noresetlogs .
这样就可以
recover database
自动恢复并
open database
而不用
resetlogs
了(
记住:必须有所有的online redo logs
才可以这样!
)。
备份的控制文件不能自动进行完全恢复
可以手工apply
日志进行完全恢复
重新创建的可以自动进行完全恢复(By biti
)
发表评论
-
Why Facebook Uses MySQL for Timeline
2011-12-16 22:28 697A little-known fact about Fac ... -
浅析Oracle中PGA和UGA两者间的区别
2011-09-30 12:01 1197初学Oracle时,你可能会 ... -
Oracle开发专题之:分析函数(OVER)
2011-09-27 15:17 707一、Oracle分析函数简介: 在日常的生产环境中,我们 ... -
oracle decode()
2011-09-23 17:27 660decode(条件,值1,翻译值1,值2,翻译值2,...值n ... -
dba_segments
2011-09-20 10:19 9451、desc dba_segments 名称 ... -
Oracle表空间管理
2011-09-20 10:18 10002010-01-05 08:54 129人阅读 ... -
关于oracle 中的dmt_lmt_mssm_assm之间的关系
2011-09-16 11:46 1609在了解dmt和lmt之前,先来简单的熟悉一下oracle数 ... -
如果查看Oracle数据块和操作系统块大小
2011-09-14 11:21 40251、 在命令窗口中执行: SQL& ... -
深入了解Oracle SCN(3)
2011-09-09 10:49 705示例 例子背景:oracle ... -
深入了解Oracle SCN(1)
2011-09-09 10:46 677[说明] 本来在研究Backup and R ... -
DBWn基础
2011-09-08 11:00 745DBWn基础 Database Writer (DBWn ... -
index skip scan的一些实验。
2011-09-05 16:00 846index skip scan的基本介绍。 表employe ... -
Oracle 绑定变量详解
2011-09-02 17:26 599之前整理过一篇有关绑 ... -
OLTP和OLAP
2011-09-01 11:55 594联机事务处理(OLTP)和联机分析处理(OLAP)的不同,主要 ... -
Oracle的优化器(Optimizer) (CBO优化) 分享
2011-09-01 10:56 720Oracle的优化器(Optimizer) ... -
oracle中的exists 和not exists 用法详解
2011-08-31 17:25 702有两个简单例子,以说明 “exists”和“in”的效率问 ...
相关推荐
Oracle SCN(System Change Number)机制是Oracle数据库中用于追踪和管理数据变化的关键组件。SCN是一个不断递增的数字,确保了数据库能够准确地识别和处理...因此,掌握SCN机制是深入了解Oracle数据库核心功能的基础。
### Oracle SCN 概念解析 #### 一、SCN 的定义与作用 **SCN (System Change Number)** 是 ...通过这些 SQL 查询,可以深入了解 SCN 在实际应用中的工作原理,对于数据库的性能调优、故障排查等方面都有着重要的意义。
### Oracle SCN详解 #### 一、SCN概念与作用 **SCN(System Change Number)**,即系统变更号,是Oracle...通过对SCN的理解,我们可以更深入地了解Oracle数据库的内部运作机制,从而更好地管理和优化数据库性能。
在深入了解Oracle数据库的I/O操作之前,我们首先需要了解Oracle数据库的基本物理结构,这有助于更好地理解I/O产生的原因及其过程。 **1.1.1 控制文件** 控制文件是Oracle数据库的核心组成部分之一,它包含了关于...
了解这些工具和视图可以帮助DBA有效地管理和优化Oracle数据库的内存使用,提高系统性能。 总的来说,Oracle内存管理涉及到多个层面,包括进程私有内存(PGA)和全局共享内存(SGA)的配置、使用和优化。深入理解...
- **Controlfile Dump分析**:通过对控制文件的dump内容进行分析,可以深入了解介质恢复所需的关键信息,如数据文件的位置、重做日志文件的状态等。 - **Redolog Dump分析**:重做日志文件包含了数据库的所有更改...
Oracle数据库是全球广泛使用的大型关系型数据库管理系统,其在企业级数据存储和处理中扮演着重要角色。...通过学习这些内容,不仅可以掌握Oracle的基本操作,还能深入了解其内部机制,从而更好地管理和优化数据库。
Oracle是业界广泛使用的大型关系型数据库管理系统,其核心组成部分之一就是数据块结构(Block)。数据块是Oracle数据库中最小的...因此,对数据块结构的深入了解对于确保数据库的稳定运行和数据的安全具有重要意义。
在实际操作中,除了掌握日志文件的结构和格式之外,还需要了解Oracle数据库的配置、运行状态以及发生故障的具体情况。通过综合分析,采用合适的恢复方法,可以将数据库恢复到一致和可用的状态。 总之,Oracle 8i...
2. CPU used when call started (V$SESSTAT1/[SYS]/ABCDEF/ORACLE.EXE) (绝对) 此计数器表示调用开始时的CPU使用情况,有助于追踪CPU资源在不同阶段的分配。 3. CR blocks created (V$SESSTAT1/[SYS]/ABCDEF/ORACLE...
Oracle数据库的优化是一个复杂而关键的任务,涉及到多个层面,包括其内部机制、内存区的配置以及数据文件和...通过深入了解Oracle的组件结构和工作原理,我们可以更好地调整和优化数据库,从而提升整体系统的运行效率。
通过这些章节的学习,读者不仅能够了解Oracle 10g 在各个层面的运作机制,还能掌握如何针对不同的操作系统环境进行有效的架构调整和优化。这不仅有助于提高数据库的性能,还能够确保其在各种应用场景下的稳定性和...
本文将深入探讨如何在 Oracle 10g 中找回被误删的数据,主要涉及 SCNs(系统改变号)的概念及其在恢复过程中的作用。 SCN,即 System Change Number,是 Oracle 数据库的一个关键组件,它充当了数据库的内部时钟,...
对于希望深入了解Oracle数据库体系结构并掌握其管理技巧的专业人士来说,这是一个非常宝贵的资源。 - **体系结构基础**: - Oracle数据库的核心组件包括数据库文件、例程(Instance)、后台进程等。 - 数据库文件...
在深入了解Checkpoint的工作机制之前,我们需要熟悉几个关键概念: - **RBA(Redo Byte Address)**:表示重做日志块的地址,类似于数据文件中的ROWID,用于定位特定的重做日志记录。 - **LRBA(Low RBA)**:表示...
### 存储管理深入Oracle9I核心 #### 11.1 大脑—控制文件 **11.1.1 控制文件的...通过上述知识点的学习,我们深入了解了Oracle9i数据库中存储管理的核心概念和技术细节,这对于日常数据库管理和维护具有重要意义。
Oracle数据库体系结构是数据库管理员和开发人员必须深入理解的关键知识领域。Oracle数据库体系结构主要由实例和数据库组成。...对于想要深入了解Oracle数据库技术的人来说,掌握这些知识点是必不可少的。
了解这些结构对于理解Oracle如何存储和管理数据至关重要。 ##### 1. 数据库文件类型 Oracle数据库主要包括以下几种类型的文件: - **数据字典文件**(`.datadictionary`):存储数据库元数据信息。 - **重做日志...