
数据库备份任务是一个从数据库文件中读取备份的过程故天然不影响数据库读操作。对于DML、DDL操作GBase 8a集群在没有事务日志的前提下是如何做到不阻塞业务的呢下面我们来介绍南大通用GBase 8a集群gbase database在线备份如何利用写时复制机制实现不阻塞DML、DDL的。写时复制是指GBase 8a集群在进行DML、DDL操作前将要修改的表的元数据信息和操作后无法获取的数据内容如drop clolumn、drop table、truncate table、drop partition复制到一个临时目录下并通知备份工具部分需要备份的文件路径发生改变。此时备份工具触发重试机制将表放入重试清单并在备份的最后进行这些表的备份重试重试时从写时复制的文件中读取数据保证正确性。以库级备份执行流程为例如下图GBase 8a集群启动备份任务后如果备份表有DML、DDL操作就会触发写时复制功能。·对于DML当备份执行过程中执行DML操作时监听子线程自动识别表发生DML操作并设置状态启动表元数据及尾块数据的Copy形成一个副本用于备份读取。表DML操作不会受到影响。注在线备份执行时会自动将update操作转为deleteinsert的快速更新模式对于delete操作仅修改元数据中的delete位图对于insert操作仅在尾块位置追加写入新增数据。所以DML操作的在线备份写时复制的内容较小。·对于DDL在备份执行过程中执行DDL操作时监听子线程自动识别表发生DDL操作并设置状态按照DDL类型进行写时复制处理1、对于修改表元数据的DDL操作如修改表名称、压缩类型等只需Copy表元数据即可2、对于增加列的DDL操作因数据存储是向后兼容的同样只需Copy表元数据即可备份数据时忽略新增列3、对于删除列、删除表的DDL操作GBase 8a采用将删除的列、表mv到临时目录方式在备份完成后再执行最终的文件删除。在完成库、表的备份后通过监听子线程恢复表状态并删除Copy的快照文件。