一、什么是归档
数据库归档是一种数据管理策略,它涉及将旧的、不经常访问的数据移动到一个单独的存储设备,以便在需要时可以检索,同时保持数据库的性能和效率。
归档的主要目标是为了释放数据库中的空间,以便更有效地利用高性能的存储设备来存储更频繁访问或更新的数据。同时,归档也确保了可能需要的旧数据得以保留,以便在需要时能够检索。
数据库归档的优点包括提高数据库性能、节省存储空间、数据保护以及支持数据分析和报告等。通过减少数据库中的数据量,归档可以提高查询速度和数据库性能。归档的数据通常存储在成本较低的存储设备上,这可以节省高性能存储设备的空间。此外,许多行业和地区的法规要求公司在一定期限内保留某些数据,通过归档,公司可以满足这些要求同时不影响数据库的性能。
二、达梦数据库的归档
归档是实现数据守护系统的重要技术手段,根据功能与实现方式的不同,DM数据库的归档可以分为6类:本地归档、远程归档、实时归档、即时归档、异步归档和同步归档。其中,本地归档日志的内容与写入时机与数据库模式相关;主库Redo日志写入联机日志文件后,再进行本地归档;备库收到主库产生的Redo日志后,直接进行本地归档,同时启动Redo日志重演。
归档模式 | 说明 |
本地归档 | 在REDO日志写入联机日志文件后触发,将REDO日志写入到本地归档文件。由归档线程完成本地归档动作,最多可以设置8个本地归档。 |
实时归档 | 在写入REDO日志到联机日志文件之前,通过MAL系统发送REDO日志到远程服务器,远程服务器接收到REDO日志后,返回确认消息后,执行后续操作。发送REDO日志失败,或从备库返回的数据库模式不是STANDBY,将数据库切换为SUSPEND,阻塞所有REDO日志的写入操作。只能配置1个实时归档。这种归档类型只能用在主从备份集群中。 |
即时归档 | 即时归档在主库将REDO日志写入联机日志文件后,再通过MAL系统将REDO日志发送到备库。即时归档是读写分离集群的实现基础,与实时归档的主要区别是发送REDO日志的时间不同。一个主库可以配置1-8个即时备库。 |
异步归档 | 在设定的时间点或者每隔设定时间,启动归档REDO日志发送。设置定时归档,必须确保至少有一个本地归档。最多可以设置8个异步归档。 |
同步归档 | 同步归档的执行流程是,主库在归档日志刷盘后,将Redo日志发送到备库,备库收到Redo日志(RLOG_PKG)后将其加入日志重演任务系统,并马上响应主库,不需要等待Redo日志重演结束后再响应主库。 |
远程归档 | 远程归档专门用于DMDSC环境中。将写入本地归档的REDO日志信息,发送到远程节点,并写入远程节点的指定归档目录(共享存储)中。最多可以配置8个远程归档。 |
- 本地归档
本地归档就是Redo日志写入到本地归档日志文件的过程。配置本地归档情况下Normal/Primary模式库在Redo日志写入联机Redo日志文件后,将对应的RLOG_PKG由专门的归档线程写入本地归档日志文件中。Standby模式库收到主库产生的Redo日志后,直接进行本地归档,写入本地归档日志文件中,同时启动Redo日志重演。
1)查看是否开启归档
- 配置本地归档
修改数据库为mount状态ALTERDATABASEMOUNT;
开启归档sp_set_para_value(1,'ARCH_INI',1);
配置本地归档alterdatabaseaddarchivelog'DEST=/home/dmdba/dmarch,type=local,file_size=128,space_limit=1024';
修改数据库为openalterdatabaseopen;
2.远程归档
远程归档适用于dsc集群中,是将当前节点的归档目标配置在远程节点上,以此共享归档日志文件,同时,远程节点上配置的本地归档需要在共享磁盘上。在一个DSC集群中,一台机器配置远程归档到另一台机器上,而另一台机器也配置远程归档到这台机器上。
3.实时归档
与本地归档写入保存在磁盘中的日志文件不同,实时归档将主库产生的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配置项来设置实时归档的模式。
通常在配置实时归档时,dmarch.ini中ARCH_WAIT_APPLY配置为0,采用高性能模式
4.即时归档
即时归档与实时归档不同的在于,即时归档是在主库将 Redo 日志写入联机日志文件后,通过 MAL 系统将 Redo 日志发送到备库。即时归档与实时归档的主要区别是 Redo 日志的发送时机不同。一个主库可以配置 1~8 个即时备库。
根据备库重演 Redo 日志和响应主库时机的不同,即时归档分为两种模式:事务一致模式和高性能模式。即时归档模式可以通过dmarch.ini 中的 ARCH_WAIT_APPLY 或 WAIT_APPLY 配置项来设置。其中,ARCH_WAIT_APPLY 配置项默认值为 1,表示事务一致模式。
实时归档与即时归档不同:实施归档和即时归档最主要的区别在于写入联机日志文件的时机,实时归档在写入联机日志文件前发送,而即时归档在写入联机日志文件后再发送。实时归档ARCH_WAIT_APPLY配置为0,即时归档ARCH_WAIT_APPLY配置为1.
5.异步归档
异步归档由配置的定时器进行触发,
根据异步备库的 KEEP LSN 信息,扫描本地归档目录获取 Redo 日志,并通过 MAL 系统将 Redo 日志发送到异步备库。异步备库的 Redo 日志重演过程与实时归档等其他类型的归档完全一致。
6.同步归档
同步归档在主库归档日志刷盘后,通过 MAL 系统将 Redo 日志发送到备库。同步备库的 Redo 日志重演过程与实时归档等其他类型的归档完全一致。
三、归档状态
归档状态概述
在达梦数据库中,归档状态主要分为以下几种:
- Valid:归档有效,允许执行数据库归档操作。
- Invalid:归档无效,主数据库不向备数据库发送联机Redo日志。
- Async_send:归档无效,但主库正在同步历史数据到备库。
归档状态转换时机
-
初始化状态:
- 主备库启动后,所有备库的归档状态默认为 Valid。
- 在守护进程打开主库之前,若发现备库数据不一致,归档状态会被修改为 Invalid。
-
实时备库和即时备库故障恢复:
- 当实时备库或即时备库故障恢复时,主库将同步历史数据,守护进程会将主库状态修改为 Suspend,并将备库的归档状态从 Invalid 修改为 Valid。
- 当守护进程再次打开主库后,主备库数据恢复为一致状态。
-
同步备库故障恢复:
- 主库开始同步历史数据时,备库的归档状态从 Invalid 修改为 Async_send。
- 在此过程中,日志刷盘线程会挂起,以确保备库能够追赶到主库的状态。主库到备库的归档状态从 Async_send 修改为 Valid,然后唤醒日志刷盘线程,确保主备库数据一致。
-
失败处理:
- 如果主库向实时备库发送日志失败,归档状态会被修改为 Invalid。
- 主库发送即时归档失败后,归档状态直接改为 Invalid。
- 主库发送同步归档失败后,归档状态也直接改为 Invalid,且不会进入 Suspend 状态。
-
条件恢复:
- 如果主库发现同步备库的归档状态为 Invalid,且满足故障恢复条件,将主库到备库的归档状态从 Invalid 改为 Async_send,并开始同步历史数据。同步完成后,备库的归档状态将修改为 Valid。
总结:达梦数据库的归档机制通过状态管理实现数据的高可用性和一致性。不同的归档状态和转换时机确保了在发生故障时能够快速恢复,保持主备库之间的数据同步。这种机制对于保障数据库的可靠性和稳定性至关重要。通过合理的状态管理,达梦数据库能够在各种场景下有效应对故障,确保数据的安全和完整。