目前DM8所支持的归档类型主要有:本地归档、远程归档、实时归档、即时归档等,本地归档作为对数据库冷备的基础,支持了在一个基准备份集基础上,将数据库恢复到任意时间点的功能;而实时归档和即时归档,则在对数据库进行实时热备----DATA WATCH技术中,有着重要作用。
那么在我们搭建数据库守护环境时,该如何选择使用哪种归档类型呢?在弄清楚该问题之前,我们需要了解实时归档和即时归档的原理和差异之处。
一、原理
1、实时归档(REALTIME)
主备环境中,主库在Redo日志写入联机日志文件之前,先通过MAL系统把自己的Redo日志发送给备库,等待备库响应后,再写入自己的联机日志文件。
2、即时归档(TIMELY)
主备环境中,主库在Redo日志写入联机日志文件之后,再通过MAL系统把自己的Redo日志发送给备库。
二、差异
1、发送时机
主库发送Redo日志的时机,分别为写入联机日志文件之前和之后。
2、备库重演和响应主库的时机
高性能和事务一致性,在配置dmarch.ini时配置参数ARCH_WAIT_APPLY控制,0表示高性能,即备库收到主库Redo日志后马上响应主库;1表示事务一致性,即备库收到主库Redo日志后马上进行重演,待重演完毕后再响应主库,即时归档中默认值为1,实时归档中默认为0。
3、KEEP_PKG
实时归档运行中,备库中设置了KEEP_PKG,用于存放备库收到的主库通过MAL系统发送的Redo日志包,并不马上进行重演;而即时归档则不存在这种机制。
- 如此设置的原因在于:实时归档是在收到主库Redo日志后马上响应主库,而主库在收到备库响应后再将Redo日志写入自己的联机日志文件,如果没有KEEP_PKG,备库收到后马上进行了重演,而主库在准备写入联机日志文件前故障,则会导致备库的数据比主库的还要多,造成数据不一致;即时归档中则由于主库在发给备库之前已经将Redo日志写入了联机日志文件中,所以不存在这种造成数据不一致的隐患。
- 实时归档进行重演的时机主要有:
1)备库收到新的 RLOG_PKG,会将当前保存的 KEEP_PKG 日志重演,并将新收到的RLOG_PKG 再次放入 KEEP_PKG 中。
2)主库会定时将 FILE_LSN (已写入联机日志文件的日志包的最大LSN)等信息发送到备库,当主库 FILE_LSN 等于备库 SLSN(备库明确可重演的最大 LSN