实时主备
角色 | 操作系统 | IP | 实例 | Port | DW_Port | Mal_Host | Mal_Port | Mal_DW_Port |
---|---|---|---|---|---|---|---|---|
主库 | Kylin V10 | 192.168.0.102 / 10.0.0.102 | DM1 | 5236 | 5237 | 192.168.0.102 | 5238 | 5239 |
备库 | Kylin V10 | 192.168.0.103 / 10.0.0.103 | DM2 | 5236 | 5237 | 192.168.0.103 | 5238 | 5239 |
监控 | Kylin V10 | 192.168.0.104 |
dminit PATH=/dm/data EXTENT_SIZE=32 PAGE_SIZE=16 CASE_SENSITIVE=Y CHARSET=0 DB_NAME=DMDB INSTANCE_NAME=DM1 PORT_NUM=5236
initdb V8
db version: 0x7000c
file dm.key not found, use default license!
License will expire on 2024-11-08
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
log file path: /dm/data/DMDB/DMDB01.log
log file path: /dm/data/DMDB/DMDB02.log
write to dir [/dm/data/DMDB].
create dm database success. 2024-08-18 12:39:09
使用 root 用户注册服务
/dm/script/root/dm_service_installer.sh -t dmserver -dm_ini /dm/data/DMDB/dm.ini -p DM
Created symlink /etc/systemd/system/multi-user.target.wants/DmServiceDM.service → /usr/lib/systemd/system/DmServiceDM.service.
创建服务(DmServiceDM)完成
启动数据库服务
[dmdba@kylin ~]$ DmServiceDM start
Starting DmServiceDM: [ OK ]
alter database mount ;
alter database add archivelog 'type=local, dest=/dm/dmarch, file_size=200, space_limit=0' ;
alter database archivelog ;
alter database open ;
停止主库
[dmdba@kylin ~]$ DmServiceDM stop
Stopping DmServiceDM: [ OK ]
脱机备份
注意,备份之前要确保 DMAP 是启动的。
dmrman CTLSTMT="backup database '/dm/data/DMDB/dm.ini' backupset '/dm/backup/DM_fuuu_01'"
dmrman V8
backup database '/dm/data/DMDB/dm.ini' backupset '/dm/backup/DM_fuuu_01'
file dm.key not found, use default license!
Database mode = 0, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[40445], file_lsn[40445]
Processing backupset /dm/backup/DM_fuuu_01
[Percent:100.00%][Speed:0.00M/s][Cost:00:00:02][Remaining:00:00:00]
backup successfully!
time used: 00:00:03.659
dminit PATH=/dm/data EXTENT_SIZE=32 PAGE_SIZE=16 CASE_SENSITIVE=Y CHARSET=0 DB_NAME=DMDB INSTANCE_NAME=DM2 PORT_NUM=5236
initdb V8
db version: 0x7000c
file dm.key not found, use default license!
License will expire on 2024-11-08
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
log file path: /dm/data/DMDB/DMDB01.log
log file path: /dm/data/DMDB/DMDB02.log
write to dir [/dm/data/DMDB].
create dm database success. 2024-08-18 23:50:28
以 root 用户注册服务
/dm/script/root/dm_service_installer.sh -t dmserver -dm_ini /dm/data/DMDB/dm.ini -p DM
将主库的备份传输到备库主机
scp -r DM_fuuu_01/ 192.168.0.103:/dm/backup/
dmrman ctlstmt="restore database '/dm/data/DMDB/dm.ini' from backupset '/dm/backup/DM_fuuu_01'"
dmrman V8
restore database '/dm/data/DMDB/dm.ini' from backupset '/dm/backup/DM_fuuu_01'
file dm.key not found, use default license!
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
[Percent:100.00%][Speed:0.00M/s][Cost:00:00:02][Remaining:00:00:00]
restore successfully.
time used: 00:00:02.562
dmrman ctlstmt="recover database '/dm/data/DMDB/dm.ini' from backupset '/dm/backup/DM_fuuu_01'"
dmrman V8
recover database '/dm/data/DMDB/dm.ini' from backupset '/dm/backup/DM_fuuu_01'
file dm.key not found, use default license!
Database mode = 2, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[40445], file_lsn[40445]
recover successfully!
time used: 453.135(ms)
dmrman ctlstmt="recover database '/dm/data/DMDB/dm.ini' update db_magic"
dmrman V8
recover database '/dm/data/DMDB/dm.ini' update db_magic
file dm.key not found, use default license!
Database mode = 2, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[40445], file_lsn[40445]
recover successfully!
time used: 00:00:01.116
数据库恢复完成后,暂不启动。
搭建 4.0 版本的、实时主备的数据守护环境需要配置 4 个参数文件。这里要注意,虽然配置文件相同,但数据守护 4.0 版本的配置参数内容和数据守护 3.0 版本的有一些出入。
分别在 主、备 环境的数据库目录(/dm/data/DMDB)下配置以下 4 个参数文件。
配置数据守护时,需要修改 dm.ini 文件中的以下参数值。这里除了 INSTANCE_NAME 参数是根据不同节点来配置的,其他参数与数据守护主备库节点的配置相同。
主库
INSTANCE_NAME = DM1
PORT_NUM = 5236
DW_INACTIVE_INTERVAL = 60
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
MAL_INI = 1
ARCH_INI = 1
RLOG_SEND_APPLY_MON = 64
备库
INSTANCE_NAME = DM2
PORT_NUM = 5236
DW_INACTIVE_INTERVAL = 60
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
MAL_INI = 1
ARCH_INI = 1
RLOG_SEND_APPLY_MON = 64
dmmal.ini 是 MAL 系统的配置文件,各主备库的 dmmal.ini 配置必须完全一致。默认没有 dmmal.ini 文件,需要单独创建并添加以下内容。
主库、备库配置文件内容到致。
vi dmmal.ini
MAL_CHECK_INTERVAL = 5
MAL_CONN_FAIL_INTERVAL = 5
[MAL_INST1]
MAL_INST_NAME = DM1
MAL_HOST = 192.168.0.102
MAL_PORT = 5238
MAL_INST_HOST = 192.168.0.102
MAL_INST_PORT = 5236
MAL_DW_PORT = 5239
MAL_INST_DW_PORT = 5240
[MAL_INST2]
MAL_INST_NAME = DM2
MAL_HOST = 192.168.0.103
MAL_PORT = 5238
MAL_INST_HOST = 192.168.0.103
MAL_INST_PORT = 5236
MAL_DW_PORT = 5239
MAL_INST_DW_PORT = 5240
在两个主备节点的环境中,数据同步的 ARCH_DEST 互相写对方的实例。比如,当前是 DM1,则对应的 ARCH_DEST 写 DM2。
如果之前已经启用了归档,那么该文件已经存在;如果未启用归档,也需要手工创建文件并添加内容。
主库开启了归档,文件已存在:
$ cat dmarch.ini
#DaMeng Database Archive Configuration file
#this is comments
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dm/dmarch
ARCH_FILE_SIZE = 200
ARCH_SPACE_LIMIT = 0
ARCH_FLUSH_BUF_SIZE = 0
ARCH_HANG_FLAG = 1
修改为:
# ARCH_WAIT_APPLY = 1
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME
ARCH_DEST = DM2
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dm/dmarch
ARCH_FILE_SIZE = 200
ARCH_SPACE_LIMIT = 0
# ARCH_FLUSH_BUF_SIZE = 0
# ARCH_HANG_FLAG = 1
备库
# ARCH_WAIT_APPLY = 1
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME
ARCH_DEST = DM1
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dm/dmarch
ARCH_FILE_SIZE = 200
ARCH_SPACE_LIMIT = 0
# ARCH_FLUSH_BUF_SIZE = 0
# ARCH_HANG_FLAG = 1
守护进程配置文件。
除了异步主备,其他类型的主备必须配置为全局守护类型。
在两个主备节点都创建并添加以下内容:
[GRP1]
DW_TYPE = GLOBAL
DW_MODE = AUTO
DW_ERROR_TIME = 10
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 10
INST_OGUID=10086
INST_INI = /dm/data/DMDB/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /dm/bin/dmserver
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0
将主、备库修改为配置状态。
启动到 mount 状态
[dmdba@dm1 DMDB]$ DmServiceDM start mount
Starting DmServiceDM: [ OK ]
登录数据库,此时处于 "处于普通配置状态"。
修改参数 ALTER_MODE_STATUS
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1) ;
DMSQL 过程已成功完成
设置 OGUID
SQL> SP_SET_OGUID(10086) ;
DMSQL 过程已成功完成
设置为主库
SQL> alter database primary ;
操作已执行
修改参数 ALTER_MODE_STATUS
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0) ;
DMSQL 过程已成功完成
重新登录后,提示 "处于主库配置状态"
$ disql
disql V8
服务器[LOCALHOST:5236]:处于主库配置状态
启动数据库到 mount 状态
[dmdba@dm2 DMDB]$ DmServiceDM start mount
Starting DmServiceDM: [ OK ]
登录数据库,此时处于 "处于普通配置状态"。
修改参数 ALTER_MODE_STATUS
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1) ;
DMSQL 过程已成功完成
设置 OGUID
SQL> SP_SET_OGUID(10086) ;
DMSQL 过程已成功完成
设置为备库
SQL> alter database standby ;
操作已执行
修改参数 ALTER_MODE_STATUS
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0) ;
DMSQL 过程已成功完成
重新登录后,提示 "处于备库配置状态"
[dmdba@dm2 DMDB]$ disql
disql V8
服务器[LOCALHOST:5236]:处于备库配置状态
可以先注册服务,然后直接以服务启动守护进程。
分别在主库、备库注册服务
/dm/script/root/dm_service_installer.sh -t dmwatcher -watcher_ini /dm/data/DMDB/dmwatcher.ini -p DM
Created symlink /etc/systemd/system/multi-user.target.wants/DmWatcherServiceDM.service → /usr/lib/systemd/system/DmWatcherServiceDM.service.
创建服务(DmWatcherServiceDM)完成
以服务启动守护进程:
systemctl start DmWatcherServiceDM.service
systemctl status DmWatcherServiceDM.service
守护进程启动后,会自动将实例由 MOUNT 状态启动到 OPEN 状态。
此时,在新窗口登录主库和备库,分别显示 "处于主库打开状态"、"处于备库打开状态"
主库
[dmdba@dm1 DMDB]$ dmwatcher /dm/data/DMDB/dmwatcher.ini
DMWATCHER[4.0] V8
DMWATCHER[4.0] IS READY
备库
[dmdba@dm2 DMDB]$ dmwatcher /dm/data/DMDB/dmwatcher.ini
DMWATCHER[4.0] V8
DMWATCHER[4.0] IS READY
实际生产环境为了确保数据守护高可用的正常运行,需要独立的服务器来部署监视器,监视器上只需要安装达梦数据库软件。
监视器有两种运行模式:监控模式和确认模式。为了实现自动故障切换,必须配置确认监视器,确认监视器也包含监控模式的功能。可以配置 8 个监视器,但只能有 1 个确认监视器。
将 /dm/data/dmon 作为监视器目录。
mkdir -p /dm/data/dmon/log
创建参数文件 dmmonitor.ini
vi /dm/data/dmon/dmmonitor.ini
MON_DW_CONFIRM = 1
MON_LOG_PATH = /dm/data/dmon/log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 32
MON_LOG_SPACE_LIMIT = 0
[GRP1]
MON_INST_OGUID = 10086
MON_DW_IP = 192.168.0.102:5239
MON_DW_IP = 192.168.0.103:5239
启动确认监视器:
[dmdba@dmmonitor dmon]$ dmmonitor /dm/data/dmon/dmmonitor.ini
[monitor] 2024-08-19 02:32:46: DMMONITOR[4.0] V8
[monitor] 2024-08-19 02:32:47: DMMONITOR[4.0] IS READY.
[monitor] 2024-08-19 02:32:47:
#--------------------------------------------------------------------------------#
GET MONITOR CONNECT INFO FROM DMWATCHER(DM1), THE FIRST LINE IS SELF INFO.
DW_CONN_TIME MON_CONFIRM MID MON_IP MON_VERSION
2024-08-19 02:32:47 TRUE 1224653305 ::ffff:192.168.0.104 DMMONITOR[4.0] V8
#--------------------------------------------------------------------------------#
[monitor] 2024-08-19 02:32:47: 收到守护进程(DM1)消息
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2024-08-19 02:32:47 OPEN OK DM1 OPEN PRIMARY VALID 2 40689 40689
[monitor] 2024-08-19 02:32:47: 收到守护进程(DM2)消息
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2024-08-19 02:32:48 OPEN OK DM2 OPEN STANDBY VALID 2 40689 40689
此时,监视器是在前台启动,在当前窗口中,可以执行监视器的监控和管理命令。
可以输入 help 查看帮助:
#=======================================================================================================#
help
达梦守护监视器当前支持以下命令:
用法说明:
命令中的[group_name]和[db_name],在组名或库名不唯一的情况下,需要指定名称,组名和库名之间用'.'分隔.
对于show monitor命令,如果db_name未指定,则按照监视器ini的配置顺序,使用组中第一个活动的守护进程获取连接信息,
#=======================================================================================================#
#-----------------------------------系统全局命令---------------------------------------------------------#
1.help --显示帮助信息
2.exit --退出监视器
3.show version --显示监视器自身版本信息
4.show global info --显示所有组的全局信息
5.show database [group_name.]db_name --显示指定库的详细信息
6.show [group_name] --显示指定组的详细信息,如果未指定组名,则显示所有组的详细信息
7.show i[nterval] n --每隔n秒自动显示所有组的详细信息
8.q --取消自动显示
9.list [[group_name.]db_name] --列出指定组的库对应的守护进程配置信息,如果都未指定,则列出所有守护进程配置信息
10.show open info [group_name.]db_name --显示指定库的OPEN历史信息
11.show arch send info [group_name.]db_name --查看源库到指定组的指定库的归档同步信息(包含恢复间隔信息)
12.show apply stat [group_name.]db_name --查看指定组的指定库的日志重演信息
13.show monitor [group_name[.]] [db_name] --列出连接到指定守护进程的所有监视器信息
14.show state --显示当前监视器所在监视器配置组的所有监视器的状态信息
......
show 命令:
#================================================================================#
show
2024-08-19 02:40:02
#================================================================================#
GROUP OGUID MON_CONFIRM MODE MPP_FLAG
GRP1 10086 TRUE AUTO FALSE
<<DATABASE GLOBAL INFO:>>
DW_IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT
192.168.0.102 5239 2024-08-19 02:40:01 GLOBAL VALID OPEN DM1 OK 1 1 OPEN PRIMARY DSC_OPEN REALTIME VALID
EP INFO:
INST_IP INST_PORT INST_OK INAME ISTATUS IMODE DSC_SEQNO DSC_CTL_NODE RTYPE RSTAT FSEQ FLSN CSEQ CLSN DW_STAT_FLAG
192.168.0.102 5236 OK DM1 OPEN PRIMARY 0 0 REALTIME VALID 4840 40689 4840 40689 NONE
<<DATABASE GLOBAL INFO:>>
DW_IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT
192.168.0.103 5239 2024-08-19 02:40:02 GLOBAL VALID OPEN DM2 OK 1 1 OPEN STANDBY DSC_OPEN REALTIME VALID
EP INFO:
INST_IP INST_PORT INST_OK INAME ISTATUS IMODE DSC_SEQNO DSC_CTL_NODE RTYPE RSTAT FSEQ FLSN CSEQ CLSN DW_STAT_FLAG
192.168.0.103 5236 OK DM2 OPEN STANDBY 0 0 REALTIME VALID 4840 40689 4840 40689 NONE
DATABASE(DM2) APPLY INFO FROM (DM1), REDOS_PARALLEL_NUM (1), WAIT_APPLY[FALSE]:
DSC_SEQNO[0], (RSEQ, SSEQ, KSEQ)[4840, 4840, 4840], (RLSN, SLSN, KLSN)[40689, 40689, 40689], N_TSK[0], TSK_MEM_USE[0]
REDO_LSN_ARR: (40689)
#================================================================================#
在监视器主机,以 root 用户注册服务。
/dm/script/root/dm_service_installer.sh -t dmmonitor -monitor_ini /dm/data/dmon/dmmonitor.ini -p DM
Created symlink /etc/systemd/system/multi-user.target.wants/DmMonitorServiceDM.service → /usr/lib/systemd/system/DmMonitorServiceDM.service.
创建服务(DmMonitorServiceDM)完成
启动监视器服务
systemctl start DmMonitorServiceDM.service
systemctl status DmMonitorServiceDM.service
● DmMonitorServiceDM.service - DM Data Watch Monitor Service(DmMonitorServiceDM).
Loaded: loaded (/usr/lib/systemd/system/DmMonitorServiceDM.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2024-08-19 03:19:31 CST; 4s ago
Process: 18560 ExecStart=/dm/bin/DmMonitorServiceDM start (code=exited, status=0/SUCCESS)
Main PID: 18583 (dmmonitor)
Tasks: 12
Memory: 21.5M
CGroup: /system.slice/DmMonitorServiceDM.service
└─18583 /dm/bin/dmmonitor path=/dm/data/dmon/dmmonitor.ini
Aug 19 03:19:16 dmmonitor systemd[1]: Starting DM Data Watch Monitor Service(DmMonitorServiceDM)....
Aug 19 03:19:31 dmmonitor DmMonitorServiceDM[18560]: [40B blob data]
Aug 19 03:19:31 dmmonitor systemd[1]: Started DM Data Watch Monitor Service(DmMonitorServiceDM)..
在4.0版本的数据守护监视器中存在一个问题,就是监视器的监控命令和管理命令只能在前台启动的监视器中执行,后台启动的监视器不能输入命令。如果只配置一个确认监视器,以前台方式启动,那么启动的命令窗口就不能关闭,并且可能会影响故障自动切换。另外,对于这种前台启动方式,人为误操作关闭监视器进程的可能性较大。
为了解决这个问题,可以配置两个监视器:确认监视器和普通监视器。确认监视器注册为服务,放置在后台自动启动,确保确认监视器一直处于工作状态,从而保证数据守护的高可用。普通监视器不需要注册成服务,只在需要时进行手工启动,执行完命令后可以关闭也可以不关闭。
编辑 dmmonitor0.ini 配置文件,供普通监视器使用:
vi /dm/data/dmon/dmmonitor0.ini
MON_DW_CONFIRM = 0
MON_LOG_PATH = /dm/data/dmon/log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 32
MON_LOG_SPACE_LIMIT = 0
[GRP1]
MON_INST_OGUID = 10086
MON_DW_IP = 192.168.0.102:5239
MON_DW_IP = 192.168.0.103:5239
启动普通监视器查看和执行管理命令,其启动与否不会影响到数据守护的运行。
[dmdba@dmmonitor dmon]$ dmmonitor /dm/data/dmon/dmmonitor0.ini
[monitor] 2024-08-19 03:27:40: DMMONITOR[4.0] V8
[monitor] 2024-08-19 03:27:41: DMMONITOR[4.0] IS READY.
[monitor] 2024-08-19 03:27:41:
#--------------------------------------------------------------------------------#
GET MONITOR CONNECT INFO FROM DMWATCHER(DM1), THE FIRST LINE IS SELF INFO.
DW_CONN_TIME MON_CONFIRM MID MON_IP MON_VERSION
2024-08-19 03:27:41 FALSE 1608479132 ::ffff:192.168.0.104 DMMONITOR[4.0] V8
2024-08-19 03:24:39 TRUE 105286110 ::ffff:192.168.0.104 DMMONITOR[4.0] V8
#--------------------------------------------------------------------------------#
[monitor] 2024-08-19 03:27:41: 收到守护进程(DM1)消息
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2024-08-19 03:27:41 OPEN OK DM1 OPEN PRIMARY VALID 4 41152 41152
[monitor] 2024-08-19 03:27:41: 收到守护进程(DM2)消息
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2024-08-19 03:27:42 OPEN OK DM2 OPEN STANDBY VALID 4 41152 41152
在监视器中使用 switchover 命令切换主备角色。
switchover
[monitor] 2024-08-19 02:50:41: 未登录监视器或服务器公钥发生变化,请重新登录!
login
用户名:
密码:
[monitor] 2024-08-19 02:50:49: 登录监视器成功!
switchover
[monitor] 2024-08-19 02:50:58: 开始切换实例DM2
[monitor] 2024-08-19 02:50:58: 通知守护进程DM1切换SWITCHOVER状态
[monitor] 2024-08-19 02:50:58: 守护进程(DM1)状态切换 [OPEN-->SWITCHOVER]
[monitor] 2024-08-19 02:50:59: 切换守护进程DM1为SWITCHOVER状态成功
[monitor] 2024-08-19 02:50:59: 通知守护进程DM2切换SWITCHOVER状态
[monitor] 2024-08-19 02:50:59: 守护进程(DM2)状态切换 [OPEN-->SWITCHOVER]
[monitor] 2024-08-19 02:51:00: 切换守护进程DM2为SWITCHOVER状态成功
[monitor] 2024-08-19 02:51:00: 实例DM1开始执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句
[monitor] 2024-08-19 02:51:01: 实例DM1执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句成功
[monitor] 2024-08-19 02:51:01: 实例DM2开始执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句
[monitor] 2024-08-19 02:51:01: 实例DM2执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句成功
[monitor] 2024-08-19 02:51:01: 实例DM1开始执行ALTER DATABASE MOUNT语句
[monitor] 2024-08-19 02:51:01: 实例DM1执行ALTER DATABASE MOUNT语句成功
[monitor] 2024-08-19 02:51:01: 实例DM2开始执行SP_APPLY_KEEP_PKG()语句
[monitor] 2024-08-19 02:51:01: 实例DM2执行SP_APPLY_KEEP_PKG()语句成功
[monitor] 2024-08-19 02:51:01: 实例DM2开始执行ALTER DATABASE MOUNT语句
[monitor] 2024-08-19 02:51:01: 实例DM2执行ALTER DATABASE MOUNT语句成功
[monitor] 2024-08-19 02:51:01: 实例DM1开始执行ALTER DATABASE STANDBY语句
[monitor] 2024-08-19 02:51:02: 实例DM1执行ALTER DATABASE STANDBY语句成功
[monitor] 2024-08-19 02:51:02: 实例DM2开始执行ALTER DATABASE PRIMARY语句
[monitor] 2024-08-19 02:51:04: 实例DM2执行ALTER DATABASE PRIMARY语句成功
[monitor] 2024-08-19 02:51:04: 通知实例DM2修改所有归档状态无效
[monitor] 2024-08-19 02:51:04: 修改所有实例归档为无效状态成功
[monitor] 2024-08-19 02:51:04: 实例DM1开始执行ALTER DATABASE OPEN FORCE语句
[monitor] 2024-08-19 02:51:04: 实例DM1执行ALTER DATABASE OPEN FORCE语句成功
[monitor] 2024-08-19 02:51:04: 实例DM2开始执行ALTER DATABASE OPEN FORCE语句
[monitor] 2024-08-19 02:51:05: 实例DM2执行ALTER DATABASE OPEN FORCE语句成功
[monitor] 2024-08-19 02:51:05: 实例DM1开始执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句
[monitor] 2024-08-19 02:51:05: 实例DM1执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句成功
[monitor] 2024-08-19 02:51:05: 实例DM2开始执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句
[monitor] 2024-08-19 02:51:05: 实例DM2执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句成功
[monitor] 2024-08-19 02:51:05: 通知守护进程DM1切换OPEN状态
[monitor] 2024-08-19 02:51:05: 守护进程(DM1)状态切换 [SWITCHOVER-->OPEN]
[monitor] 2024-08-19 02:51:06: 切换守护进程DM1为OPEN状态成功
[monitor] 2024-08-19 02:51:06: 通知守护进程DM2切换OPEN状态
[monitor] 2024-08-19 02:51:07: 守护进程(DM2)状态切换 [SWITCHOVER-->OPEN]
[monitor] 2024-08-19 02:51:07: 切换守护进程DM2为OPEN状态成功
[monitor] 2024-08-19 02:51:07: 通知组(GRP1)的守护进程执行清理操作
[monitor] 2024-08-19 02:51:08: 清理守护进程(DM1)请求成功
[monitor] 2024-08-19 02:51:08: 清理守护进程(DM2)请求成功
[monitor] 2024-08-19 02:51:08: 实例DM2切换成功
2024-08-19 02:51:08
#================================================================================#
GROUP OGUID MON_CONFIRM MODE MPP_FLAG
GRP1 10086 TRUE AUTO FALSE
<<DATABASE GLOBAL INFO:>>
DW_IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT
192.168.0.103 5239 2024-08-19 02:51:09 GLOBAL VALID OPEN DM2 OK 1 1 OPEN PRIMARY DSC_OPEN REALTIME VALID
EP INFO:
INST_IP INST_PORT INST_OK INAME ISTATUS IMODE DSC_SEQNO DSC_CTL_NODE RTYPE RSTAT FSEQ FLSN CSEQ CLSN DW_STAT_FLAG
192.168.0.103 5236 OK DM2 OPEN PRIMARY 0 0 REALTIME VALID 4845 40875 4845 40875 NONE
<<DATABASE GLOBAL INFO:>>
DW_IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT
192.168.0.102 5239 2024-08-19 02:51:09 GLOBAL VALID OPEN DM1 OK 1 1 OPEN STANDBY DSC_OPEN REALTIME INVALID
EP INFO:
INST_IP INST_PORT INST_OK INAME ISTATUS IMODE DSC_SEQNO DSC_CTL_NODE RTYPE RSTAT FSEQ FLSN CSEQ CLSN DW_STAT_FLAG
192.168.0.102 5236 OK DM1 OPEN STANDBY 0 0 REALTIME INVALID 4843 40689 4843 40689 NONE
DATABASE(DM1) APPLY INFO FROM (DM2), REDOS_PARALLEL_NUM (1), WAIT_APPLY[FALSE]:
DSC_SEQNO[0], (RSEQ, SSEQ, KSEQ)[4843, 4843, 4843], (RLSN, SLSN, KLSN)[40689, 40689, 40689], N_TSK[0], TSK_MEM_USE[0]
REDO_LSN_ARR: (40689)
#================================================================================#
[monitor] 2024-08-19 02:51:09: 守护进程(DM2)状态切换 [OPEN-->RECOVERY]
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2024-08-19 02:51:10 RECOVERY OK DM2 OPEN PRIMARY VALID 3 40875 40875
[monitor] 2024-08-19 02:51:12: 守护进程(DM2)状态切换 [RECOVERY-->OPEN]
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2024-08-19 02:51:13 OPEN OK DM2 OPEN PRIMARY VALID 3 40875 40875
守护系统必须按照一定的顺序来关闭守护进程和数据库实例。特别是自动切换模式,如果退出守护进程或主备库的顺序不正确,可能会引起主备切换,甚至造成守护进程组分裂。
关闭确认监视器(防止自动接管)。
systemctl stop DmMonitorServiceDM.service
systemctl status DmMonitorServiceDM.service
如果还有普通监视器,使用 Ctrl+C 退出。
关闭备库守护进程(防止重启实例)。
ps -ef |grep dm.ini
ps -ef |grep -i dmwatcher
systemctl stop DmWatcherServiceDM.service
关闭主库守护进程(防止重启实例)。
与第 2 步中操作相同。
如果 DM 实例是通过服务启动的,在关闭守护进程时,同时将数据库实例一起关闭。如果是通过 DMSERVER 启动的,还需要在DMSERVER中关闭实例。
关闭主库。
关闭备库。
注意:
- 必须先关闭主库,再关闭备库。主库在关闭的过程中,仍然会产生REDO日志。如果先关闭备库,会导致主库发送归档日志失败,从而导致主库异常关闭。
- 如果数据库实例是通过服务启动的,那么在关闭守护进程时会自动关闭对应的 DM 实例。但如果DM实例是通过 dmserver 命令启动的,那么还需要单独地关闭实例。
在PRIMARY和STANDBY模式下,数据库默认启动到MOUNT状态。默认情况下,守护进程启动后,会自动将MOUNT状态的实例启动到OPEN状态。
注意,这里守护进程只能从 MOUNT 状态到 OPEN 状态。如果实例因其他错误导致无法启动到MOUNT状态,那么守护进程也不会打开实例。但如果在守护进程中配置了 INST_AUTO_RESTART 实例自动启动,那么在守护进程启动后会直接启动实例,而不关心实例状态。
所以在数据守护中,如果通过服务配置了实例,那么在守护进程和监控器自动启动的情况下,整个数据守护环境会自动启动。
如果选择手动方式启动数据守护系统,那么对于守护进程、数据库实例和监视器的启动顺序也没有特殊的要求,只要进程能正常启动即可。
如果实例打开失败,用户则可以在监视器中使用 check open 命令查看原因。
check open INSTANCE_NAME
文章
阅读量
获赞