LeoHan 2020-06-06
备份与恢复过程都依赖归档日志,归档日志是保证数据一致性和完整性的重要保障。配有归档日志的数据库系统在出现故障时丢失数据的可能性更小,这是因为一旦出现介质故障如磁盘损坏时,利用归档日志,系统可被恢复至故障发生的前一刻,也可以还原到指定的时间点。
DM 服务器可以运行在两种模式下,即归档模式和非归档模式,这两种模式可以由用户进行设置,系统在归档模式下运行时,会产生归档日志文件,此时系统管理员应该事先预留出足够的磁盘空间以便存储归档日志文件。通过 dm.ini 和 dmarch.ini 可以配置归档。
Redo 日志本地归档(LOCAL),就是将 Redo 日志写入到本地归档日志文件的过程。配置本地归档情况下,Redo 日志刷盘线程将 Redo 日志写入联机 Redo 日志文件后,对应的 RLOG_BUF 由专门的归档线程负责写入本地归档日志文件中。
与联机 Redo 日志文件可以被覆盖重用不同,本地归档日志文件不能被覆盖,写入其中的 Redo 日志信息会一直保留,直到用户主动删除;如果配置了归档日志空间上限,系统会自动删除最早生成的归档 Redo 日志文件,腾出空间。
DM 提供了按指定的时间或指定的 LSN 删除归档日志的系统函数
(SF_ARCH1VELOG_DELETE_BEFORE_TIME 和SF_ARCH1VELOG_DELETE_BEFORE_LSN),但用户需要谨慎使用。例如,在守护系统中,如果备库故障了,主库继续服务,主库的日志在继续增长。此时如果删除尚未同步到备库的主库归档日志,那么等待备库重启之后,会由于备库收到的日志缺失导致主备库无法正常同步数据。
本地归档文件在配置的归档目录下生成并保存,文件命名规则为:日志归档名_年月日时分秒毫秒.log,如:ARCH1VE_LOCAL1_20151014153933458.log。如果磁盘空间不足,且没有配置归档日志空间上限(或者配置的上限超过实际空间),系统将自动挂起,直到用户主动释放出足够的空间后继续运行。
注意:
为了最大限度 地 保护数据,当磁盘空间不足导致归档写入失败时,系统会挂起等待,直到用户释放出足够的磁盘空间。制 当磁盘损坏导致归档日志写入失败时,系统会强制 HALT。
与本地归档写入本地磁盘不同,实时归档(Realtime)将主库产生的 Redo 日志和将Huge 表数据修改,通过 MAL 系统传递到备库,实时归档是实时主备和 MPP 主备的实现基础。实时归档只有在主库配置为 Primary 模式时才能生效,一个主库可以配置 1~8 个实时备库。
实时归档的执行流程是,主库在 Redo 日志(RLOG_BUF)写入联机 Redo 日志文件前,将 Redo 日志发送到配置为 Standby 模式的备库,备库收到 Redo 日志(RLOG_BUF)后放入 KEEP_BUF,并将原有的 KEEP_BUF 中的内容加入日志重演任务系统后,马上响应主库,而不是等待 Redo 日志重演结束再响应主库,主库收到响应消息,确认备库已经收到Redo 日志,再将 Redo 日志写入联机 Redo 日志文件中。
即时归档(Timely)在主库将 Redo 日志写入联机 Redo 日志文件后,再通过 MAL 系统将 Redo 日志发送到备库。即时归档是读写分离集群的实现基础,与实时归档的主要区别是发送 Redo 日志的时机不同。一个主库可以配置 1~8 个即时备库。
根据备库重演 Redo 日志和响应主库时机的不同,即时归档分为两种模式:事务一致模式和高性能模式。即时归档模式根据配置文件 dmarch.ini 中的 ARCH_WAIT_APPLY 配置项来确定,配置为 1 就是事务一致模式,配置为 0 就是高性能模式,ARCH_WAIT_APPLY缺省值是 1。
事务一致模式 主库事务 commit 触发 Redo 日志刷盘和即时归档,备库收到主库发送的 Redo 日志要在重演完成后再响应主库,主库才能响应用户 commit 成功。事务一致模式下,同一个事务的 SELECT 语句不管是在主库执行,还是在备库执行,查询结果都满足Read Commit 隔离级要求。
高性能模式 与实时归档一样,备库收到主库发送的 Redo 日志后,马上响应主库再启动日志重演。高性能模式下,备库与主库的数据同步存在一定延时(一般情况下延迟时间非常短暂,用户几乎感觉不到),不能严格保证事务一致性。
事务一致模式,主备库之间严格维护事务一致性,但主库要等备库 Redo 日志重演完成后,再响应用户的 commit 请求,事务 commit 时间会变长,存在一定的性能损失。高性能模式则通过牺牲事务一致性,来获得更高的性能和提升系统的吞吐量。用户应该根据实际情况,选择合适的即时归档模式。
异步归档(Async),由主、备库上配置的定时器触发,根据异步备库的 CUR_LSN 信息,扫描本地归档目录获取 Redo 日志,并通过 MAL 系统将 Redo 日志发送到异步备库。异步备库的 Redo 日志重演过程与实时归档等其他类型的归档完全一致。
每个 Primary 或 Standby 模式的数据库,最多可以配置 8 个异步备库,Normal 模式下配置的异步备库会被自动失效。
异步备库可以级联配置,异步备库本身也可以作为源库配置异步备库。理论上守护系统中可配置的异步备库的总数目只受 MAL 系统最大节点数(2048)的限制。
所谓远程归档(REMOTE ARCH1VE),顾名思义就是将写入本地归档的 REDO 日志信息,发送到远程节点,并写入远程节点的指定归档目录中。DMRAC 集群中各个节点在配置本地归档之外,再相互配置一个远程归档,就可以在任意一个节点的本地磁盘中,找到 DMRAC集群所有节点产生的、完整的归档日志文件。远程归档的触发时机是,在 REDO 日志写入本地归档日志文件的同时,将 REDO 日志通过 MAL 系统发送给指定的数据库实例。
远程归档与本地归档的主要区别是 REDO 日志写入的位置不同,本地归档将 REDO 日志写入数据库实例所在节点的磁盘,而远程归档则将 REDO 日志写入到其他数据库实例所在节点的指定归档目录。远程归档日志文件的命名规范和本地归档日志文件保持一致,都是以归档名+归档文件的创建时间进行组合命名。
远程归档与本地归档的另外一个区别就是归档失败的处理策略不同:本地归档写入失败(比如磁盘空间不足),系统将会挂起;而远程归档失败则会直接将远程归档失效,不再发送 REDO 日志到指定数据库实例。当节点间网络恢复、或者远程节点重启成功后,系统会自动检测并恢复远程归档,继续发送新写入的 REDO 日志,但不会主动补齐故障期间的 REDO日志。因此,在出现节点故障等情况下,远程归档的内容有可能是不完整的,而本地归档的内容肯定是完整的;如果备份还原恰好需要用到这段丢失的远程归档日志,那么可以从源端的本地归档拷贝、补齐这部分内容。
注意:
远程归档必须双向配置,单向配置时目标实例上不会接收归档日志,归档状态将会变成无效状态。
在开启数据库的归档模式之前,使用如下语句查询检查数据库是否为归档模式。如果显示Y则为归档模式,否则为非归档模式。
select arch_mode from v$database;
如果数据库是非归档模式,则可以使用如下三种方式配置归档模式。
其中前两种是联机归档配置,在数据库实例启动情况下,使用 SQL 语句或者客户端操作完成 dmarch.ini 和 ARCH_INI 配置;第三种是手动配置,在数据库实例未启动的情况下,手动编写 dmarch.ini 文件和设置参数 ARCH_INI。
3.2 SQL命令联机配置
使用 SQL 语句联机配置本地归档。语法如下:
ALTER DATABASE <ADD|MODIFY|DELETE> ARCH1VELOG <归档配置语句>;
<归档配置语句>::= ‘DEST = <归档目标>,TYPE = <归档类型>‘
<归档类型>::=<local 方式>|<remote 方式>
<local 方式>::=LOCAL [,FILE_SIZE = <文件大小>][,SPACE_LIMIT = <空间大小限制>]
<remote 方 式 >::=REMOTE [,FILE_SIZE = < 文件大小 >][,SPACE_LIMIT = < 空间大小限制>],INCOMING_PATH = <归档存放路径>
使用 SQL 语句开启和关闭归档模式。语法如下:
ALTER DATABASE ARCH1VELOG | NOARCH1VELOG;
命令行联机归档配置步骤参考如下。
以SYSDBA用户登录达梦数据库,进行如下操作:
1)修改数据库为 MOUNT 状态。
SQL>ALTER DATABASE MOUNT;
2)配置本地归档。
SQL>ALTER DATABASE ADD ARCH1VELOG ‘DEST = /usr/appsoft/dmdbms/arch, TYPE = local, FILE_SIZE = 1024, SPACE_LIMIT = 2048‘;
3)开启归档模式。
SQL>ALTER DATABASE ARCH1VELOG;
4)修改数据库为 OPEN 状态。
SQL>ALTER DATABASE OPEN;
操作完成后,使用如下语句确认数据库是否为归档模式。
SQL>select arch_mode from v$database;
1、首先运行“DM管理工具”,使用SYSDBA的账号和密码登录需要操作的数据库和服务器,在打开的主界面上选择对应数据库右击选择“管理服务器”,选择“系统管理”,在状态切换中选择“配置”,点击【转换】,等待后提示“转换状态成功”,此时数据库切换为mount状态。
2、在管理服务器页面选择“归档配置”,在归档模式中选择“归档”,点击右侧绿色加号,配置归档目录和归档类型,文件大小等,这里以配置本地归档LOCAL方式为例。
3、配置归档路径完成之后,重新选择“系统管理”,在状态转换中选择“打开”,点击“转换”按钮,等候片刻提示转换状态成功。此时,数据库已正常打开。
以上两种方式,不管是命令行方式还是客户端修改配置,最终后台都是操作配置文件。我们也可以直接手工修改dmarch.ini 配置文件和设置参数ARCH_INI(ARCH_INI参数在dm.ini文件中修改)。dm.ini参数文件是数据库启动的重要文件,手工修改需慎重,建议修改前备份,避免误操作导致数据库无法正常启动。
手工配置归档方式参考如下;
1、手动编辑 dmarch.ini 文件,文件内容参考如下,编辑成功后保存至 dm.ini 所在的目录。
[ARCH1VE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /usr/appsoft/dmdbms/arch
ARCH_FILE_SIZE = 1024 #单位 Mb
ARCH_SPACE_LIMIT = 2048 #单位 Mb,0 表示无限制,范围 1024~4294967294M
2、编辑 dm.ini 文件,设置参数 ARCH_INI=1,保存。
3、重新启动数据库实例,启动完成后,使用如下语句查询数据库是否为归档模式。
select arch_mode from v$database;
开启归档后,归档配置及归档日志相关信息可通过数据字典查询,这里介绍常用归档信息相关数据字典。
V$ARCH1VED_LOG
V$ARCH1VED_LOG显示当前实例的所有归档日志文件信息。此动态视图与 Oracle 兼容,下表中未列出的列 DM 暂不支持,查询时均显示 NULL。
如下语句查询本地归档日志文件信息:
SELECT NAME , FIRST_TIME , NEXT_TIME , FIRST_CHANGE# , NEXT_CHANGE# FROM V$ARCH1VED_LOG;
V$DM_ARCH_INI
v$dm_arch_ini动态视图用来存放归档路径等相关配置信息。
DM数据库归档信息数据字典还有
V$ARCH_FILE,
V$ARCH_QUEUE,
V$ARCH_SEND_INFO,
V$ARCH_STATUS,
V$BACKUPSET_ARCH,
V$BACKUPSET_SEARCH_DIRS