数据库ORACLE之检查点(checkpoint)
- 格式:docx
- 大小:146.16 KB
- 文档页数:16
ORACLE数据文件和控制文件头部第一次检查数据文件头中的Checkpoint cnt是否与对应操纵文件中的Checkpoint cnt一致.假如相等,进行第二次检查.第二次检查数据文件头的开始SCN与对应操纵文件中的结束SCN是否一致假如结束SCN等于开始SCN,则不需要对那个文件进行恢复.对每个数据文件都完成检查后,打开数据库.同时将每个数据文件的结束SCN设置为无穷大.通过下列过程我们来进一步说明一下这个内容。
我们来看下列来自操纵文件部分(选取一个文件测试):DATA FILE #4:(name #4) /opt/oracle/oradata/eygle/eygle01.dbfcreation size=0 block size=8192 status=0xe head=4 tail=4 dup=1tablespace 4, index=4 krfil=4 prev_file=0unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00Checkpoint cnt:58 scn: 0x0000.002ac8ee 08/11/2006 09:48:29Stop scn: 0x0000.002ac8ee 08/11/2006 09:48:29Creation Checkpointed at scn: 0x0000.0015078d 06/06/2006 09:41:54thread:0 rba:(0x0.0.0)................aux_file is NOT DEFINED这部分中包含的重要信息有:检查点计数: Checkpoint cnt:58检查点SCN: scn: 0x0000.002ac8ee 08/11/2006 09:48:29数据文件Stop SCN:Stop scn: 0x0000.002ac8ee 08/11/2006 09:48:29我们再看来自数据文件头的信息:FILE HEADER:Software vsn=153092096=0x9200000, Compatibility Vsn=134217728=0x8000000Db ID=1407686520=0x53e79778, Db Name='EYGLE'Activation ID=0=0x0Control Seq=979=0x3d3, File size=1280=0x500File Number=4, Blksiz=8192, File Type=3 DATATablespace #4 - EYGLE rel_fn:4Creation at scn: 0x0000.0015078d 06/06/2006 09:41:54Backup taken at scn: 0x0000.00000000 01/01/1988 00:00:00 thread:0reset logs count:0x232bee1f scn: 0x0000.0007c781 recovered at 08/10/2006 20:57:53begin-hot-backup file size: 0Checkpointed at scn: 0x0000.002ac8ee 08/11/2006 09:48:29.......................这部分中包含的重要信息有:检查点SCN: Checkpointed at scn: 0x0000.002ac8ee 08/11/2006 09:48:29检查点计数: chkpt cnt: 58 ctl cnt:57这两者都与操纵文件中所记录的一致。
CheckPoint基本操作⼿册-中⽂1. CheckPoint架构 (2)2. 设置系统配置 (2)2.1 设置IP地址 (2)2.2 设置路由 (3)2.3 配置备份 (4)2.4 下载SmartConsole(GUI Client) (6)2.5 命令⾏(Console/SSH)登陆专家模式 (6)3. 配置防⽕墙策略 (6)3.1 安装SmartConsole,登录策略配置管理 (7)3.2 创建对象 (7)3.2.1 创建主机对象 (7)3.2.2 创建⽹络对象 (8)3.2.3 创建组对象 (9)3.3 创建策略 (10)3.3.1 策略分组 (13)3.4 创建地址转换(NAT) (14)3.4.1 ⾃动地址转换(Static) (15)3.4.2 ⾃动地址转换(Hide) (15)3.4.3 ⼿动地址转换 (16)3.5 Install Policy (18)4. ⽤户识别及控制 (18)4.1 启⽤⽤户识别及控制 (18)4.2 创建AD Query策略 (22)4.3 创建Browser-Based Authentication策略 (24)5. 创建应⽤及⽹址(URL)控制策略 (25)5.1 启⽤应⽤或⽹址(URL)控制功能 (25)5.2 创建应⽤及⽹址(URL)对象 (25)5.3 创建应⽤及⽹址(URL)组对象 (27)5.4 创建应⽤及⽹址(URL)控制策略 (29)6. 创建防数据泄露(DLP)策略 (31)6.1 启⽤防数据泄露(DLP)功能 (31)6.2 创建防数据泄露(DLP)对象 (31)6.2.1 创建防数据泄露(DLP)⽹络对象 (31)6.2.2 创建防数据泄露(DLP)分析内容对象 (31)6.2.3 创建防数据泄露(DLP)分析内容组对象 (31)6.3 创建防数据泄露(DLP)控制策略 (31)7. ⽣成报表(SmartReporter) (31)7.1 启⽤报表功能 (32)7.2 ⽣成报表前参数调整 (32)7.3 ⽣成报表 (35)8. 事件分析(SmartEvent) (36)8.1 启⽤事件分析功能 (36)8.2 查看事件分析 (37)1. CheckPoint 架构CheckPoint 分为三层架构,GUI 客户端(SmartConsole )是⼀个可视化的管理配置客户端,⽤于连接到管理服务器(SmartCenter ),管理服务器(SmartCenter )是⼀个集中管理平台,⽤于管理所有设备,将策略分发给执⾏点(Firewall )去执⾏,并收集所有执⾏点(Firewall )的⽇志⽤于集中管理查看,执⾏点(Firewall )具体执⾏策略,进⾏⽹络访问控制2. 设置系统配置设备的基本配置需要在WEB 下进⾏,如IP 、路由、DNS 、主机名、备份及恢复、时间⽇期、管理员账户,默认web 管理页⾯的连接地址为https://192.168.1.1:4434,如果已更改过IP ,将192.168.1.1替换为更改后的IP 2.1 设置IP 地址例:设置LAN2⼝的IP 为10.0.255.2 登录web 后选择Network Connections直接点击LAN2管理服务器 SmartCenterGUI ClientSmartConsole执⾏点 Firewall填⼊IP地址和掩码,点击Apply2.2设置路由例:设置默认路由为10.0.255.1登录web后选择Network→Routing点击New→Default Route,(如果设置普通路由,点击Route)填⼊默认路由,点击Apply2.3配置备份此备份包括系统配置和CheckPoint策略等所有配置例:将配置备份出来保存选择Applicance→Backup and Restore选择Backup→Start Backup输⼊备份的⽂件名,点击Apply(由于⽇志可能会较⼤,增加备份⽂件的⼤⼩,可考虑去掉Include Check Point Products log files in the backup前⾯的勾)选择Yes等待备份⽂件打包当弹出下载⽂件提⽰后,将⽂件保存⾄本地2.4下载SmartConsole(GUI Client)选择Product Configuration Download SmartConsole选择Start Download2.5命令⾏(Console/SSH)登陆专家模式登陆命令⾏(Console/SSH)默认模式下仅⽀持部分操作及命令,如需要执⾏更⾼权限的命令或操作时需登陆专家模式在命令⾏中输⼊expert回车,根据提⽰输⼊密码即可登陆,默认密码同web、console、SSH登陆密码相同# expertEnter expert password:You are in expert mode now.3.配置防⽕墙策略CheckPoint防⽕墙的策略执⾏顺序为⾃上⽽下执⾏,当满⾜某⼀条策略时将会执⾏该策略设定的操作,并且不再匹配后⾯的策略***如果策略中包含⽤户对象,即使匹配该策略,仍然会继续匹配后⾯的策略,只有当后⾯的策略没有匹配或者后⾯的策略中匹配的操作是drop时才会执⾏之前包含⽤户的策略通常CheckPoint策略配置的顺序依次为防⽕墙的管理策略、VPN策略、服务器(DMZ)策略、内⽹上⽹策略、全部Drop策略创建CheckPoint防⽕墙策略的步骤为创建对象、创建策略并在策略中引⽤对象、Install Policy***CheckPoint中配置的更改必须Install Policy之后才会⽣效3.1安装SmartConsole,登录策略配置管理直接运⾏下载的SmartConsole安装包进⾏安装,安装完成后登陆SmartDashboard例:打开策略管理运⾏SmartDashboard输⼊⽤户名、密码以及SmartCenter(管理服务器)的IP地址,点击OK登陆3.2创建对象CheckPoint配置策略的基本步骤为创建需要的对象、创建策略、在策略中引⽤对象、Install Policy 3.2.1创建主机对象例:创建IP为192.168.10.1的对象选择Nodes→Node→Host在Name处输⼊对象名(字母开头),在IP Address处输⼊对象的IP地址,如192.168.10.1,点击OK3.2.2创建⽹络对象例:创建⽹段为192.168.10.0,掩码为255.255.255.0的对象选择Networks Network…输⼊⽹段对象名,⽹段,掩码(由于是中⽂版系统的关系,部分字样可能显⽰不全),点击OK3.2.3创建组对象如果有多个对象需要在策略中引⽤,⽅便起见可将这些对象添加到⼀个组中,直接在策略中引⽤该组即可例:将⽹段192.168.10.0和192.168.11.0添加到⼀个组对象中选择Groups→Groups→Simple Group…输⼊组对象的名字,将⽹段对象192.168.10.0和192.168.11.0在左侧Not in Group窗⼝中双击移⼊到右侧的In Group窗⼝中,点击OK3.3创建策略创建策略前需根据需求先确定创建的位置例:在第6条和第7条之间创建1条允许192.168.10.0⽹段访问任何地⽅任何端⼝的策略,并记录⽇志选中第7条策略,单击右键,选择Add Rule Above添加后会出现⼀条默认策略,需要做的就是在这条策略上引⽤对象在Source对应的⼀栏中,右键点击Any,选择Network Object…找到192.168.10.0这个⽹段的对象后选中,并点击OK由于是访问任何地址的任何端⼝,所以在Destination、VPN、Service栏中保持Any不变在Action栏中点击右键选择Accept在Track栏中点击右键选择Log,这样凡是被这条策略匹配的连接都会记录下⽇志,⽤于在SmartView Tracker中查看完成后的策略如下图3.3.1策略分组当策略数⽬较多时,为了⽅便配置和查找,通常会对策略进⾏分组例:将7、8、9三条⽇志分为⼀个组选中第7条策略,点击右键,选择Add Section Title Above输⼊名字后点击OK如下图所⽰,7、8、9三条策略就分在⼀个组中了,点击前⾯的+-号可以打开或缩进3.4创建地址转换(NAT)在CheckPoint中地址转换分为⾃动和⼿动两种,其中⾃动⼜分为Static NAT和Hide NAT Static NATStatic是指将内部⽹络的私有IP地址转换为公有IP地址,IP地址对是⼀对⼀的,是⼀成不变的,某个私有IP地址只转换为某个公有IP地址。
详解oracle checkpoint1. 何为检查点?其存在的意义?2. 检查点的有哪些分类?检查点的结构如何?什么是checkpoint queue?通俗的将,检查点仅仅是一个机制而已,其作用是通知DBWR进程将cache buffer中的脏块写入到disk中,当然这个通知的动作是通过检查点进程CKPT来完成的。
那么检查点存在的意义是什么呢?其实很简单,目的就是减少db crash后的recover time。
这里可能存在一个误区,那就是并不是只有检查点的情况下才会导致DBWR进程去写脏块到disk中,在cache buffer 空间不足的情况下,由于Cache buffer LRU的机制就决定了不管是否发生检查点,DBWR都会将脏块写入到disk中,以此来保证cache buffer能容纳更多的new block 。
所谓的checkpoint queue,可以理解为由脏块组成的一个LRU链表。
检查点有哪些分类呢?大概有如下几种:1. Full Checkpoint2. Thread Checkpoint (local checkpoint, global checkpoint)3. Datafile Checkpoint4. Mini-checkpoint (object checkpoint,基于DDL)5. Parallel Query Checkpoint6. Incremental Checkpoint (Log Switch Checkpoint)1. 首先我们来看下完全检查点,对于full checkpoint,在8i之前就存在了,很好理解,你目的是第 1 页一旦触发完全检查点,DBWR进程会将cache buffer drity LRU list上的所有脏块写入到disk中。
那么在哪些情况下会触发完全检查点呢?如下:(1) shutdown instance;(2) 日志组切换(3)log_checkpoint_timeout,log_checkpoint_interval,fast_start_io_target,fast_start_m ttr_target(4) 手工执行alter system switch logfile时(5) 手工alter system checkpoint(6) alter tablespace XXX begin/end backup;(7) alter tablespace XXX datafile offline;注意: 在oracle 8i以后,引入增量检查点以后,日志切换以及switch logfile都是增量检查点,不过需要说明一下的是,虽然说其是增量检查点,不过同时触发时controlfile和datafile header都会进行更新的,后面的实验可以说明。
首先这里我们先介绍四个SCN概念。
1,系统检查点scn当一个检查点动作完成后,Oracle就把系统检查点的SCN存储到控制文件中。
select checkpoint_change# from v$database;2,数据文件检查点scn当一个检查点动作完成后,Oracle就把每个数据文件的scn单独存放在控制文件中。
select name,checkpoint_change# from v$datafile;3,启动scnOracle把这个检查点的scn存储在每个数据文件的文件头中,这个值称为启动scn,因为它用于在数据库实例启动时,检查是否需要执行数据库恢复。
select name,checkpoint_change# from v$datafile_header4,终止scn每个数据文件的终止scn都存储在控制文件中。
select name,last_change# from v$datafile以下条件需要使用using backup controlfile1)、使用备份控制文件2)、重建resetlogs控制文件,如果重建立noresetlogs不必要使用using backup controlfile2、alter database open resetlog指定RESETLOGS将重设当前LOG sequence number为1,抛弃所有日志信息。
以下条件需要使用resetlog1)在不完全恢复(介质恢复)2)使用备份控制文件使用resetlogs打开数据库后无必完整地备份一次数据库。
3、create controlfile resetlogs/noresetlogs1).用Noresetlogs重建控制文件时,控制文件中 datafile Checkpoint来自Online logs中的Cu rrent log头2).用Resetlogs重建控制文件时,控制文件中datafile Checkpoint来自各数据文件头。
OracleSCN详解⼀、简介scn,system change number 在某个时间点定义数据库已提交版本的时间戳标记,Oracle为每个已提交事务分配⼀个唯⼀的scn,scn值是对数据库进⾏更改的逻辑时间点。
scn是⼀个6字节的数字,分为两部分,scn_base和scn_wrap,scn_base是⼀个四字节的数字,scn_wrap 是⼀个2字节的数字。
scn_base到达最⼤值时,scn_wrap增加1,scn_base将被重置为0,⼀直持续到scn_wrap达到最⼤值。
scn分为以下⼏种:⼆、check point scn1、start scn(datafile_header)当检查点发⽣或者实⼒关闭时,所有缓存数据需要全部写⼊到数据⽂件中,此时数据库⽂件中的各个start scn更新到⼀致。
Oracle启动时先检查是否需要media recovery,若数据⽂件中各个start scn不⼀致,出现某个start scn较⼩,说明该⽂件较旧(被替换成⽼⽂件或者未及时更新),此时需要⼿动进⾏redo介质恢复。
select checkpoint_change# from v$datafile_header;2、stop scn (⼜称end scn,control file)实例正常关闭时,将会触发checkpoint,同时执⾏完全检查点,并⽤该检查点时的scn号更新四个scn,这时所有数据⽂件的stop scn都设置为数据⽂件头的start scn (除了offline 和read only的数据⽂件)3、datafile scn (control file)⽤来跟start scn 对⽐,判断start scn 是否时最新的,Oracle 在更新每个数据⽂件的start scn之前会先更新控制⽂件中的datafile scn ,因此控制⽂件中的datafile scn总会保持最新。
select file#,checkpoint_change# from v$datafile;4、system checkpoint scn(control file )⽤来判断控制⽂件是否是最新的,与start scn对⽐,若system checkpoint scn 较旧,则需对控制⽂件进⾏介质恢复异常1:start scn不⼀致------某个数据⽂件旧,介质恢复异常2:system scn=datafile scn 控制⽂件旧,介质恢复异常3:system scn=datafile scn > start scn 数据⽂件旧,介质恢复异常4:stop scn为空(启动过程中)需进⾏实例恢复select checkpoint_change# from v$database;数据库重启时,Oracle将数据⽂件头中的start scn和datafile scn⽐较,如果两者匹配,Oracle接下来⽐较start scn 和stop scn,如果匹配,数据库不需要实例恢复,直接打开;所有数据⽂件打开后,online 且 read write的数据⽂件stop scn再次被设置为null,表⽰数据⽂件已经打开并且能够正常使⽤了。
OLAP and OLTPOLTP (在线事务处理系统)OLAP (在线分析系统)对于一个olap系统,大型的查询每天做几次,没有必要将大量的数据缓存到内存里,完全没有必要,所以一般buffer hit都比较低对于一个olap系统,内存优化余地不大,增加cpu速度和磁盘io速度才是最直接的提高性能的方式。
oltp系统的用户并发数很多,而且多是小的操作,数据库侧重于对用户操作的快速响应,这是对数据库最重要的性能要求。
对于一个oltp系统来说,数据库内存设计显得很重要,如果数据都可以在内存处理,性能无疑会提高很多。
oltp系统是一个数据块变化非常频繁,sql语句提交非常频繁的系统。
对于数据块来说,应尽可能让数据块保存在内存中;对于sql来说,应尽可能使用绑定变量来达到sql的重用,减少物理io和反复的sql解析。
oltp热快问题:当一个块被多个用户同时读取的时候,oracle为了维护数据的一致性,需要使用一种称为latch的东西来串行化用户的操作。
当一个用户获得了这个latch之后,其他的用户只能被迫等待,获取这个数据块的用户越多,等待就越明显,这就造成了热快问题。
这种热快可能是数据块也可能是回滚段块。
对于数据块来讲通常是数据块上的数据分布不均导致,如果是索引的数据块,可以考虑建反向索引来达到重新分布数据的目的;对于回滚段数据块,可以适当增加几个回滚段来避免争用。
SGA系统全局区,是oracle用来为实例存储数据和控制信息的共享内存区。
在实例启动时分配,关闭时释放。
数据库缓冲区高速缓存(buffer cache):保存了最近使用过的数据块。
最近最多使用算法(most-recently-used)共享池:存储共享内存结构的区域。
如library cache中的sql区,以及数据字典的内部信息library cache:SQL 和PL SQL 的文本,执行计划,编译数data dictionary cache:oracle数据字典包含一组表和视图,oracle将他们作为数据库的引用,在其中存储了与数据库的逻辑和物理结构相关的信息用户信息;如权限等为数据库表定义的完整性约束数据库表中所有列的名称以及数据类型为模式对象分配空间及其使用情况的信息PGA包含oracle服务器进程的数据和控制信息的内存区域堆栈区:存储会话的变量、数组等的内存空间(堆栈区保存变量信息)会话区:如果不是MTS服务器,会话信息会保持在PGA中,如过是MTS服务器,会话信息保持在SGA中(会话区保存着用户的权限等重要信息)排序区:游标区:当运行使用游标的语句时,Oracle数据库系统会在程序缓存区中间为其分配一块区域。
checkpoint 的应用场景-回复Checkpoint 是一个自动化工具,用于监控和保护数据的一致性。
它在各种应用场景中发挥着重要作用,从数据库备份和恢复到跨不同计算机系统的数据传输,均可以应用Checkpoint。
本文将探讨Checkpoint 的主要应用场景,并逐步回答下列问题:什么是Checkpoint,Checkpoint 在数据库备份和恢复方面的应用场景是什么,Checkpoint 在数据传输方面的应用场景是什么,以及Checkpoint 如何提高数据的一致性和可靠性。
首先,什么是Checkpoint?Checkpoint 是一个自动化工具,用于监控和保护数据的一致性。
它可以记录和跟踪数据的状态,并在需要时恢复到先前的一致性点。
Checkpoint 的实现方式可以有多种,例如通过在数据库中创建数据库快照、在数据传输过程中使用事务日志等。
接下来,我们将讨论Checkpoint 在数据库备份和恢复方面的应用场景。
数据库备份是保护数据免受意外删除、硬件故障或灾难性事件的重要手段。
Checkpoint 可以在数据库备份过程中发挥关键作用。
当进行数据库备份时,Checkpoint 可以记录当前数据的一致性状态,并创建一个数据库快照。
在发生意外情况或需要恢复数据时,可以使用这个快照将数据库恢复到备份时的一致性状态。
这种方式可以避免数据丢失和数据不一致问题,提高数据库的可靠性。
其次,Checkpoint 在数据传输方面也有广泛的应用场景。
当从一个计算机系统传输数据到另一个计算机系统时,可能会面临数据一致性的问题。
特别是当数据传输中断或出错时,传输的数据可能处于不一致的状态。
Checkpoint 可以通过记录传输过程中的状态,并在需要时回滚到先前一致性点,确保数据的一致性和可靠性。
这在跨系统数据迁移、实时数据同步等场景下都非常有用。
最后,Checkpoint 如何提高数据的一致性和可靠性?Checkpoint 可以定期记录数据的一致性状态,并在需要时恢复到先前的一致性点。
由于Oracle中LGWR和DBWR工作的不一致,Oracle引入了检查点的概念,用于同步数据库,保证数据库的一致性。
在Oracle里面,检查点分为两种:完全检查点和增量检查点。
下面我们分别介绍这两种检查点的作用:1、完全检查点(完全检查点会将数据缓冲区里面所有的脏数据块写入相应的数据文件中,同时将最新的checkpoint scn更新到所有的数据文件头部及控制文件)(完全检查点发生时,记录到数据文件头和控制文件的SCN不是检查点发生时的SCN,因为检查点发生时DBWn还没有来得及将所有数据都写入,自然不能将当前SCN写入。
而是将发生完全检查点时,触发的DBWn将当前dirty buffer写完后,dirty buffer对应的SCN更新到数据文件头和控制文件)(当DBWn被触发时,会将dirty buffer里的数据块无序的写入,在写入期间,所有的DML操作将被冻结,知道dirty buffer写完)在Oracle8i之前,数据库的发生的检查点都是完全检查点。
完全检查点会将数据缓冲区里面所有的脏数据块写入相应的数据文件中,同时将最新的checkpoint scn更新到所有的数据文件头部及控制文件。
保证数据库的处于一致的状态。
需要注意的是,完全检查点产生的时候,CKPT并不是把当前完全检查点发生那一时刻的SCN更新到控制文件和数据文件头,而是将这个触发检查点时刻DBWn当前刚写完dirty buffer对应的SCN更新到控制文件和数据文件头,也就是说,更新控制文件和数据文件头的SCN是滞后于完全检查点的发生那一时刻的SCN的,这个从恢复的原理也很容易理解,因为检查点发生的时候要写入dirty buffer还没有写入,自然不能立即更新成当前的SCN了。
需要注意的是, 在oracle8之前,由于没有chekpoint queue,也没有增量检查点的概念,oracle8之前发生完全检查点时,DBWn 会以一种无序的方式将所有的dirty buffer写出到数据文件,这个时候Oracle会冻结所有DML操作等候所有dirty buffer被写出,巨大的IO往往会影响到数据库的性能。
oracle rac的日常维护及注意事项2009-03-13 23:26oracle rac的日常维护及注意事项在Oracle数据库运行期间,DBA应该对数据库的运行日志及表空间的使用情况进行监控,及早发现数据库中存在的问题。
一、Oracle警告日志文件监控Oracle在运行过程中,会在警告日志文件(alert_SID.log)中记录数据库的一些运行情况:l 数据库的启动、关闭,启动时的非缺省参数;l 数据库的重做日志切换情况,记录每次切换的时间,及如果因为检查点(checkpoint)操作没有执行完成造成不能切换,会记录不能切换的原因;l 对数据库进行的某些操作,如创建或删除表空间、增加数据文件;问题处理启动参数不对检查初始化参数文件因为检查点操作或归档操作没有完成造成重做日志不能切换如果经常发生这样的情况,可以考虑增加重做日志文件组;想办法提高检查点或归档操作的效率;有人未经授权删除了表空间检查数据库的安全问题,是否密码太简单;如有必要,撤消某些用户的系统权限出现坏块检查是否是硬件问题(如磁盘本生有坏块),如果不是,检查是那个数据库对象出现了坏块,对这个对象进行重建表空间不够增加数据文件到相应的表空间出现ORA-600根据日志文件的内容查看相应的TRC文件,如果是Oracle的bug,要及时打上相应的补丁二、数据库表空间使用情况监控(字典管理表空间)数据库运行了一段时间后,由于不断的在表空间上创建和删除对象,会在表空间上产生大量的碎片,DBA应该及时了解表空间的碎片和可用空间情况,以决定是否要对碎片进行整理或为表空间增加数据文件。
select tablespace_name, count(*) chunks , max(bytes/1024/1024) max_chunk from dba_free_space group by tablespace_name;上面的SQL列出了数据库中每个表空间的空闲块情况,如下所示:TABLESPACE_NAME CHUNKS MAX_CHUNK-------------------- ---------- ----------INDX 1 57.9921875RBS 3 490.992188RMAN_TS 1 16.515625SYSTEM 1 207.296875TEMP 20 70.8046875TOOLS 1 11.8359375USERS 67 71.3671875其中,CHUNKS列表示表空间中有多少可用的空闲块(每个空闲块是由一些连续的Oracle数据块组成),如果这样的空闲块过多,比如平均到每个数据文件上超过了100个,那么该表空间的碎片状况就比较严重了,可以尝试用以下的SQL命令进行表空间相邻碎片的接合:alter tablespace 表空间名coalesce;然后再执行查看表空间碎片的SQL语句,看表空间的碎片有没有减少。
checkpoint是个数据库事件,他将已修改的数据从高速缓存刷新到磁盘,并更新控制文件和数据文件。
什么时候发生checkpoint?我们知道了checkpoint会刷新脏数据,但什么时候会发生checkpoint呢?以下几种情况会触发checkpoint。
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的时候;检查点分为三类:1)局部检查点:单个实例执行数据库所有数据文件的一个检查点操作,属于此实例的全部脏缓存区写入数据文件。
触发命令:svmrgrl>alter system checkpoint local;这条命令显示的触发一个局部检查点。
2)全局检查点:所有实例(对应并行数据服务器)执行数据库所有所有数据文件的一个检查点操作,属于此实例的全部脏缓存区写入数据文件。
触发命令svrmgrl>alter system checkpoint global;这条命令显示的触发一个全局检查点。
3)文件检查点:所有实例需要执行数据文件集的一个检查点操作,如使用热备份命令alter tablespace USERS begin backup,或表空间脱机命令alter tablespace USERS offline,将执行属于USERS表空间的所有数据文件的一个检查点操作。
检查点处理步骤:1)获取实例状态队列:实例状态队列是在实例状态转变时获得,ORACLE获得此队列以保证检查点执行期间,数据库处于打开状态;2)获取当前检查点信息:获取检查点记录信息的结构,此结构包括当前检查点时间、活动线程、进行检查点处理的当前线程、日志文件中恢复截止点的地址信息;3)缓存区标识:标识所有脏缓存区,当检查点找到一个脏缓存区就将其标识为需进行刷新,标识的脏缓存区由系统进程DBWR进行写操作,将脏缓存区的内容写入数据文件;4)脏缓存区刷新:DBWR进程将所有脏缓存区写入磁盘后,设置一标志,标识已完成脏缓存区至磁盘的写入操作。
系统进程LGWR与CKPT进程将继续进行检查,直至DBWR进程结束为止;5)更新控制文件与数据文件。
注:控制文件与数据文件头包含检查点结构信息。
在两种情况下,文件头中的检查点信息(获取当前检查点信息时)将不做更新:1)数据文件不处于热备份方式,此时ORACLE将不知道操作系统将何时读文件头,而备份拷贝在拷贝开始时必须具有检查点SCN;ORACLE在数据文件头中保留一个检查点的记数器,在正常操作中保证使用数据文件的当前版本,在恢复时防止恢复数据文件的错误版本;即使在热备份方式下,计数器依然是递增的;每个数据文件的检查点计数器,也保留在控制文件相对应数据文件项中。
2)检查SCN小于文件头中的检查点SCN的时候,这表明由检查点产生的改动已经写到磁盘上,在执行全局检查点的处理过程中,如果一个热备份快速检查点在更新文件头时,则可能发生此种情况。
应该注意的是,ORACLE是在实际进行检查点处理的大量工作之前捕获检查SCN的,并且很有可能被一条象热备份命令alter tablespace USERS begin backup进行快速检查点处理时的命令打断。
ORACLE在进行数据文件更新之前,将验证其数据一致性,当验证完成,即更新数据文件头以反映当前检查点的情况;未经验证的数据文件与写入时出现错误的数据文件都被忽略;如果日志文件被覆盖,则这个文件可能需要进行介质恢复,在这种情况下,ORACLE系统进程DBWR将此数据文件脱机。
检查点算法描述:脏缓存区用一个新队列链接,称为检查点队列。
对缓存区的每一个改动,都有一个与其相关的重做值。
检查点队列包含脏的日志缓存区,这些缓存区按照它们在日志文件中的位置排序,即在检查点队列中,缓存区按照它们的低重做值进行排序。
需要注意的是,由于缓存区是依照第一次变脏的次序链接到队列中的,所以,如果在缓存区写出之前对它有另外的改动,链接不能进行相应变更,缓存区一旦被链接到检查点队列,它就停留在此位置,直到将它被写出为止。
ORACLE系统进程DBWR在响应检查点请求时,按照这个队列的低重做值的升序写出缓存区。
每个检查点请求指定一个重做值,一旦DBWR写出的缓存区重做值等于或大雨检查点的重做值,检查点处理即完成,并将记录到控制文件与数据文件。
由于检查点队列上的缓存区按照低重做值进行排序,而DBWR也按照低重做值顺序写出检查点缓存区,故可能有多个检查点请求处于活动状态,当DBWR写出缓存区时,检查位于检查点队列前端的缓存区重做值与检查点重做值的一致性,如果重做值小于检查点队列前缓存区的低重做值的所有检查点请求,即可表示处理完成。
当存在未完成的活动检查点请求时,DBWR继续写出检查点缓存区。
算法特点:1)DBWR能确切的知道为满足检查点请求需要写那些缓存区;2)在每次进行检查点写时保证指向完成最早的(具有最低重做值的)检查点;3)根据检查点重做值可以区别多个检查点请求,然后按照它们的顺序完成处理。
1.检查点(Checkpoint)的本质许多文档把Checkpint描述得非常复杂,为我们正确理解检查点带来了障碍,结果现在检查点变成了一个非常复杂的问题。
实际上,检查点只是一个数据库事件,它存在的根本意义在于减少崩溃恢复(Crash Recovery)时间。
当修改数据时,需要首先将数据读入内存中(Buffer Cache),修改数据的同时,Oracle会记录重做信息(Redo)用于恢复。
因为有了重做信息的存在,Oracle不需要在提交时立即将变化的数据写回磁盘(立即写的效率会很低),重做(Redo)的存在也正是为了在数据库崩溃之后,数据就可以恢复。
最常见的情况,数据库可以因为断电而Crash,那么内存中修改过的、尚未写入文件的数据将会丢失。
在下一次数据库启动之后,Oracle可以通过重做日志(Redo)进行事务重演,也就是进行前滚,将数据库恢复到崩溃之前的状态,然后数据库可以打开提供使用,之后Oracle可以将未提交的数据进行回滚。
在这个过程中,通常大家最关心的是数据库要经历多久才能打开。
也就是需要读取多少重做日志才能完成前滚。
当然用户希望这个时间越短越好,Oracle也正是通过各种手段在不断优化这个过程,缩短恢复时间。
检查点的存在就是为了缩短这个恢复时间。
当检查点发生时(此时的SCN被称为CheckPoint SCN),Oracle会通知DBWR 进程,把修改过的数据,也就是Checkpoint SCN之前的脏数据(Dirty Data)从Buffer Cache写入磁盘,当写入完成之后,CKPT进程更新控制文件和数据文件头,记录检查点信息,标识变更。
Oracle SCN的相关知识可以参考我的另外一篇文章:DBA入门之认识Oracle SCN(System Change Number)Checkpoint SCN可以从数据库中查询得到:SQL>select file#,CHECKPOINT_CHANGE#,to_char(CHECKPOINT_TI ME,'yyyy-mm-dd hh24:mi:ss') cpt from v$datafile;FILE# CHECKPOINT_CHANGE# CPT---------- ------------------ -------------------19133062011-11-1616:06:0629133062011-11-1616:06:0639133062011-11-1616:06:0649133062011-11-1616:06:06SQL>select dbid,CHECKPOINT_CHANGE# from v$database;DBID CHECKPOINT_CHANGE#---------- ------------------1294662348913306在检查点完成之后,此检查点之前修改过的数据都已经写回磁盘,重做日志文件中的相应重做记录对于崩溃/实例恢复不再有用。
下图标记了3个日志组,假定在T1时间点,数据库完成并记录了最后一次检查点,在T2时刻数据库Crash。
那么在下次数据库启动时,T1时间点之前的Redo 不再需要进行恢复,Oracle需要重新应用的就是时间点T1至T2之间数据库生成的重做日志(Redo)。
上图可以很轻易地看出来,检查点的频率对于数据库的恢复时间具有极大的影响,如果检查点的频率高,那么恢复时需要应用的重做日志就相对得少,检查时间就可以缩短。
然而,需要注意的是,数据库内部操作的相对性极强,国语平凡的检查点同样会带来性能问题,尤其是更新频繁的数据库。
所以数据库的优化是一个系统工程,不能草率。
更进一步可以知道,如果Oracle可以在性能允许的情况下,使得检查点的SCN 主键逼近Redo的最新更新,那么最终可以获得一个最佳平衡点,使得Oracle 可以最大化地减少恢复时间。
为了实现这个目标,Oracle在不同版本中一直在改进检查点的算法。
2.常规检查点与增量检查点为了区分,在Oracle8之前,Oracle实时的检查点通常被称为常规检查点(Conventional Checkpoint),这类检查点按一定的条件出发(log_checkpoint_interval、log_checkpoint_timeout参数设置及log switch等条件出发)。
从Oracle 8开始,Oracle引入了增量检查点(Inctrmental Checkpoint)的概念。
和以前的版本相比,在新版本中,Oracle主要引入了检查点队列(Checkpoinnt Queue)机制,在数据库内部,每一个脏数据块都会被移动到检查点队列,按照Low RBA的顺序(第一次对比数据块修改对应的Redo Byte Address)来排列,如果一个数据块进行过多次修改,该数据库在检查点队列上的顺序并不会发生变化。
当执行检查点时,DBWR从检查点队列按照Low RBA的顺序写出,实例检查点因此可以不断增进、阶段性的,CKPT进程使用非常轻量级的控制文件更新协议,将当前的最低RBA写入控制文件。