`

Checkpoint not Complete

阅读更多

alter_ORCL.log如下:

Wed Jun 25 02:25:59 2008

Thread 1 cannot allocate new log, sequence 381753

Checkpoint not complete

Current log# 3 seq# 381752 mem# 0: /opt/oracle/db04/oradata/ORCL/redo03.log

Wed Jun 25 02:26:15 2008

Thread 1 advanced to log sequence 381753

Current log# 5 seq# 381753 mem# 0: /opt/oracle/db03/oradata/ORCL/redo5.log

Wed Jun 25 02:26:15 2008

ARC1: Evaluating archive   log 3 thread 1 sequence 381752

ARC1: Beginning to archive log 3 thread 1 sequence 381752

Creating archive destination LOG_ARCHIVE_DEST_1: '/opt/oracle/arch/ORCL/1_381752.dbf'

Wed Jun 25 02:26:27 2008

ARC1: Completed archiving log 3 thread 1 sequence 381752

Wed Jun 25 02:26:56 2008

Thread 1 cannot allocate new log, sequence 381754

Checkpoint not complete

Current log# 5 seq# 381753 mem# 0: /opt/oracle/db03/oradata/ORCL/redo5.log

Wed Jun 25 02:27:11 2008

Thread 1 advanced to log sequence 381754

Current log# 4 seq# 381754 mem# 0: /opt/oracle/db02/oradata/ORCL/redo4.log

Wed Jun 25 02:27:11 2008

ARC0: Evaluating archive   log 5 thread 1 sequence 381753

ARC0: Beginning to archive log 5 thread 1 sequence 381753

Creating archive destination LOG_ARCHIVE_DEST_1: '/opt/oracle/arch/ORCL/1_381753.dbf'

ARC0: Completed archiving log 5 thread 1 sequence 381753

Wed Jun 25 02:27:51 2008

Thread 1 cannot allocate new log, sequence 381755

Checkpoint not complete


原因和后果:当日志将被重用的时候,该日志上涉及的数据的checkpoint必须完成,否则这个时候server crash就丢失数据了。简单来说就是没有写入数据文件,日志又被覆盖了!这是日志组已经使用轮循了一圈的时候发生的事情,可以增加日志组和增大日志文件,当然也可以修改 checkpoint参数使得检查点变频繁一些。

这个主题使DBA能对checkpoint和checkpoint优化的参数有一个较好的理解:

- FAST_START_MTTR_TARGET
- LOG_CHECKPOINT_INTERVAL
- LOG_CHECKPOINT_TIMEOUT
- LOG_CHECKPOINTS_TO_ALERT

它也解释了怎样解释和处理出现在ALERT<sid>.LOG file中的checkpoint的错误"'Checkpoint not Complete' and 'Cannot Allocate New Log"。

什么是checkpoint?

checkpoint是为了内存中已经被修改的数据块与磁盘数据文件同步的一种数据库事件。它提供了一种保持事务提交以后数据一致的手段。往Oracle磁盘写脏数据的机制与事务提交不是同步的。

checkpoint有两个目的:1、确保数据一致性。2、使数据库能快速地恢复。

怎样快速恢复呢?

因为数据库会把所有的改变都在数据文件上设置checkpoint并一直增加,它不需要请求checkpoint之前的重做日志,Checkpoint能保证所有在缓存区的数据写到相应的数据文件,防止因为意外的实例失败导致的数据丢失。

Oracle写这个脏数据只在一定的条件下:
1、后面的进程需要1/4个db_block_buffer参数的大小;
2、每三秒;
3、当一个checkpoint产生。

一个checkpoint有5中事件类型:
1、每次重做日志的切换;
2、LOG_CHECKPOINT_TIMEOUT 这个延迟参数的到达;
3、相应字节(LOG_CHECKPOINT_INTERVAL* size of IO OS blocks)被写到当前的重做日志;
IO OS blocks: 在UNIX下可以 # fstyp -v /dev/vg00/lvol1
vxfs
version: 5
f_bsize: 8192
4、ALTER SYSTEM SWITCH LOGFILE 这个命令会直接导致checkpoint发生
5、ALTER SYSTEM CHECKPOINT

Checkpoint期间会有下面进程发生:
DBWR写所有脏数据到数据文件;
LGWR更新控制文件和数据文件的SCN。

Checkpoints和优化:
Checkpoints是一个数据库优化的难点。频繁的Checkpoints可以实现快速的恢复,但也会使性能下降。DBA怎样处理这个问题呢?

依赖于数据库数据文件的数量,一个Checkpoint可能是高速的运行。因为所有的数据文件在Checkpoint期间都会被冻结。更频繁的Checkpoints可以快速恢复数据库。这也客户对不按规定系统宕机的容忍的原因。然而,在一些特殊情况下,频繁的Checkpoints也不能保证可以快速恢复。我们假设数据库在95%的时间内是正常运行,5%由于实例失败导致不可用,要求恢复。对大多数客户而言,他们更希望调整95%的性能而不是5%的宕机时间。这个假设表明,性能是摆在第一位的,所以我门的目标就是在优化期间减少Checkpoints的频繁度。

优化Checkpoints包括4个关键的初始化参数:

- FAST_START_MTTR_TARGET
- LOG_CHECKPOINT_INTERVAL
- LOG_CHECKPOINT_TIMEOUT
- LOG_CHECKPOINTS_TO_ALERT

详细介绍每个参数:

FAST_START_MTTR_TARGET

Oracle9i以来FAST_START_MTTR_TARGET 参数是调整checkpoint的首选的方法。FAST_START_MTTR_TARGET 可以指定单实例恢复需要的秒数。基于内部的统计,增长的checkpoint会自动调整的checkpint的目标以满足FAST_START_MTTR_TARGET 的需求。V$INSTANCE_RECOVERY.ESTIMATED_MTTR 显示当前估计需要恢复的秒数。这个值会被显示即使FAST_START_MTTR_TARGET 没有被指定。
V$INSTANCE_RECOVERY.TARGET_MTTR 表明在短时间内MTTR的目标。
V$MTTR_TARGET_ADVICE 显示这个当前MTTR设置的工作量产生的I/O数量和其他I/O。
这个视图帮助用户评定这个在优化和恢复之前的平衡。

LOG_CHECKPOINT_INTERVAL

LOG_CHECKPOINT_INTERVAL 参数指定这个最大的重做块的间隔数目。如果FAST_START_MTTR_TARGET被指定,LOG_CHECKPOINT_INTERVAL不能被设置为0。
在大多数Unix系统的OS块大小是512字节。设置LOG_CHECKPOINT_INTERVAL=10000意味着
这个增长的checkpoint不能追加到当前日志,因为多于5M。如果你的重做日志是20M,你将发出4个checkpoint对每个重做日志。
LOG_CHECKPOINT_INTERVAL 会发生影响当一个checkpoint发生时,小心设置这个参数,保持它随着重做日志文件大小变化而变化。checkpoint频繁是这个影响数据库恢复的原因之一。
短的checkpoint间隔意味数据库将快速恢复,也增加了资源的利用。
这个参数也影响数据库向前回滚的时间。实际的恢复时间是基于这个时间,当然还有失败的类型和
需要归档日志的数量。

LOG_CHECKPOINT_TIMEOUT

这个参数指定checkpoint发出的时间间隔。换句话说,它指定一次脏数据多少时间写出一次。
checkpoint频率会影响这个数据库恢复的时间。长时间的间隔会要求数据库恢复要求更久。
Oracle建议用LOG_CHECKPOINT_interval去控制checkpoint而不用LOG_CHECKPOINT_TIMEOUT,LOG_CHECKPOINT_TIMEOUT每n秒发一次checkpoint,不顾事务提交的频率。这可能会导致一些没有必要的checkpoint在事务已经变化的情况下。不必要的checkpoint必须被避免。还有一个容易误解的地方:LOG_CHECKPOINT_TIMEOUT 会间隔性地发出log switch。而Log switch会触发一个checkpoint,但checkpoint不会导致一个log switch。唯一手工方式alter system switch logfile或者重新设置redo logs大小可以导致频繁switch。

在线重做日志的大小是关键的,对于优化和恢复。

refer:http://zhaoyu728.itpub.net/post/5364/293141

--End--

分享到:
评论

相关推荐

    电力营销系统Oracle数据库优化研究.pdf

    当系统出现"checkpoint not complete"错误时,意味着检查点过程未能完成,可能影响到实例恢复。为优化此过程,需要监控和调整检查点频率,确保脏数据及时写入,减少实例崩溃后的恢复时间。 除了上述两个方面,还有...

    Oracle 12c实战日志文件

    例如,如果经常出现Checkpoint not complete或Redo Log Group not archived等警告信息,则可能需要增加日志组的数量。 **2. 重做日志文件的复用** 强烈建议创建复用重做日志文件来提高系统的可靠性。这意味着在一...

    Oracle日志介绍

    频繁的redo log切换可能表明存在checkpoint not complete等问题,需检查alert日志并监控系统I/O状态,必要时增大redo log文件大小以改善性能。 #### 四、redo log状态解析 v$log视图提供了redo log的当前状态信息...

    oracle原厂培训笔记

    - **增量检查点** (Checkpoint Not Complete): 仅更新控制文件中的SCN。 - **完全检查点** (Handy Checkpoint): 更新控制文件和数据文件。 - **恢复机制**: - **SMON (System Monitor)**: 负责恢复失败的事务至...

    rac数据库修改redolog日志组大小及数量.docx

    Checkpoint not complete Current log #1 seq #8739 mem #0: +DATA/pracdb1/onlinelog/group_1.257.648662189 Current log #1 seq #8739 mem #1: +FLASH/pracdb1/onlinelog/group_1.257.648662191 Thread 1 advanced...

    ORACLE调优笔记

    5. **Checkpoint not complete** - 原因:表明数据库无法完成Checkpoint操作。 - 解决方案:检查I/O子系统是否有问题,确保有足够的磁盘空间和良好的磁盘性能。 6. **Thread n Advanced to Log Sequence n** - ...

    oracle 错误一览表

    #### ORA-00070: Checkpoint not complete - **描述**:检查点未完成。 - **解决方法**:等待检查点完成或优化检查点设置。 #### ORA-00071: Value must be between 1 and 200 - **描述**:值必须介于 1 和 200 ...

    oracle 10g优化

    - `Checkpoint Not Complete`:检查点未完成。 - `Snapshot too old`:快照过旧。 **后台进程跟踪文件**: - 路径同上。 - 示例文件名:`erp_lgwr_2548.trc`等。 **用户跟踪文件**: - 路径:`udump`。 - ...

    Oracle_数据库日常维护手册_常用SQL_脚本.txt

    例如,在日志文件中可能会出现类似“Checkpoint not complete”这样的消息,这表明数据库的检查点未能正常完成,可能导致数据不一致或丢失。 - **警报日志文件的管理**:DBA应该定期查看警报日志文件,并且根据情况...

    Oracle事例

    update a set aa=null where aa is not null; delete from a where rowid!= (select max(rowid) from a b where a.aa=b.aa); 13、删除同其他表相同的行 delete from a where exits (select \'X\' from b ...

    oracle恢复工具-FY_Recover_Data

    1 1 1 TNAME VARCHAR2(30) NOT NULL 2 2 2 TABTYPE VARCHAR2(7) 3 3 3 CLUSTERID NUMBER 要恢复这个表的数据, 首先要在AUL中运行SCAN EXTENT命令, 因为Segment Header被格式化了, 所以Extent Map也可能丢失, ...

Global site tag (gtag.js) - Google Analytics