2实时备份容灾原理
2.1Oracle事务日志架构
Oracle
通过事务日志记录所有事务和每个事务对数据库所做的修改。其中记录了对数据库中的每一个变化,日志包含的数据有已修改数据的前像(undo)和后像(redo)两种类型。前像是操作执行前的数据复本;后像是操作执行后的数据复本。
Oracle
使用预写日志技术。预写日志确保在相关的日志记录之后才将数据修改写入磁盘。在将任何数据写入数据文件之前,都必须保证该数据对应的日志已经写入到日志文件中, 一个事务提交的时候,必须保证该事务中产生的所有日志记录都已经写入到日志文件中。
日志文件是按顺序写入的文件,块大小一般为字节512字节,日志文件有一个文件头信息。紧随文件头之后,是按照顺序写入的一个个重做记录。
重做记录(Redo Record)通常由redo record header信息和一组改变向量组成,是一个改变向量的集合,代表一个数据库的变更(INSERT、UPDATE、DELETE等操作),构成数据库变更的最小恢复单位。例如,一个Update的重做记录包括相应的回滚段的改变向量和相应的数据块的改变向量等。改变向量(Change Vector)表示对数据库内某一个数据块所做的一次变更。改变向量中包含了变更的数据块的版本号、事务操作代码、变更从属数据块的地址(DBA)以及更新后的数据。
基于上述事务日志架构,Oracle数据库镜像通过实时分析日志文件块,并解析还原成数据库记录,再执行到目标数据库,即可实现Oracle数据库实时备份容灾。
2.2镜像引擎架构
Oracle
数据库镜像引擎包括代理、镜像服务器两大部件。代理包含事务日志捕获器、事务日志分析器、自适应数据字典、初步过滤器、传输控制器和任务队列等;镜像服务器包含接收队列、事务队列和Snapshot存储、SQL应用机构等。
2.3复制流程
事务日志实时捕获器实时监控源Oracle Redo Log事务日志文件和捕获其变化数据;事务日志分析器通过数据字典将日志数据解析还原成数据库记录,并过滤不需要镜像的用户、表或其他数据库对象;传输控制器从任务队列中取出记录数据传输至镜像服务器。镜像服务器接收队列将记录数据保存至事务队列和Snapshot文件中;SQL应用机构扫描事务队列,将提交事务应用到目标Oracle。
2.4实时事务捕捉及解析
Oracle
镜像中由捕获进程来收集发生变化的数据,此进程的独特之处在于它几乎不对生产数据库带来任何开销。
此捕获过程中完成的操作为:捕获进程从Oracle redo log中读取信息,因此复制过程不会给生产数据库实例带来性能问题。只有发生改变的数据被传输,而不是Redo Log中的全部信息,因此镜像的网络负载非常小,源数据库不需要参与到数据捕获和传输过程中
浪擎镜像代理的捕获进程不但可以读取在线的Redo Log,而且可以读取Archive Log。这种能力极大地增强了系统的冗余功能。例如,如果捕获进程由于某种原因被停止,在线日志来不及分析就被覆盖,当它重新启动后可以从归档日志中分析,数据同步不会受到影响,
捕获进程驻留在源系统上,自动读取Oracle的在线Redo Log。这种读操作是从操作系统的角度来完成的,而不是通过数据库。通过将Redo Log作为获取变化信息的源泉,可以完成数据的复制而不会给生产系统带来额外的开销。由于Oracle使用Redo Log进行系统恢复,因此Redo Log信息足够,其数据格式也足够稳定。
捕获进程连续监控Redo Log用以捕捉变化信息。当Redo Log中出现一条新记录时,事务日志分析器判断其是否属于被复制对象,如果是,则为该条记录加入存储队列,存储队列存在于数据库进程之外。发生改变的数据被立即处理并被发送到目标系统中而不等待提交或回滚动作的完成,因为等待提交或回滚完成将带来延迟。当提交或回滚信息被写入Redo Log时,它们也将被发送到目标系统中,从而在目标系统中完成相对应的操作。
事务日志分析器根据数据字典依次解析日志文件块,获取该记录的操作类型、涉及对象等,忽略不在数据字典中的对象并放弃该日志记录的后续解析。
当DDL语言更改了数据库结构时,事务日志分析器将通知数据字典使其动态调整对象结构。因此数据字典具备自适应能力,无需重新启动即可解析后续日志文件块。
2.5传输控制
镜像系统的传输协议基于TCP/IP实现。传输控制器记录当前传输成功的事务点。当连接中断等因素导致传输失败,传输控制则停止传输工作,尝试连接直至成功。
镜像系统可创建多个通道进行并行传输,提高传输效率。
2.6应用数据
镜像系统将客户端传送到信息转化为SQL语句,并按照在源数据库中的Commit顺序发送给目标Oracle数据库执行。
3技术特性
1)目标数据库状态
目标Oracle数据库处于运行状态,能读能写,运行的目标系统保证了系统的一致性。
2)两阶段检查(2PC)
在传输阶段和数据库记录提交阶段均设置成功检查点。两阶段检查可防止如网络连接断开、目标数据库没有运行、进程崩溃等意外因素发生造成的事务丢失。
说明
| |
复制原理
|
捕获Oracle的增量事务进行复制
|
复制粒度
|
数据库记录
|
复制DDL语言
|
复制数据库定义语言,如:
1) 增加、删除、修改表
2) 增加、删除、修改字段定义
3) 增加、删除、修改触发器、存储过程
…
|
复制DML语言
|
复制应用程序提交的数据
|
保存事务日志
|
系统保存捕获的事务日志
|
源与目标硬件规格要求
|
无需一致
|
网络带宽占用
|
远小于存储层复制
|
复制时延
|
异步复制,秒级延时
|
复制最大距离
|
无限制
|
对系统性能的影响
|
源系统CPU占用率不超过5%
|
支持应用方式
|
一对一、一对多、多对一
|
事务完整性
|
完整、一致
|
目标应用系统状态
|
运行状态,能读能写
|
复制方向
|
单向,从源至目标
|
支持过滤
|
可设置过滤条件
|
支持版本
|
Oracle 8i/9i
|
支持操作系统
|
Windows
、Linux、AIX、Solaris、HPUX
|
不支持字段
|
用户自定义字段类型
|
Archive Log
配置
|
无需开启Archive Log
|
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9561877/viewspace-235597/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/9561877/viewspace-235597/