注册
DM实时主备环境部署学习
专栏/技术分享/ 文章详情 /

DM实时主备环境部署学习

Demons 2026/10/10 182 0 0
摘要

1.环境说明
配置项 主库 (DBSERVER1) 备库 (DBSERVER2)
业务 192.168.73.100 192.168.73.101
MAL IP 192.168.73.110 192.168.73.111
实例名 DBSERVER1 DBSERVER2
实例端口 (PORT_NUM) 5237 5237
MAL 端口 (MAL_PORT) 5337 5337
守护进程端口 (MAL_DW_PORT) 5437 5437
实例守护端口 (MAL_INST_DW_PORT) 5537 5537
OGUID 45331 45331
安装目录 /home/dmdba/dmdbms /home/dmdba/dmdbms
数据目录 /data/dmdata/DMMENG /data/dmdata/DMMENG
归档目录 /dmarch/ /dmarch/
临时文件目录 /data/malpath/ /data/malpath/
2.数据准备-初始化实例
2.1.主库

[dmdba@DW1 ~]$ /home/dmdba/dmdbms/bin/dminit path=/data/dmdata PAGE_SIZE=32 EXTENT_SIZE=32  CASE_SENSITIVE=y  CHARSET=1  DB_NAME=DMMENG  INSTANCE_NAME=DBSERVER1  PORT_NUM=5237  SYSDBA_PWD=Dameng123 SYSAUDITOR_PWD=Dameng123  SYSSSO_PWD=Dameng123

2.2.备库

[dmdba@DW2 ~]$ /home/dmdba/dmdbms/bin/dminit path=/data/dmdata PAGE_SIZE=32 EXTENT_SIZE=32  CASE_SENSITIVE=y  CHARSET=1  DB_NAME=DMMENG  INSTANCE_NAME=DBSERVER2  PORT_NUM=5237  SYSDBA_PWD=Dameng123 SYSAUDITOR_PWD=Dameng123  SYSSSO_PWD=Dameng123

2.3.主库脱机备份
1.正常关闭数据库
2.DMRMAN备份

RMAN> BACKUP DATABASE '/data/dmdata/DMMENG/dm.ini' FULL TO BACKUP_FILE2 BACKUPSET '/dmbak/BACKUP_FIILE_02';

3.拷贝备份文件到备库机器

spc -r /dmbak/BACKUP_FIILE_02 root@192.168.73.101:/dmbak

4.备库脱机还原与恢复

RMAN> RESTORE DATABASE '/data/dmdata/DMMENG/dm.ini' FROM BACKUPSET '/dmbak/BACKUP_FILE2';

脱机备份没有产生任何 REDO 日志,所以恢复这一步此处省略
5.数据库更新

RMAN>  RECOVER DATABASE '/data/dmdata/DMMENG/dm.ini' UPDATE DB_MAGIC;

3.配置主库
3.1.dm.ini配置

[dmdba@DW1 DMMENG] vi /data/dmdata/DMMENG/dm.ini
INSTANCE_NAME = DBSERVER 
PORT_NUM = 5237 				##数据库实例监听端口 
BUFFER=1200					##缓冲区大小
DW_INACTIVE_INTERVAL = 60 		##接收守护进程消息超时时间 
ALTER_MODE_STATUS = 0 			##不允许手工方式修改实例模式/状态/
ENABLE_OFFLINE_TS = 2 			##不允许备库OFFLINE表空间 
MAL_INI = 1 					##打开MAL系统 
ARCH_INI = 1 					##打开归档配置 
RLOG_SEND_APPLY_MON = 64 		##统计最近64次的日志发送信息

HAGR_BUF_GLOBAL_SIZE= 200
HAGR_BUF_SIZE = 200
HJ_BUF_GLOBAL_SIZE = 200
HJ_BUF_SIZE = 200
MEMORY_TARGET = 0

3.2.dmmal.ini配置

[dmdba@DW1 DMMENG] vi /data/dmdata/DMMENG/dmmal.ini
MAL_CHECK_INTERVAL         = 5  #MAL链路检测时间间隔
MAL_CONN_FAIL_INTERVAL     = 5  #判定MAL链路断开的时间
MAL_TEMP_PATH              = /data/malpath/  #临时文件目录
[MAL_INST1]
  MAL_INST_NAME    = DBSERVER1  #实例名,和 dm.ini的INSTANCE_NAME一致
  MAL_HOST                 = 192.168.73.110 #MAL系统监听TCP连接的IP地址
  MAL_PORT                 = 5337  #MAL系统监听TCP连接的端口
  MAL_INST_HOST            = 192.168.73.100  #实例的对外服务IP地址
  MAL_INST_PORT    = 5237  #实例对外服务端口,和dm.ini的PORT_NUM一致
  MAL_DW_PORT        = 5437  #实例对应的守护进程监听TCP连接的端口
  MAL_INST_DW_PORT         = 5537  #实例监听守护进程TCP连接的端口
[MAL_INST2]
  MAL_INST_NAME            = DBSERVER2
  MAL_HOST                 = 192.168.73.111
  MAL_PORT                 = 5337
  MAL_INST_HOST            = 192.168.73.101
  MAL_INST_PORT            = 5237
  MAL_DW_PORT              = 5437
  MAL_INST_DW_PORT         = 5537

3.3.dmarch.ini配置

[dmdba@DW1 DMMENG] vi /data/dmdata/DMMENG/dmarch.ini
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME					##实时归档类型
ARCH_DEST = DBSERVER2					##实时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL 						##本地归档类型
ARCH_DEST = /dmarch 					##本地归档文件存放路径
ARCH_FILE_SIZE = 128 					##单位Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 0					##单位Mb,0表示无限制
3.4.dmwatcher.ini守护进程配置
[dmdba@DW1 DMMENG] vi /data/dmdata/DMMENG/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 = /data/dmdata/DMMENG/dm.ini 	##dm.ini配置文件路径
INST_AUTO_RESTART = 1 				##打开实例的自动启动功能
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver	##命令行方式启动
RLOG_SEND_THRESHOLD = 0 			##指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0 			##指定备库重演日志的时间阈值,默认关闭

3.5.启动主库

[root@DW1 ~]# service DmServiceDMMENG start

3.6.设置 OGUID
启动命令行工具 DIsql,登录主库设置 OGUID

[dmdba@DW1 bin]$ disql SYSDBA/Dameng123@localhost:5237
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.修改数据库模式
启动命令行工具 DIsql,登录主库修改数据库为 PRIMARY 模式

[dmdba@DW1 bin]$ disql SYSDBA/Dameng123@localhost:5237
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1); 
SQL>ALTER DATABASE PRIMARY; 
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

4.配置备库
4.1.dm.ini配置

[dmdba@DW2 bin]$ vi /data/dmdata/DMMENG/dm.ini
##实例名,建议使用“组名_守护环境_序号”的命名方式,总长度不能超过16 
PORT_NUM = 5237 							 	##数据库实例监听端口 
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次的日志重演信息

HAGR_BUF_GLOBAL_SIZE= 200
HAGR_BUF_SIZE = 200
HJ_BUF_GLOBAL_SIZE = 200
HJ_BUF_SIZE = 200
MEMORY_TARGET = 0

4.2.配置dmmal.ini

[dmdba@DW2 bin]$ vi /data/dmdata/DMMENG/dmmal.ini
MAL_CHECK_INTERVAL         = 5  #MAL链路检测时间间隔
MAL_CONN_FAIL_INTERVAL     = 5  #判定MAL链路断开的时间
MAL_TEMP_PATH              = /data/malpath/  #临时文件目录
[MAL_INST1]
  MAL_INST_NAME    = DBSERVER1  #实例名,和 dm.ini的INSTANCE_NAME一致
  MAL_HOST                 = 192.168.73.110 #MAL系统监听TCP连接的IP地址
  MAL_PORT                 = 5337  #MAL系统监听TCP连接的端口
  MAL_INST_HOST            = 192.168.73.100  #实例的对外服务IP地址
  MAL_INST_PORT    = 5237  #实例对外服务端口,和dm.ini的PORT_NUM一致
  MAL_DW_PORT        = 5437  #实例对应的守护进程监听TCP连接的端口
  MAL_INST_DW_PORT         = 5537  #实例监听守护进程TCP连接的端口
[MAL_INST2]
  MAL_INST_NAME            = DBSERVER2
  MAL_HOST                 = 192.168.73.111
  MAL_PORT                 = 5337
  MAL_INST_HOST            = 192.168.73.101
  MAL_INST_PORT            = 5237
  MAL_DW_PORT              = 5437
  MAL_INST_DW_PORT         = 5537

4.3. 配置 dmarch.ini

[dmdba@DW2 bin]$ vi /data/dmdata/DMMENG/dmarch.ini
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME 				##实时归档类型
ARCH_DEST = DBSERVER 				##实时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL 					##本地归档类型
ARCH_DEST = /dmarch					##本地归档文件路径
ARCH_FILE_SIZE = 128 					##单位Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 0 					##单位Mb,0表示无限制

4.4.配置 dmwatcher.ini

[dmdba@DW2 bin]$ vi /data/dmdata/DMMENG/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 = /data/dmdata/DMMENG/dm.ini 	##dm.ini配置文件路径
INST_AUTO_RESTART = 1 				##打开实例的自动启动功能
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver	##命令行方式启动
RLOG_SEND_THRESHOLD = 0 			##指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0 			##指定备库重演日志的时间阈值,默认关闭

4.5.启动备库

[dmdba@DW2 bin]$ ./dmserver /data/dmdata/DMMENG/dm.ini mount

4.6.设置 OGUID
启动命令行工具 DIsql,登录主库设置 OGUID

[dmdba@DW2 bin]$ disql SYSDBA/Dameng123@localhost:5237
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);

4.7.修改数据库模式

SQL> ALTER DATABASE MOUNT;
SQL> SELECT STATUS$,MODE$,NAME,INSTANCE_NAME FROM V$INSTANCE;   #查看当前模式

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步

5.配置单实例监视器
5.1.dmmonitor.ini

[dmdba@DWM bin]$ /home/dmdba/dmdbms/bin/dmmonitor.ini
MON_DW_CONFIRM = 1                    ##确认监视器模式
MON_LOG_PATH = /data/dmdata/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.73.110:5437
MON_DW_IP = 192.168.73.111:5437

6.启动主备库的守护进程
#注册主库守护进程#

[root@DW1 ~]# /home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /data/dmdata/DMMENG/dmwatcher.ini

[root@DW1 ~]# service DmWatcherServiceWatcher start

#注册备库守护进程#
[root@DW2 ~]# /home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /data/dmdata/DMMENG/dmwatcher.ini

[root@DW2 ~]# service DmWatcherServiceWatcher start

7.启动监视器

[dmdba@DWM bin]$ dmmonitor dmmonitor.ini

查看CLSN、FLSN、IMODE字段参数信息是否正确一致,数据库状态是否正常
8.数据同步测试验证
主库写入数据

[dmdba@DW1 ~]$ /home/dmdba/dmdbms/bin/disql SYSDBA/Dameng123@localhost:5237
SQL> create table T1 (id int);
SQL> insert into T1 values(1);
SQL> select * from T1;

image.png
备库查看数据

SQL> select * from T1;

主库事务提交,备库查询数据与主库一致,验证主备数据同步正常
image.png
9.模拟主库故障与恢复-自动切换
9.1.模拟主库故障
模拟环境DW2是主库,避免守护进程自动重启实例,先停止守护进程,再停止数据库
停止守护进程

[root@DW2 ~]# service DmWatcherServiceWatcher stop
[root@DW2 ~]# kill -9 dmserver

由于dmwatcher.ini内参数DW_ERROR_TIME 设置为 10,故监视器认定远程守护进程消息故障守护进程状态为ERROR
image.png
观察实例状态
image.png
停止主库后,观察监视器备库的状态,INST_ERROR_TIME设置为10,在这个时间主库已被认定为故障,切换备库为主库
image.png
9.2.重新拉起守护进程
观察监视器主备库的状态变化,旧主库已切换为新备库

[root@DW2 ~]# service DmWatcherServiceWatcher start

image.png
新备库已拉起,模拟主库故障与恢复完成
image.png

https://eco.dameng.com

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服