- 浏览: 555625 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (340)
- Spring (4)
- Hibernate (2)
- Linux (34)
- Oracle (145)
- Eclipse (1)
- UML (1)
- HTML&&JAVASCRIPT (11)
- JAVA (33)
- 设计模式 (1)
- 版本控制 (1)
- wrap框架 (3)
- IBATIS (5)
- Ruby (1)
- DWR (1)
- MINA (11)
- JBPM (2)
- 缓存技术 (4)
- 网络 (3)
- 应用服务器 (1)
- GWT (5)
- 杂谈 (2)
- ICE (4)
- XML (2)
- ArcGis (2)
- Flex (8)
- junit单元测试 (1)
- SNMP (1)
- 存储 (1)
- office (1)
- MongoDB (0)
- Greenplum (3)
- 管理点滴 (1)
- C++ (6)
- 网络入门 (3)
- Tomcat (7)
- JMX (0)
- webservice (1)
- Oracle的10046事件 (1)
- Library cache内部机制详解 (1)
- expdp通过dblink来导入 (1)
最新评论
-
yuanliangding:
有没有关于mock的更多知识。
基于mock对象和JUnit框架简化Spring Web组件单元测试 -
saup007:
ssh端口不是22,怎么搞呢?
Greenplum 学习笔记 -
springmvc-freemarker:
java开源项目源码实例下载
Apache上全部JAVA开源项目简介 -
bobbell:
哇塞,你真厉害,整理的非常全面。我是一个java barcod ...
Greenplum 学习笔记 -
wsj55133245513324:
这不是bug,你将日志级别从debug提升到INFO 就好了 ...
Spring,smppapi,apache mina, ssl快速实现安全的smpp(5)
Checkpoint 2.同时CKPT进程还会在控制文件当中记录(redo block address)RBA,这个地址用来标志恢复的时候需要从日志中的那个位置开始。 在Oracle数据库中和checkpoint相关的SCN总共有4个 2.Datafile checkpoint SCN (存在于控制文件) 3.Start SCN (存在于各个数据文件头) 4.End SCN(存在于控制文件)
很多人都把checkpoint的概念给复杂化了,其实checkpoint这个数据库概念引入的真正意义就是用来减少在数据库恢复过程中所花的时间(instance recovery),那么checkpoint是又谁来做的呢?我们都知道数据库中有个CKPT进程,这个是个可选进程,但是真正执行检查点的任务并不是有ckpt来完成的,而是ckpt在更新控制文件和数据文件头的有关信息后,通知DBWn进程,产生一个检查点,在产生检查点的时候,DBWn进程会将buffer cache中的脏数据(当前online redo log对应的脏数据),写入我们的数据文件当中。那么这个时候如果数据库此时崩溃(比如我们做个shutdown abort),那么在进行实例恢复的时候就可以不需要当前online redo log的内容了,会很快就做完。因此ckpt进程只是个辅助进程,他的任务更多的是用来在系统做checkpoint的时候更新控制文件和数据文件头中的信息。其实在oracle 8i的时候呢,ckpt的任务一般都是由lgwr进程来完成,到了8i以后,随着CKPT进程的引入,lgwr的工作负担就减轻了很多(commit的速度加快了)
那么如何来产生检查点呢?
有三种方法,可以通过
1.alter system checkpoint
2.alter system switch logfile
3.DBWn进程写出脏块
SCN
在Oracle中理解为一个内部同步时钟,是系统改变号的缩写(system change number),在Oracle数据库中我们可以通过dbms_flashback包来查询当前系统的改变号:select dbms_flashback.get_system_change_number from dual;一般来讲SCN主要是用来标识数据库所做的所有改变,这个SCN的改变是只能前进,不能回退,除非我们打算重建库,数据库中的SCN永远不会归0,一般来说SCN的前进触发是由commit来进行的,除了这些据我观察每隔3秒种系统也都会刷新一次SCN.
需要注意的是:
1.CKPT一定是是在checkpoint发生的时候将数据库当前的SCN更新入数据库文件头和控制文件当中,同时DBWn进程将buffer cache中的脏数据块(dirty block)写到数据文件当中(这个脏数据也一定是当前online redo log保护的那一部分)。
1.System checkpoint SCN (存在于控制文件)
在系统执行checkpoint后,Oracle会更新当前控制文件中的System checkpoint SCN。
我们可以通过
select checkpoint_change# from v$database:
来查看
由于控制文件中记录了Oracle中各个数据库文件的位置和信息,其中当然也包括了Datafile checkpoint SCN,因此在执行checkpoint的时候,Oracle还会去更新控制文件中所记录的各个数据文件的datafile checkpoint SCN.
我们可以通过
select checkpoint_change# from v$datafile;
来查看
在执行checkpoint时,Oracle会更新存放在各个实际的数据文件头的Start SCN(注意绝对不会是控制文件中),这个SCN存在的目的是用于检查数据库启动过程中是否需要做media recovery(介质恢复)
我们可以通过
select checkpoint_change# from v$datafile_header;
最后一类SCN,End SCN他也是记录在控制文件当中,每一个所记录的数据文件头都有一个对应的End SCN,这个End SCN一定是存在于控制文件当中。这个SCN存在的绝对意义主要是用来去验证数据库启动过程中是否需要做instance recovery。我们可以通过
select name,last_change# from v$datafile
那么其实在数据库正常运行的情况下,对于read/write的online 数据文件这个SCN号为#FFFFFF(NULL).
下面来聊一聊SCN号于数据库的启动
1.在数据库的启动过程中,当System Checkpoint SCN=Datafile Checkpoint SCN=Start SCN的时候,Oracle数据库是可以正常启动的,而不需要做任何的media recovery。而如果三者当中有一个不同的话,则需要做media recovery
2.那什么时候需要做instance recovery呢?其实在正常open数据库的时候,oracle会将记录在控制文件中的每一个数据文件头的End SCN都设置为#FFFFFF(NULL),那么如果数据库进行了正常关闭比如(shutdown or shutdown immediate)这个时候,系统会执行一个检查点,这个检查点会将控制文件中记录的各个数据文件头的End SCN更新为当前online数据文件的各个数据文件头的Start SCN,也就是End SCN=Start SCN,如果再次启动数据库的时候发现二者相等,则直接打开数据库,并再次将End SCN设置为#FFFFFF(NULL),那么如果数据库是异常关闭,那么checkpoint就不会执行,因此再次打开数据库的时候End SCN<>Start SCN这个时候就需要做实例恢复。
说了那么多更新SCN操作什么的,这个更新操作到底是由谁做的呢?其实刚才已经说过了,就是我们的CKPT进程,他不仅仅会更新SCN,而且还会通知DBWn做他的事情。
再说一下System Checkpoint SCN和Datafile Checkpoint SCN,这两个SCN都是记录在控制文件当中的。但是这两个SCN有什么作用呢?
logzgh有段论述,我自己的想了一下,还是学习一下他的结论:
1.对只读表空间,其数据文件的Datafile Checkpoint SCN、Start SCN和END SCN号均相同。这三个SCN在表空间处于只读期间都将被冻结。
2.如果控制文件不是当前的控制文件(其实就是说,想比当前redo log的SCN来讲,控制文件已经过时了),则System checkpoint SCN会小于Start SCN(Start SCN是来自实际的数据文件头,有比较依据)。记录这些SCN号,可以区分控制文件是否是当前的控制文件。当有一个Start SCN(从当前各个在线数据文件中获得)号超过了System Checkpoit SCN号时,则说明控制文件不是当前的控制文件,因此在做recovery时需要采用using backup controlfile。这是为什么需要记录SystemCheckpoint SCN的原因之一。
当我们重建控制文件的时候,重建方式分两种(resetlogs 和 noresetlogs)
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 了
发表评论
-
expdp通过dblink来导入
2011-12-14 15:01 1779create.sql: spo create.log rem ... -
Library cache内部机制详解
2011-12-14 14:55 885Library cache内部机制详解 http://www ... -
Oracle的10046事件
2011-12-14 14:53 2092Oracle的10046事件,可以跟踪应用程序所执行的SQL语 ... -
REDO LOG MEMBER STATUS 和 REDO LOG GROUP STATUS
2011-12-14 14:51 924V$LOG 中列出的是REDO LOG GROUP STA ... -
oracle的exp/imp使用方法学习(转)
2011-08-30 08:54 954exp/imp两个命令可以说是oracle中最常用的命令了 ... -
oracle几个awr报告
2011-08-09 14:25 890工作中,碰到的数据库慢的几个awr报告 -
Oracle Profile 使用详解
2011-06-21 14:41 966一、目的: Oracle系统中的profile可以用来对 ... -
ORA-27013
2011-04-13 14:25 1510很新的一个bug,看下你的 memory_target是不是& ... -
ACLE表连接方式分析及常见用法
2011-03-23 09:14 1109摘要: 针对在数据仓库 ... -
ORACLE 外部表应用
2011-03-09 14:58 1062SQL> create or replace direc ... -
How to convert a 32-bit database to 64-bit database on Linux
2011-02-18 14:09 1209How to convert a 32-bit databas ... -
expdp impdp 数据库导入导出命令详解
2011-02-16 09:10 1948一、创建逻辑目录,该命令不会在操作系统创建真正的目录,最 ... -
Oracle手工解/锁表
2011-01-25 14:15 2487手工锁表:lock table tbl_t1 in row ... -
oracle动态性能视图
2011-01-22 10:47 855Oracle动态性能视图个人整理 -
RBO规则介绍
2011-01-17 16:45 1057•无条件使用索引•使用内置的优先级别决定访问路径•比较难以 ... -
关于排序、sort_area_size、临时表空间
2011-01-13 15:30 1114简单陈述一下:针对每 ... -
创建索引ORACLE 需要做的工作
2011-01-13 14:53 1315一. 先来看一下创建索引要做哪些操作:1. 把inde ... -
表之间的连接
2011-01-13 10:42 791Join是一种试图将两个表结合在一起的谓词,一次只能连接2 ... -
重建索引的条件
2011-01-12 16:43 947如果索引存在碎片,那每个索引数据块上的索引数据就更少,会导致我 ... -
TKPROF使用学习
2011-01-10 17:38 716Tkprof工具可用来格式化sql trace产生的文件, ...
相关推荐
Low SCN和Next SCN用于跟踪Redo Log的记录范围,当发生日志切换或CheckPoint时,DBWn会根据这些SCN将数据写入数据文件,同时更新Control File和数据文件头中的SCN。 SCN的生成基于时间戳,每当需要新的SCN时,系统...
### Oracle SCN 概念解析 #### 一、SCN 的定义与作用 **SCN (System Change Number)** 是 Oracle 数据库中的一个重要概念,用于记录数据库的状态变化。它本质上是一个递增的逻辑计数器,每当数据库发生变化时就会...
如果表空间被设置为只读,那么相关数据文件的Start SCN和Datafile Checkpoint SCN不会更新。此外,可以使用`SCN_TO_TIMESTAMP`函数(10g及以上版本)将SCN转换回timestamp,以便进行时间点恢复。 总之,Oracle SCN...
#### 一、SCN概念解析 **SCN (System Change Number)** 是Oracle数据库中用于标识数据库状态变化的一种内部编号机制。它是一个递增的数字,每当数据库发生更新操作时,SCN就会增加。这个机制主要用于跟踪数据库的...
不同的SCN类型有不同的作用,比如检查点SCN(Checkpoint SCN)记录了最近一次检查点操作时的数据文件状态。数据文件头中的Checkpoint SCN反映了数据文件的最新检查点信息,这对于数据库恢复至关重要。 获取SCN的...
### Oracle Checkpoint 深入解析 #### 一、引言与目标 在深入探讨 Oracle Checkpoint 的原理之前,我们先来明确一下本篇文章的主要目标和背景。 **目标:** - **理论理解:**理解 Oracle Checkpoint 的核心概念...
在SQL优化方面,需要深入理解SQL语句的执行过程,选择合适的数据库连接机制,区分硬解析和软解析,并制定执行计划和使用hints。SQL跟踪和分析用于诊断性能问题。Oracle的锁(Lock)和闩(Latch)机制是数据库并发...
此外,控制文件还记录了系统和数据文件的SCN(System Change Number)信息,这对于数据恢复至关重要。 **1.1.2 用户数据修改** 为了提高性能,Oracle会将数据缓存在内存中的缓冲池(Buffer Cache)里。当用户数据...
深入解析OracleDBA入门进阶与诊断案例 扫描版 作 者:盖国强 著 出 版 社:人民邮电出版社 出版时间:2009-1-1 页 数:527 内容简介 针对数据库的启动和关闭、控制文件与数据库初始化、参数及参数文件、数据...
深入解析OracleDBA入门进阶与诊断案例 扫描版 作 者:盖国强 著 出 版 社:人民邮电出版社 出版时间:2009-1-1 页 数:527 内容简介 针对数据库的启动和关闭、控制文件与数据库初始化、参数及参数文件、数据...
深入解析OracleDBA入门进阶与诊断案例 扫描版 作 者:盖国强 著 出 版 社:人民邮电出版社 出版时间:2009-1-1 页 数:527 内容简介 针对数据库的启动和关闭、控制文件与数据库初始化、参数及参数文件、数据...
在Oracle中,插入或更新字符串之前,需要将所有单引号替换为两个单引号,以避免解析错误。 4. **翻页SQL语句**: MySQL的翻页查询相对简单,可以使用LIMIT子句指定开始位置和记录数。而在Oracle中,由于没有直接的...
- **CKPT(Checkpoint Process)**:负责执行检查点操作,将缓冲区中的数据写入磁盘,并更新控制文件和数据文件中的SCN(System Change Number)。 - **DBWR(Database Writer Process)**:负责将脏缓存块写回数据文件。 ...
检查点(checkpoint)是Oracle数据库保证数据一致性的机制,它涉及DBWR进程将脏数据块写入数据文件并更新SCN。当系统出现"checkpoint not complete"错误时,意味着检查点过程未能完成,可能影响到实例恢复。为优化此...
- **提交**:提交事务时,LGWR进程会将重做日志记录写入重做日志文件,CKPT进程确保数据文件头和控制文件中的SCN(系统更改号)与重做日志文件中的SCN一致。 #### 五、数据库管理员的角色 数据库管理员(DBA)负责...
- **共享池**:存储解析过的SQL语句和其他信息。 2. **个人全局区(PGA)**:每个用户进程都有自己的PGA,用于存储用户特定的信息。 #### 四、后台进程 Oracle数据库通过一系列后台进程来管理其内部的操作,这些...
本文将根据提供的《OracleDBA:Backup and Recovery Scripts》样本章节内容,详细解析Oracle数据库在Linux环境下进行冷备份、热备份以及导出操作的关键知识点。 #### 二、恢复原则 无论是在Unix还是Windows NT环境...