DM 数据守护(Data Watch)是一种集成化的高可用、高性能数据库解决方案,是数据库异地容灾的首选方案。通过部署 DM 数据守护,可以在硬件故障(如磁盘损坏)、自然灾害(地震、火灾)等极端情况下,避免数据损坏、丢失,保障数据安全,并且可以快速恢复数据库服务,满足用户不间断提供数据库服务的要求。实现原理非常简单:将主库(生产库)产生的 Redo 日志传输到备库,备库接收并重新应用 Redo 日志,从而实现备库与主库的数据同步。DM 数据守护的核心思想是监控数据库状态,获取主、备库数据同步情况,为 Redo 日志传输与重演过程中出现的各种异常情况提供一系列的解决方案。
在DM 数据守护(Data Watch)基础之上通过调整配置变更为读写分离,读写分离集群不依赖额外的中间件,而是通过数据库接口与数据库之间的密切配合,实现读、写操作自动分离特性。DM 的 JDBC、DPI、DCI、ODBC、Provider、dmPython 等接口都可以用来部署读写分离集群。
归档是实现数据守护系统的重要技术手段,根据功能与实现方式的不同,DM 数据库的归档可以分为 6 类:本地归档、远程归档、实时归档、即时归档、异步归档和同步归档。不同归档类型可以组成不同的备库复制模式,实现不同的集群特征。
Redo 日志本地归档(Local),就是将 Redo 日志写入到本地归档日志文件的过程。配置本地归档情况下,Normal/PRIMARY 模式库在 Redo 日志写入联机 Redo 日志文件后,将对应的 RLOG_PKG 由专门的归档线程写入本地归档日志文件中。STANDBY 模式库收到主库产生的 Redo 日志后,直接进行本地归档,写入本地归档日志文件中,同时启动 Redo 日志重演。
远程归档(REMOTE ARCHIVE)是将当前节点的远程归档目录配置为另一节点的本地归档目录,以此来共享它的本地归档日志文件。其中,另一节点的本地归档目录必须位于 ASM 共享存储或其他共享磁盘上,以使当前节点可以成功访问。远程归档采用双向配置的方式,即两个节点将自己的远程归档相互配置在对方机器上。DMDSC 集群配置远程归档后,集群中任意实例都可以像访问本地归档一样,访问所有实例产生的归档日志。
远程归档的使用场景:
1.执行数据库恢复时,恢复工具(如 DMRMAN)所在节点需要访问其他各节点归档日志。
2.DMDSC 守护系统中进行主、备库异步归档日志的同步或备库恢复时,DMDSC 控制节点作为发送端,需要访问其他从节点的归档日志。
与本地归档写入保存在磁盘中的日志文件不同,实时归档(Realtime)将主库产生的 Redo 日志通过 MAL 系统传递到备库,实时归档是实时主备和 MPP 主备的实现基础。实时归档只在主库生效,一个主库可以配置 1~8 个实时备库。
实时归档的执行流程是,主库在 Redo 日志(RLOG_PKG)写入联机日志文件前,将 Redo 日志发送到备库,备库收到 Redo 日志(RLOG_PKG)后标记为 KEEP_RLOG_PKG,将原 KEEP_RLOG_PKG 加入日志重演任务系统,并马上响应主库,不需要等待 Redo 日志重演结束后再响应主库。主库收到备库的响应消息,确认备库已经收到 Redo 日志后,再将 Redo 日志写入联机日志文件中。
另外,实时归档也可以支持读写分离集群,实时归档也分为两种模式:事务一致模式和高性能模式,可以通过 dmarch.ini 中的 ARCH_WAIT_APPLY 或 WAIT_APPLY 配置项来设置实时归档的模式。这两种模式的具体含义和下一小节 2.2.11.5 中的说明完全相同,区别仅在于配置为实时归档时,dmarch.ini 中的 ARCH_WAIT_APPLY 配置项默认值为 0,即采用高性能模式
即时归档(Timely)在主库将 Redo 日志写入联机日志文件后,通过 MAL 系统将 Redo 日志发送到备库。即时归档与实时归档的主要区别是 Redo 日志的发送时机不同。一个主库可以配置 1~8 个即时备库。
根据备库重演 Redo 日志和响应主库时机的不同,即时归档分为两种模式:事务一致模式和高性能模式。即时归档模式可以通过 dmarch.ini 中的 ARCH_WAIT_APPLY 或 WAIT_APPLY 配置项来设置。其中,ARCH_WAIT_APPLY 配置项默认值为 1,表示事务一致模式。
异步归档(Async)由主、备库上配置的定时器触发,根据异步备库的 KEEP LSN 信息,扫描本地归档目录获取 Redo 日志,并通过 MAL 系统将 Redo 日志发送到异步备库。异步备库的 Redo 日志重演过程与实时归档等其他类型的归档完全一致。
每个 PRIMARY 或 STANDBY 模式的数据库最多可以配置 8 个异步备库,Normal 模式下配置的异步备库会自动失效。异步备库可以级联配置,异步备库本身也可以作为源库配置异步备库。
同步归档(Sync)在主库归档日志刷盘后,通过 MAL 系统将 Redo 日志发送到备库。同步备库的 Redo 日志重演过程与实时归档等其他类型的归档完全一致。一个主库可以配置 1~8 个同步备库。
同步归档的执行流程是,主库在归档日志刷盘后,将 Redo 日志发送到备库,备库收到 Redo 日志(RLOG_PKG)后将其加入日志重演任务系统,并马上响应主库,不需要等待 Redo 日志重演结束后再响应主库。
达梦支持临时表,同时支持在临时表上创建索引。
临时表有事物级临时表和会话级临时表。
临时表中的数据仅在事务过程(Transaction)中有效,当事务提交(COMMIT)后,临时表的暂时段将被自动截断(TRUNCATE),但是临时表的结构以及元数据还存储在用户的数据字典中。
可以跨事务而存在,不过,当该会话结束时,临时表的暂时段将随着会话的结束而被丢弃,临时表中的数据自然也就随之丢弃。但是临时表的结构以及元数据还存储在用户的数据字典中。
临时表支持常见的普通索引、复合索引、唯一索引、主键索引、函数索引等。
达梦默认基础索引结构,基于 B + 树,支持等值查询、范围查询(> < >= <= BETWEEN)、排序、分组,读写均衡,OLTP 场景首选。
多个字段联合构建一棵 B + 树,遵循最左前缀原则,适合多字段联合过滤,能覆盖多条件查询避免回表。
B 树基础上增加唯一性约束,索引字段组合值全局不可重复,允许单列 / 多列组合,NULL 可重复。插入重复值直接报错。
临时表指定 PRIMARY KEY 自动生成聚集 B 树索引,一张表仅一个聚集索引,表数据物理按主键有序存储,主键定位速度最快。
属于 B 树索引变种,预先计算函数 / 表达式结果并存储在索引中,解决字段包装函数后无法走普通索引的问题,查询表达式必须和索引定义完全一致才能命中。
switchover用于正常主备切换。如果存在多个备库,需要先执行 choose switchover 命令,选出守护进程组中可以切换的备库。choose switchover 命令选择可切换备库的条件如下:
takeover用于故障切换,用于集群节点故障且短时间无法恢复时切换。为了避免备库接管后,造成守护进程组分裂,手动执行 Takeover 必须满足下列条件:
在备库接管失败后,主库仍然不能启动或者及时恢复对外服务的情况下,用户可以使用 takeover force 命令,进行备库强制接管。强制接管具有一定的风险,可能因为备库和故障主库数据不一致,而造成部分数据的丢失,出现数据库分裂的情况,所以应该慎重使用。
强制接管,先通过 Choose Takeover Force 选出符合强制接管条件的备库,再执行 Takeover Force 命令。备库强制接管时,如果接管备库是处于 Mount 状态/STANDBY 模式的库,则会自动 Open 备库,其他执行流程与备库接管一致。强制接管的条件包括:
达梦数据库支持灵活的架构组合形态:既可以基于单机实例搭建数据守护主备架构,并依托该架构实现读写分离负载分担;也可采用对标 Oracle RAC 的 DSC 共享集群作为主节点,搭配独立DSC备库构建主备集群,对标 Oracle MAA 企业级综合高可用方案。产品支持单机与 DSC 架构自由混搭部署,同时可搭配四类归档策略(实时、同步、即时、异步)差异化数据同步。
文章
阅读量
获赞
