Chinaunix首页 | 论坛 | 博客
  • 博客访问: 293936
  • 博文数量: 18
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1911
  • 用 户 组: 普通用户
  • 注册时间: 2013-03-25 09:22
个人简介

数据库高级专家。国内顶尖数据专家,出版数据专著多部,发表数据论文多篇,近年参与多项金融、国防、电信等大型数据工程。 http://www.china-pub.com/main/sale/renwu/luminary.asp?id=9608

文章分类
文章存档

2015年(2)

2013年(16)

我的朋友

分类: DB2/Informix

2013-04-07 11:13:02

   在数据库世界,什么东西需要最严密的保护?是机房里那些昂贵的设备吗?是那些复杂的软件吗?答案是否定的。
数据库中最重要最昂贵的就是数据!一切机制、一切规范都是围绕着数据运行的,因此对数据应该采取最高规格的严密保护。在保护数据的众多方法中,数据库备份与恢复是最基本的策略,它就像一层厚厚的盔甲,保护应用安全运行。正如一位大师所言,“数据保护的技术不是万能的,而没有正确的数据保护意识,是万万不能的!”


  无论是Oracle数据库,还是DB2数据库,如果要保持金刚不坏之身,日志起到的作用至关重要。可以这样讲,没有日志,数据库将不堪一击!作为保护数据的最重要最基本的策略,日志就像一层厚厚的盔甲,是保护数据应用的必备之物。
DB2采用的是一种预写式日志(Write-Ahead Logging)方法来实现事务处理,简称WAL。预写式日志的中心思想是:在数据库中更新、插入或删除的数据,被写入到磁盘之前,记录这些变化的日志必须已经永久写入到磁盘。


   对DB2日志来说,每一条日志记录首先会写入到日志缓冲区,再从日志缓冲区写入到磁盘。那么在什么条件下DB2会将日志缓冲区中的日志写入到磁盘呢?
1) 当前事务被落实(Commit)时,此事务的日志必须由日志缓冲区写入到磁盘。
2) 为了最小化数据丢失,每隔一秒,DB2会将日志缓冲区的日志写入到磁盘。
3) 在特殊情况下,当日志缓冲区满了,缓冲区中的日志会被立即写入到磁盘。
4) 当数据缓冲区满时,如果置换出来的脏数据页需要写回磁盘,则在此之前,这些修改数据对应的日志记录必须先写回磁盘。
对于DB2数据缓冲区中的数据,数据缓冲区的数据写入到磁盘(也称为数据持久化)的次数要远远小于日志缓冲区的写入次数。那么在什么条件下DB2会将数据缓冲区中的数据写入到磁盘呢?
1) 当SOFTMAX值达到限定值时,数据缓冲区中的数据会被写入到磁盘中。SOFTMAX值,是一个数据库配置参数,它决定了发生灾难恢复时所需要读取的日志文件的数目,同时也决定了数据缓冲区向磁盘写入数据的频率。
2) 影响数据写入磁盘频率的另一个参数是CHNGPGS_THRESH,它标志着当数据缓冲区中的被改变数据页的百分比,一般为60%。即当数据缓冲区中的数据页有60%以上被修改时,数据缓冲区会执行一次把数据写入磁盘的操作。
3) 特殊情况下,当数据缓冲区满时,与日志缓冲区一样,数据缓冲区会立即执行把数据写入磁盘的操作。


   我们看一看日志比较:Oracle与DB2
Oracle数据库是通过重做日志(Redo Log)和重做日志缓冲区(Redo Log Buffer)来对数据库日志进行管理。同时,它还可以使用3个冗余的重做日志组(Redo Log Group)来保证在线日志的安全。


   在Oracle中,其在线日志的运行模式又分为2种:非归档模式(NOARCHIVELOG)和归档模式(ARCHIVELOG)。非归档模式指的是在线日志在多个重做日志组中循环使用。归档模式是指多个重做日志组循环使用,当所有的日志组被用尽,回到初始第一个日志组要进行覆盖前,此日志组中的内容会被归档到其他位置。
实际上,DB2与Oracle在日志管理上有不少相同点。熟悉Oracle的朋友可以体会到,几乎所有在Oracle中与日志有关的概念,都可以直接在DB2中找到对应的对象。不过,与DB2不同的是,在Oracle中没有主日志文件和辅助日志文件这样的区别。


   DB2中日志运行模式分为两种,循环日志模式(Circular Logging)和归档日志模式(Archival Logging)。
需要注意的是,无论循环日志模式还是归档日志模式,都包含主日志文件(Primary Log)和辅助日志文件(Secondary Log)。
主日志文件是记录日志的主要文件,在DB2启动的时候即进行分配,其数目由参数LOGPRIMARY确定。
辅助日志文件是当主日志文件已满时,为保证当前事务可以被继续处理,按照需要分配一个新的日志文件,直至分配的日志数到达规定的最大数目。如果这时还不能完成当前事务,则当前事务会被撤销并返回错误代码至上层应用程序。辅助日志参数由LOGSECOND确定。


 

阅读(4019) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

hmchzb192013-04-08 13:31:09

这种对应着讲解是比较有趣的,可以看到Oracle 和DB2的异同。
oracle 会定期去archive redo log, 那么DB2 是怎么实现这部分工作?