注册
DM备份恢复和主备集群操作
专栏/培训园地/ 文章详情 /

DM备份恢复和主备集群操作

不忧 2026/09/18 68 0 0
摘要

本文记录DM备份恢复几种实现方式和主备集群搭建步骤以及遇到的FAQ问题解决记录

一、备份恢复
1、配置归档
方式1:修改参数

图片.png
重启生效

图片.png

方式2:SQL命令
联机配置归档的步骤如下:
1.修改数据库为 MOUNT 状态 NORMAL 模式,并开启归档模式;
2.增加、修改或删除归档;
3.修改数据库为 OPEN 状态。

例 进行配置归档相关操作


ALTER DATABASE MOUNT;

ALTER DATABASE NORMAL;

ALTER DATABASE ARCHIVELOG;

//配置本地归档

ALTER DATABASE ADD ARCHIVELOG 'DEST = /dmdata/dameng/arch_dsc0, TYPE = local, FILE_SIZE = 1024,SPACE_LIMIT = 2048,ARCH_FLUSH_BUF_SIZE=16,HANG_FLAG=1';

//配置远程归档(DMDSC环境下配置)

ALTER DATABASE ADD ARCHIVELOG 'DEST = DSC1, TYPE = REMOTE, INCOMING_PATH = /dmdata/dameng/arch_dsc1';

//修改数据库为OPEN状态

ALTER DATABASE OPEN;

3、备份
例 1 指定备份集路径为“/home/dm_bak/db_bak_3_01”。
BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_01';
图片.png
例 2 数据库名称为 DAMENG,在 2023 年 11 月 13 日执行一次数据库备份,指定备份集格式串为“/home/dm_bak/%R_%d_%T”。
BACKUP DATABASE FORMAT '/home/dm_bak/%R_%d_%T';
例 3 创建备份集,备份名设置为“WEEKLY_FULL_BAK”。
BACKUP DATABASE TO WEEKLY_FULL_BAK BACKUPSET '/home/dm_bak/db_bak_3_02';
例 4 创建备份为备份集添加描述信息为“完全备份”。
BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_04' BACKUPINFO '完全备份';
例 5 创建备份限制备份片大小为 300MB。
BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_05' MAXPIECESIZE 300;
例 6 执行备份压缩,压缩级别设置为 5。
BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_06' COMPRESSED LEVEL 5;
例 7 创建并行备份,指定并行数为 8。
BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_07' PARALLEL 8;

4、函数管理备份
图片.png
管理备份一个重要的目的是删除不再需要的备份,DM 没有提供自动删除过期备份的功能,删除备份需要手动执行。
备份管理相关系统过程与函数总结如下:
SF_BAKSET_BACKUP_DIR_ADD:添加备份目录。
SF_BAKSET_BACKUP_DIR_REMOVE:删除内存中指定的备份目录。
SF_BAKSET_BACKUP_DIR_REMOVE_ALL:删除内存中全部的备份目录。
SF_BAKSET_CHECK:对备份集进行校验。
SF_BAKSET_REMOVE:删除指定设备类型和指定备份集目录的备份集。
SF_BAKSET_REMOVE_BATCH:批量删除满足指定条件的所有备份集。
SP_DB_BAKSET_REMOVE_BATCH:批量删除指定时间之前的数据库备份集。
SP_TS_BAKSET_REMOVE_BATCH:批量删除指定表空间对象及指定时间之前的表空间备份集。
SP_TAB_BAKSET_REMOVE_BATCH:批量删除指定表对象及指定时间之前的表备份集。
SP_ARCH_BAKSET_REMOVE_BATCH:批量删除指定条件的归档备份集。
备份管理相关动态视图总结如下:
V$BACKUPSET:显示备份集基本信息。
V$BACKUPSET_DBINFO:显示备份集的数据库相关信息。
V$BACKUPSET_DBF:显示备份集中数据文件的相关信息。
V$BACKUPSET_ARCH:显示备份集的归档信息。
V$BACKUPSET_BKP:显示备份集的备份片信息。
V$BACKUPSET_SEARCH_DIRS:显示备份集搜索目录。
V$BACKUPSET_TABLE:显示表备份集中备份表信息。
V$BACKUPSET_SUBS:显示并行备份中生成的子备份集信息。
V$BACKUP_MONITOR:显示当前备份任务实时监控信息。
V$BACKUP_HISTORY:显示最近 100 条备份监控信息。
V$BACKUP_FILES:显示当前备份任务待备份数据文件列表。

5、脱机备份
DMRMAN(DM RECOVERY MANAGER)是 DM 的脱机备份还原管理工具,由它来统一负责库级脱机备份、脱机还原、脱机恢复等相关操作,该工具支持命令行指定参数方式和控制台交互方式执行,降低了用户的操作难度。
通过 DMRMAN 工具执行脱机操作过程中,仅会使用通过关键字 DATABASE 指定的目标库的本地归档配置信息,不会对本地归档配置文件中其他类型归档配置信息进行校验。例如:DATABASE 指定目标库为/opt/dmdbms/data/dm.ini,为单机环境且配置参数 ARCH_INI 为 1,那么只会相应的读取 dmarch.ini 中本地归档日志信息。此时,即使 dmarch.ini 中配置了 REALTIME、MARCH、TIMELY 等其他类型的归档日志,也不会去校验 dmmal.ini、dmtimer.ini 等是否有效。
BACKUP ARCHIVE LOG DATABASE '/opt/dmdbms/data/DAMENG/dm.ini';
图片.png
6、新初始化实例
./dminit path=/opt/dmdbms/data db_name=DAMENG_FOR_RESTORE sysdba_pwd=DMdba_123 sysauditor_pwd=DMauditor_123
注意端口和instance_name不重复
重复可修改dm.ini,并./DmServer.... restart 生效

图片.png

7、检验
校验备份,校验待还原备份集的合法性。校验备份有两种方式,联机和脱机,此处使用脱机校验;

图片.png

8、恢复
可以直接指定还原目标库的 dm.ini 进行数据库还原,如下所示:

图片.png

9、验证

图片.png

二、DW主备测试步骤

1、数据准备
配置归档通过备份恢复,准备数据环境。

2、配置主库 GRP1_RT_01(dmmal、dmwatch、dmmonitor等配置文件手动建立)
2.1 配置 dm.ini

##实例名,建议使用“组名_守护环境_序号”的命名方式,总长度不能超过16

INSTANCE_NAME = GRP1_RT_01

PORT_NUM = 32141 ##数据库实例监听端口

DW_INACTIVE_INTERVAL = 60 ##接收守护进程消息超时时间

ALTER_MODE_STATUS = 0 ##不允许手工方式修改实例模式/状态/OGUID

ENABLE_OFFLINE_TS = 2 ##不允许备库OFFLINE表空间

MAL_INI = 1 ##打开MAL系统

ARCH_INI = 1 ##打开归档配置

RLOG_SEND_APPLY_MON = 64 ##统计最近64次的日志发送信息

2.2 配置 dmmal.ini

MAL_CHECK_INTERVAL = 5 				##MAL链路检测时间间隔

MAL_CONN_FAIL_INTERVAL = 5 			##判定MAL链路断开的时间

[MAL_INST1]

	MAL_INST_NAME = GRP1_RT_01 		##实例名,和dm.ini中的INSTANCE_NAME一致

	MAL_HOST = 192.168.0.141 		##MAL系统监听TCP连接的IP地址

	MAL_PORT = 61141 				##MAL系统监听TCP连接的端口

	MAL_INST_HOST = 192.168.1.131	##实例的对外服务IP地址

	MAL_INST_PORT = 32141 			##实例的对外服务端口,和dm.ini中的PORT_NUM一致

	MAL_DW_PORT = 52141 			##实例本地的守护进程监听TCP连接的端口

	MAL_INST_DW_PORT = 33141 		##实例监听守护进程TCP连接的端口

[MAL_INST2]

	MAL_INST_NAME = GRP1_RT_02

	MAL_HOST = 192.168.0.142

	MAL_PORT = 61142

	MAL_INST_HOST = 192.168.1.132

	MAL_INST_PORT = 32142

	MAL_DW_PORT = 52142

	MAL_INST_DW_PORT = 33142

2.3 配置 dmarch.ini

[ARCHIVE_REALTIME]

ARCH_TYPE = REALTIME 				##实时归档类型

ARCH_DEST = GRP1_RT_02 				##实时归档目标实例名

[ARCHIVE_LOCAL1]

ARCH_TYPE = LOCAL 					##本地归档类型

ARCH_DEST = /dm/data/DAMENG/arch 	##本地归档文件存放路径

ARCH_FILE_SIZE = 128 				##单位Mb,本地单个归档文件最大值

ARCH_SPACE_LIMIT = 0				##单位Mb,0表示无限制,范围1024~2147483647M

2.4 配置 dmwatcher.ini

[GRP1]

DW_TYPE = GLOBAL 					##全局守护类型

DW_MODE = AUTO 						##自动切换模式

DW_ERROR_TIME = 10 					##远程守护进程故障认定时间

INST_RECOVER_TIME = 60 				##主库守护进程启动恢复的间隔时间

INST_ERROR_TIME = 10 				##本地实例故障认定时间

INST_OGUID = 453331 				##守护系统唯一OGUID值

INST_INI = /dm/data/DAMENG/dm.ini 	##dm.ini配置文件路径

INST_AUTO_RESTART = 1 				##打开实例的自动启动功能

INST_STARTUP_CMD = /dm/bin/dmserver	##命令行方式启动

RLOG_SEND_THRESHOLD = 0 			##指定主库发送日志到备库的时间阈值,默认关闭

RLOG_APPLY_THRESHOLD = 0 			##指定备库重演日志的时间阈值,默认关闭

2.5、启动主库
以 Mount 方式启动主库

./dmserver /dm/data/DAMENG/dm.ini mount

注意事项:一定要以Mount方式启动数据库实例,否则系统启动时会重构回滚表空间,生成Redo日志;并且,启动后应用可能连接到数据库实例进行操作,破坏主备库的数据一致性。数据守护配置结束后,守护进程会自动Open数据库。

2.6、设置 OGUID
启动命令行工具 DIsql,登录主库设置 OGUID 值。

SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);

SQL>sp_set_oguid(453331);

SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

注意:系统通过OGUID值确定一个守护进程组,由用户保证OGUID值的唯一性,并确保数据守护系统中,数据库、守护进程和监视器配置相同的OGUID值。

2.7、修改数据库模式
启动命令行工具 DIsql,登录主库修改数据库为 PRIMARY 模式

SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>ALTER DATABASE PRIMARY;
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

3、配置备库 GRP1_RT_02
3.1 配置 dm.ini
在 DW_S1 机器上配置备库的实例名为 GRP1_RT_02,dm.ini 参数修改如下:

##实例名,建议使用“组名_守护环境_序号”的命名方式,总长度不能超过16

INSTANCE_NAME = GRP1_RT_02

PORT_NUM = 32142 				##数据库实例监听端口

DW_INACTIVE_INTERVAL = 60		##接收守护进程消息超时时间

ALTER_MODE_STATUS = 0 			##不允许手工方式修改实例模式/状态/OGUID

ENABLE_OFFLINE_TS = 2 			##不允许备库OFFLINE表空间

MAL_INI = 1 					##打开MAL系统

ARCH_INI = 1					##打开归档配置

RLOG_SEND_APPLY_MON = 64		##统计最近64次的日志重演信息

3.2 配置 dmmal.ini
配置 MAL 系统,各主备库的 dmmal.ini 配置必须完全一致,MAL_HOST 使用内部网络 IP,MAL_PORT 与 dm.ini 中 PORT_NUM 使用不同的端口值,MAL_DW_PORT 是各实例对应的守护进程之间,以及守护进程和监视器之间的通信端口,配置如下:

MAL_CHECK_INTERVAL = 5 				##MAL链路检测时间间隔

MAL_CONN_FAIL_INTERVAL = 5 			##判定MAL链路断开的时间

[MAL_INST1]

	MAL_INST_NAME = GRP1_RT_01 		##实例名,和dm.ini中的INSTANCE_NAME一致

	MAL_HOST = 192.168.0.141 		##MAL系统监听TCP连接的IP地址

	MAL_PORT = 61141 				##MAL系统监听TCP连接的端口

	MAL_INST_HOST = 192.168.1.131 	##实例的对外服务IP地址

	MAL_INST_PORT = 32141 			##实例的对外服务端口,和dm.ini中的PORT_NUM一致

	MAL_DW_PORT = 52141 			##实例对应的守护进程监听TCP连接的端口

	MAL_INST_DW_PORT = 33141 		##实例监听守护进程TCP连接的端口

[MAL_INST2]

	MAL_INST_NAME = GRP1_RT_02

	MAL_HOST = 192.168.0.142

	MAL_PORT = 61142

	MAL_INST_HOST = 192.168.1.132

	MAL_INST_PORT = 32142

	MAL_DW_PORT = 52142

	MAL_INST_DW_PORT = 33142

3.3 配置 dmarch.ini

[ARCHIVE_REALTIME]

	ARCH_TYPE = REALTIME 				##实时归档类型

	ARCH_DEST = GRP1_RT_01 				##实时归档目标实例名

[ARCHIVE_LOCAL1]

	ARCH_TYPE = LOCAL 					##本地归档类型

	ARCH_DEST = /dm/data/DAMENG/arch	##本地归档文件路径

	ARCH_FILE_SIZE = 128 				##单位Mb,本地单个归档文件最大值

	ARCH_SPACE_LIMIT = 0 				##单位Mb,0表示无限制,范围1024~2147483647M

3.4 修改 dmwatcher.ini 配置守护进程,配置为全局守护类型,使用自动切换模式。

[GRP1]

	DW_TYPE = GLOBAL 				##全局守护类型

	DW_MODE = AUTO 					##自动切换模式

	DW_ERROR_TIME = 10 				##远程守护进程故障认定时间

	INST_RECOVER_TIME = 60 			##主库守护进程启动恢复的间隔时间

	INST_ERROR_TIME = 10			##本地实例故障认定时间

	INST_OGUID = 453331 			##守护系统唯一OGUID值

	INST_INI = /dm/data/DAMENG/dm.ini##dm.ini配置文件路径

	INST_AUTO_RESTART = 1 			##打开实例的自动启动功能

	INST_STARTUP_CMD = /dm/bin/dmserver ##命令行方式启动

	RLOG_APPLY_THRESHOLD = 0 		##指定备库重演日志的时间阈值,默认关闭

3.5 启动备库
以 Mount 方式启动备库

./dmserver /dm/data/DAMENG/dm.ini mount

3.6 设置 OGUID
启动命令行工具 DIsql,登录备库设置 OGUID 值为 453331

SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);

SQL>sp_set_oguid(453331);

SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

3.7 修改数据库模式
如果当前数据库不是 Normal 模式,需要先修改 dm.ini 中 ALTER_MODE_STATUS 值为 1,允许修改数据库模式,修改 STANDBY 模式成功后再改回为 0。如果是 Normal 模式,请忽略下面的第 1 步和第 3 步。

SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1); 	//第1步
SQL>alter database standby; 						//第2步
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0); 	//第3步

4、配置监视器
4.1 配置单实例监视器
修改 dmmonitor.ini 配置确认监视器,其中 MON_DW_IP 中的 IP 和 PORT 和 dmmal.ini 中的 MAL_HOST 和 MAL_DW_PORT 配置项保持一致。

MON_DW_CONFIRM = 1 			##确认监视器模式

MON_LOG_PATH = /dm/data/log ##监视器日志文件存放路径

MON_LOG_INTERVAL = 60 		##每隔60s定时记录系统信息到日志文件

MON_LOG_FILE_SIZE = 32 		##每个日志文件最大32M

MON_LOG_SPACE_LIMIT = 0 	##不限定日志文件总占用空间

[GRP1]

	MON_INST_OGUID = 453331 ##组GRP1的唯一OGUID值

##以下配置为监视器到组GRP1的守护进程的连接信息,以“IP:PORT”的形式配置

##IP对应dmmal.ini中的MAL_HOST,PORT对应dmmal.ini中的MAL_DW_PORT

	MON_DW_IP = 192.168.0.141:52141

	MON_DW_IP = 192.168.0.142:52142

4.2 配置多实例监视器
各实例的 MON_ID 应与某一个实例配置项中的 MON_INST_ID 相同,各实例的 MON_NAME 与对应的监视器实例名相同。dmmonitor.ini 配置文件中的内容如下:

MON_LOG_PATH        	= /dm/data/log
MON_LOG_INTERVAL      	= 60
MON_LOG_FILE_SIZE      	= 32
MON_LOG_SPACE_LIMIT    	= 0
MON_DW_CONFIRM       	= 1
MON_INST_NUM        	= 3     	#实例总个数
MON_HB_INTERVAL       	= 60     	#通信心跳校验间隔
MON_BRO_INTERVAL      	= 100    	#raft协议中实例通信心跳间隔
MON_VOTE_INTERVAL      	= 100    	#raft协议中基础投票间隔
MON_ID           		= 1      	#当前监视器在监视器系统中的ID
MON_MID           		= 45614   	#当前监视器系统的唯一标识
MON_NAME				= MON1  #监视器名

[GRP1]
MON_INST_OGUID      = 453331
MON_DW_IP          	= 192.168.0.141:52141
MON_DW_IP          	= 192.168.0.142:52142

[MON1] #监视器实例信息
MON_HOST              	= 192.168.0.143 		#MON1监视器所在IP 
MON_PORT              	= 8339 					#MON1监视器监听端口
MON_INST_ID				= 1 					#监视器实例在监视器系统中的ID
MON_VOTE_PRIORITY		= 3						#监视器实例成为LEADER的优先级

[MON2]
MON_HOST              	= 192.168.0.144 		#MON2监视器所在IP 
MON_PORT              	= 8340 					#MON2监视器监听端口
MON_INST_ID				= 2 					#监视器实例在监视器系统中的ID
MON_VOTE_PRIORITY		= 2						#监视器实例成为LEADER的优先级

[MON3]
MON_HOST              	= 192.168.0.145 		#MON3监视器所在IP 
MON_PORT              	= 8341 					#MON3监视器监听端口
MON_INST_ID				= 3 					#监视器实例在监视器系统中的ID
MON_VOTE_PRIORITY		= 1						#监视器实例成为LEADER的优先级

5、启动守护进程
启动各个主备库上的守护进程:

./dmwatcher /dm/data/DAMENG/dmwatcher.ini

守护进程启动后,进入 Startup 状态,此时实例都处于 Mount 状态。守护进程开始广播自身和其监控实例的状态信息,结合自身信息和远程守护进程的广播信息,守护进程将本地实例 Open,并切换为 Open 状态。

6、启动监视器
启动监视器命令:

./dmmonitor /dm/data/dmmonitor.ini

执行show,查看主备状态信息

三、主备FAQ记录
1、主备搭建完成,监视器查看备机并未纳入

图片.png

1.1、启动监视器查看
判断集群监视器只识别到【主机这一个节点】,备库实例完全没有注册进集群,MAL 链路没有建立成功

1.2、检查dmmal、dm、dmwatcher等配置文件是否一致

1.3、主备库查询 v$instance 系统视图, OGUID 、 MODE 、 STATUS 是否正确

1.4、网络连通性检查,发现主机连接备机测异常,最终判断为备机防火墙未关闭导致
nc -zv 192.168.17.130 61142
nc -zv 192.168.17.129 61141

1.5、启动 ./dmmonitor /dm/data/dmmonitor.ini 显示正常

图片.png

2、后台服务已经启动,计划使用前台启动监视器查询状态报错

图片.png

解决方案:
打开dmmonitor.ini文件,修改MON_DW_CONFIRM=0,再重新前台启动
MON_DW_CONFIRM = 1 = 确认监视器(具备自动主备切换投票权) 达梦集群规则:同一个守护集群,同一时刻最多只能运行 1 个确认监视器。
可以备份复制该文件修改为0,专门用于前台登录

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服