各大数据库厂商对checkpoint的处理大致相同,但还是有一些区别。前不久和某位oracle的售前聊天,他说oracle的checkpoint不会影响任何数据库操作,
checkpoint不会锁表,我不相信,他也说不出怎么实现的。
我个人认为这是数据库理论一直以来的难题,oracle什么时候解决了?
本人不太熟悉oracle的checkpoint内部机制。请教高手指点一二。

解决方案 »

  1.   

    checkpoint是一个后台进程
    oracle的锁本来就不耗费资源,CKPT后台进程只不过把内存数据写到磁盘,然后同步数据文件,控制文件与联机日志,没有发生普通锁,但有内部锁(latch)。
    每个数据库对锁与checkpoint的处理还是有很大差别的。
    他说oracle的checkpoint不会影响任何数据库操作这个是错误的。CKPT如果不好好控制,就会引起数据库的等待,数据库性能变差
      

  2.   

    checkpoint是一个event,它用于减少instance recovery的时间,当checkpoint发生时,它会触发DBWR进程把database buffer中的变化了的数据写入数据文件,同时chpk进程更新control file和datafile header,以使它们保持一致。
    checkpoint不会影响任何数据库操作是不影响数据库的操作,但oracle售先的说法也有一些问题,因为过于频繁的checkpoint会出现磁盘竞争,因为它促使dbwr频繁的写,同时它又要更新数据文件的头部。
      

  3.   

    Checkpoint很多单位只是简单的控制端口和禁止非法的ip访问。
    对数据库是有影响的,我曾遇到过这样的情况:
    有防火墙(把所有端口都放开):不能连接数据库
    没有防火墙(不通过防火墙):可以连接数据库------------------------
    |                      |
    |   相逢何必曾相识     |
    |                      |
    ------------------------
      

  4.   

    checkpoint是用于减少instance recovery的时间,但问题是如何做才能保证数据库在任何时间(checkpoint的前中后)崩溃都不影响到数据的安全,在做checkpoint时会不会发生锁表?一般的技术手册都会避而不谈,因为大多数时候checkpoint的时间都在秒级。就此,一些厂商借用了模糊数学的原理,发明了模糊checkpoint.但是还没有彻底解决锁表问题。请教高手指点。
      

  5.   

    建议了解oracle的结构与后台进程的关系
    --------------------
    oracle数据库的安全是LGWR保证的。
    CKPT仅仅是一个底层的后台进程,促使DBWR写内存数据并同步数据文件与控制文件而已。