OS版本: NeoKylin Linux Advanced Server 7.0
数据库版本: 8
DM_HOME: /dmdba/dmdbms
环境
DatabaseType IP PrivateIP HOSTANME 端口 数据库名
========================================================================
主库 xx.xxx.xx.xx xx.xxx.xx.xx xxxxdb01 5236 XXXXDB
备库 xx.xxx.xx.xx xx.xxx.xx.xx xxxxdb02 5236 XXXXDB
监控 xx.xxx.xx.xx N/A zb_dmdb_mon01
SYSDBA 密码: Dmdba2022
0. 准备工作
建立主备库 dmdba 的信任关系
【在所有节点上运行】
# su - dmdba
cd
rm -rf ~/.ssh
mkdir ~/.ssh
chmod 700 ~/.ssh
【仅在节点1上运行】
ssh-keygen -b 1024 -t rsa
cd ~/.ssh
cat *rsa.pub >> authorized_keys
scp ~/.ssh/* xxxxdb02:~/.ssh/
在所有节点上运行依次测试命令:
ssh xxxxdb01 date
ssh xxxxdb02 date
1. 备库服务器安装数据库软件
2. 对源库做全备份
a. 在主库上创建测试表
disql SYSDBA/Dmdba2022@127.0.0.1:5236
-- 创建主备库同步检测表
drop table DG_STATUS;
create table DG_STATUS (name varchar(128), instance_number int, instance_name varchar(128), host_name varchar(128), status varchar(128), mode varchar(128), oguid int, lastdate date default sysdate);
delete from DG_STATUS;
insert into DG_STATUS select name, instance_number, instance_name, host_name, status$, mode$, oguid, sysdate from v$instance;
commit;
select * from DG_STATUS;
call SP_INIT_JOB_SYS(1);
call SP_DROP_JOB('JOB_DG_CHECK');
call SP_CREATE_JOB('JOB_DG_CHECK',1,0,'',0,0,'',0,'Check whether the data is synchronized between the primary and standby database');
call SP_JOB_CONFIG_START('JOB_DG_CHECK');
call SP_ADD_JOB_STEP('JOB_DG_CHECK', 'STEP_DG_CHECK', 0, 'delete from dg_status;
insert into dg_status select name, instance_number, instance_name, host_name, status$, mode$, oguid, now() from v$instance;
commit;', 1, 2, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('JOB_DG_CHECK', 'SCH_DG_CHECK', 1, 1, 1, 0, 1, '00:00:00', '23:59:59', trunc(now), NULL, '');
call SP_JOB_CONFIG_COMMIT('JOB_DG_CHECK');
select * from DG_STATUS;
b. 使用备份恢复搭建备库
法1. 使用联机备份搭建主备库(推荐)
mkdir -p /dmdata/bak/XXXXDB
rm -rf /dmdata/bak/XXXXDB/XXXXDB_Full_BAK_20220501
rdisql SYSDBA/Dmdba2022@127.0.0.1:5236 -e "backup database full to XXXXDB_Full_BAK_20220501 backupset '/dmdata/bak/XXXXDB/XXXXDB_Full_BAK_20220501'"
ls -l /dmdata/bak/XXXXDB
法2. 使用脱机备份搭建主备库
正常关闭数据库
cd $DM_HOME/bin
./DmServiceXXXXDB5236 stop
进行脱机备份
mkdir -p /dmdata/bak/XXXXDB
rm -rf /dmdata/bak/XXXXDB/XXXXDB_Full_BAK_20220501
dmrman CTLSTMT="backup database '/dmdata/XXXXDB/sys/XXXXDB/dm.ini' full to XXXXDB_Full_BAK_20220501 backupset '/dmdata/bak/XXXXDB/XXXXDB_Full_BAK_20220501'"
ls -l /dmdata/bak/XXXXDB
c. 拷贝备份文件到备库所在机器
scp -rp /dmdata/bak/XXXXDB/XXXXDB_Full_BAK_20220501 xxxxdb02:/dmdata/bak/XXXXDB/
d. 在备库主机创建目录
ls -l /dmdata/bak/XXXXDB
rm -rf /dmdata/XXXXDB /dmdata/arch/XXXXDB
mkdir -p /dmdata/XXXXDB/sys
mkdir -p /dmdata/XXXXDB/dat01
mkdir -p /dmdata/arch/XXXXDB
chown dmdba:dinstall /dmdata /dmdata/XXXXDB /dmdata/XXXXDB/* /dmdata/arch /dmdata/arch/XXXXDB /dmdata/bak /dmdata/bak/XXXXDB
find /dmdata -exec ls -ld {} \;
cd $DM_HOME/bin
./dminit PATH=/dmdata/XXXXDB/sys \
LOG_PATH=/dmdata/XXXXDB/sys/XXXXDB/XXXXDB01.log \
LOG_PATH=/dmdata/XXXXDB/sys/XXXXDB/XXXXDB02.log \
LOG_SIZE=1024 \
PAGE_SIZE=16 \
CASE_SENSITIVE=1 \
DB_NAME=XXXXDB \
INSTANCE_NAME=XXXXDB \
PORT_NUM=5236 \
BUFFER=1000
执行脱机数据库还原与恢复
dmrman CTLSTMT="restore database '/dmdata/XXXXDB/sys/XXXXDB/dm.ini' from backupset '/dmdata/bak/XXXXDB/XXXXDB_Full_BAK_20220501'"
dmrman CTLSTMT="recover database '/dmdata/XXXXDB/sys/XXXXDB/dm.ini' from backupset '/dmdata/bak/XXXXDB/XXXXDB_Full_BAK_20220501'"
dmrman CTLSTMT="recover database '/dmdata/XXXXDB/sys/XXXXDB/dm.ini' update db_magic"
3. 配置主库的 dm.ini
xxxxdb01:
$ vi /dmdata/XXXXDB/sys/XXXXDB/dm.ini
=================================================================================
BAK_PATH = /dmdata/bak/XXXXDB #backup file path
INSTANCE_NAME = GROUP01_01 #Instance name
PORT_NUM = 5236 #Port number on which the database server will listen
DW_INACTIVE_INTERVAL = 60 #Time in seconds that used to determine whether DMWATCHER exist
ALTER_MODE_STATUS = 0 #Whether to permit database user to alter database mode and status by SQLs, 1: yes, 0: no
ENABLE_OFFLINE_TS = 2 #Whether tablespace can be offline
MAL_INI = 1 #dmmal.ini
ARCH_INI = 1 #dmarch.ini
RLOG_SEND_APPLY_MON = 64 #Monitor recently send or apply rlog_buf info
TRX_RLOG_WAIT_MODE = 1 #Trx rlog wait mode
=================================================================================
配置备库的 dm.ini
xxxxdb02:
将主库的 dm.ini 复制到备库,修改如下选项:
scp /dmdata/XXXXDB/sys/XXXXDB/dm.ini xxxxdb02:/dmdata/XXXXDB/sys/XXXXDB/dm.ini
$ vi /dmdata/XXXXDB/sys/XXXXDB/dm.ini
=================================================================================
INSTANCE_NAME = GROUP01_02 #Instance name
=================================================================================
4. 配置主备库的 dmmal.ini
xxxxdb01/02:
新建文件 dmmal.ini
$ vi /dmdata/XXXXDB/sys/XXXXDB/dmmal.ini
=================================================================================
MAL_CHECK_INTERVAL = 5
MAL_CONN_FAIL_INTERVAL = 5
MAL_LOGIN_TIMEOUT = 15
MAL_BUF_SIZE = 100
MAL_SYS_BUF_SIZE = 0
MAL_VPOOL_SIZE = 128
MAL_COMPRESS_LEVEL = 0
[MAL_INST1]
MAL_INST_NAME = GROUP01_01
MAL_HOST = 10.229.50.51
MAL_PORT = 55236
MAL_INST_HOST = 10.229.10.51
MAL_INST_PORT = 5236
MAL_DW_PORT = 45236
MAL_INST_DW_PORT = 35236
[MAL_INST2]
MAL_INST_NAME = GROUP01_02
MAL_HOST = 10.229.50.52
MAL_PORT = 55236
MAL_INST_HOST = 10.229.10.52
MAL_INST_PORT = 5236
MAL_DW_PORT = 45236
MAL_INST_DW_PORT = 35236
=================================================================================
5. 配置主备库的 dmarch.ini
xxxxdb01:
$ vi /dmdata/XXXXDB/sys/XXXXDB/dmarch.ini
=================================================================================
#DaMeng Database Archive Configuration file
#this is comments
ARCH_WAIT_APPLY = 1
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmdata/arch/XXXXDB
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
ARCH_FLUSH_BUF_SIZE = 0
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME
ARCH_DEST = GROUP01_02
=================================================================================
特别的,若备库需要提供只读功能(一般适用于一主多备),需要配置如下参数配置:
[ARCHIVE_REALTIME1]
ARCH_WAIT_APPLY = 1
ARCH_TYPE = TIMELY
ARCH_DEST = GROUP01_02
select * from v$dm_arch_ini;
参数说明:
ARCH_WAIT_APPLY: 库收到Redo日志后,是否需要重演完成后再响应主库。0表示备库收到马上响应(高性能模式),1表示备库重演完成后响应(事务一致模式)。
ARCH_TYPE: Redo 日志归档类型,LOCAL/REMOTE/REALTIME/TIMELY/ASYNC 分别表示 本地归档/远程归档/实时归档/即时归档/异步归档。
select * from v$dm_arch_ini;
xxxxdb02:
$ vi /dmdata/XXXXDB/sys/XXXXDB/dmarch.ini
=================================================================================
#DaMeng Database Archive Configuration file
#this is comments
ARCH_WAIT_APPLY = 1
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmdata/arch/XXXXDB
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
ARCH_FLUSH_BUF_SIZE = 0
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME
ARCH_DEST = GROUP01_01
=================================================================================
特别的,若备库需要提供只读功能(一般适用于一主多备),需要配置如下参数配置:
[ARCHIVE_REALTIME1]
ARCH_WAIT_APPLY = 1
ARCH_TYPE = TIMELY
ARCH_DEST = GROUP01_02
select * from v$dm_arch_ini;
6. 配置主库 GROUP01_01
启动主库
以 mount 方式启动主库
cd $DM_HOME/bin
./DmServiceXXXXDB5236 stop
dmserver /dmdata/XXXXDB/sys/XXXXDB/dm.ini mount
......
SYSTEM IS READY.
主库设置 OGUID
disql SYSDBA/Dmdba2022@127.0.0.1:5236
SQL>
sp_set_para_value(1, 'alter_mode_status', 1);
sp_set_oguid(455236);
sp_set_para_value(1, 'alter_mode_status', 0);
说明:系统通过OGUID值确定一个守护进程组,由用户保证OGUID值的唯一性,并确保数据守护系统中,数据库、守护进程和监视器配置相同的OGUID值。
修改主库模式
alter database primary;
select name, instance_name, host_name, status$, mode$, oguid from v$instance;
行号 NAME INSTANCE_NAME HOST_NAME STATUS$ MODE$ OGUID
---------- ---------- ------------- --------- ------- ------- -----------
1 GROUP01_01 GROUP01_01 xxxxdb01 MOUNT PRIMARY 455236
7. 配置备库 GROUP01_02
以 mount 方式启动备库
dmserver /dmdata/XXXXDB/sys/XXXXDB/dm.ini mount
备库设置 OGUID
disql SYSDBA/Dmdba2022@127.0.0.1:5236
SQL>
sp_set_para_value(1, 'alter_mode_status', 1);
sp_set_oguid(455236);
sp_set_para_value(1, 'alter_mode_status', 0);
修改备库模式
SQL>
sp_set_para_value(1, 'ALTER_MODE_STATUS', 1);
alter database standby;
sp_set_para_value(1, 'ALTER_MODE_STATUS', 0);
select name, instance_name, host_name, status$, mode$, oguid from v$instance;
行号 NAME INSTANCE_NAME HOST_NAME STATUS$ MODE$ OGUID
---------- ---------- ------------- --------- ------- ------- -----------
1 GROUP01_02 GROUP01_02 xxxxdb02 MOUNT STANDBY 455236
8. 配置主备库的守护进程
配置 dmwatcher.ini
xxxxdb01/02:
新建文件 dmwatcher.ini
$ vi /dmdata/XXXXDB/sys/XXXXDB/dmwatcher.ini
=================================================================================
[GROUP01]
DW_TYPE = GLOBAL
DW_MODE = AUTO
DW_ERROR_TIME = 10
INST_ERROR_TIME = 10
INST_OGUID = 455236
INST_INI = /dmdata/XXXXDB/sys/XXXXDB/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /dmdba/dmdbms/bin/dmserver
INST_RECOVER_TIME = 60
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0
=================================================================================
启动主机上的守护进程
xxxxdb01:
dmwatcher /dmdata/XXXXDB/sys/XXXXDB/dmwatcher.ini
DMWATCHER[4.0] V8
DMWATCHER[4.0] IS READY
服务正常启动后,exit 关闭服务
创建 dmwatcher 守护进程
cd /dmdba/dmdbms/script/root/
./dm_service_installer.sh -t dmwatcher -p XXXXDB5236 -watcher_ini /dmdata/XXXXDB/sys/XXXXDB/dmwatcher.ini
启动服务:
systemctl start DmWatcherServiceXXXXDB5236
systemctl status DmWatcherServiceXXXXDB5236
开机自动启动服务:
systemctl active DmWatcherServiceXXXXDB5236
systemctl is-active DmWatcherServiceXXXXDB5236
关闭开机启动数据库服务:
systemctl disable DmServiceXXXXDB5236
systemctl list-unit-files --type=service | grep DmService
启动备机上的守护进程
xxxxdb02:
dmwatcher /dmdata/XXXXDB/sys/XXXXDB/dmwatcher.ini
DMWATCHER[4.0] V8
DMWATCHER[4.0] IS READY
服务正常启动后,exit 关闭服务
创建 dmwatcher 守护进程
cd /dmdba/dmdbms/script/root/
./dm_service_installer.sh -t dmwatcher -p XXXXDB5236 -watcher_ini /dmdata/XXXXDB/sys/XXXXDB/dmwatcher.ini
启动服务:
systemctl start DmWatcherServiceXXXXDB5236
systemctl status DmWatcherServiceXXXXDB5236
开机自动启动服务:
systemctl active DmWatcherServiceXXXXDB5236
systemctl is-active DmWatcherServiceXXXXDB5236
添加数据库服务:
cd /dmdba/dmdbms/script/root/
./dm_service_installer.sh -t dmserver -p XXXXDB5236 -dm_ini /dmdata/XXXXDB/sys/XXXXDB/dm.ini
关闭开机启动数据库服务:
systemctl disable DmServiceXXXXDB5236
systemctl list-unit-files --type=service | grep DmService
9. 配置监视器
zb_dmdb_mon01:
mkdir -p /dmdba/XXXXDB/mon/log
vi /dmdba/XXXXDB/mon/dmmonitor.ini
=================================================================================
MON_DW_CONFIRM = 1
MON_LOG_PATH = /dmdba/XXXXDB/mon/log
MON_LOG_INTERVAL = 1
MON_LOG_FILE_SIZE = 64
MON_LOG_SPACE_LIMIT = 0
[GROUP01]
MON_INST_OGUID = 455236
MON_DW_IP = xx.xxx.xx.xx:45236
MON_DW_IP = xx.xxx.xx.xx:45236
=================================================================================
配置console备用监视器
vi /dmdba/XXXXDB/mon/dmmonitor_console.ini
=================================================================================
MON_DW_CONFIRM = 0
MON_LOG_PATH = /dmdba/XXXXDB/mon/log_console
MON_LOG_INTERVAL = 1
MON_LOG_FILE_SIZE = 64
MON_LOG_SPACE_LIMIT = 0
[GROUP01]
MON_INST_OGUID = 455236
MON_DW_IP = xx.xxx.xx.xx:45236
MON_DW_IP = xx.xxx.xx.xx:45236
=================================================================================
创建 dmmonitor 守护进程
cd /dmdba/dmdbms/script/root/
./dm_service_installer.sh -t dmmonitor -p XXXXDB5236 -monitor_ini /dmdba/XXXXDB/mon/dmmonitor.ini
启动服务:
systemctl start DmMonitorServiceXXXXDB5236
systemctl status DmMonitorServiceXXXXDB5236
开机自动启动服务:
systemctl active DmMonitorServiceXXXXDB5236
systemctl is-active DmMonitorServiceXXXXDB5236
启动监视器
systemctl start DmWatcherServiceXXXXDB5236
systemctl status DmWatcherServiceXXXXDB5236
<=>
dmmonitor /dmdba/XXXXDB/mon/dmmonitor_console.ini
[monitor] 2022-04-04 15:04:41: DMMONITOR[4.0] V8
[monitor] 2022-04-04 15:04:43: DMMONITOR[4.0] IS READY.
show
2021-01-01 15:38:26
#================================================================================#
GROUP OGUID MON_CONFIRM MODE MPP_FLAG
GROUP01 455236 TRUE AUTO FALSE
<<DATABASE GLOBAL INFO:>>
IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT
xx.xxx.xx.xx 45236 2022-04-04 15:38:26 GLOBAL VALID OPEN GROUP01_01 OK 1 1 OPEN PRIMARY DSC_OPEN REALTIME VALID
EP INFO:
INST_PORT INST_OK INAME ISTATUS IMODE DSC_SEQNO DSC_CTL_NODE RTYPE RSTAT FSEQ FLSN CSEQ CLSN DW_STAT_FLAG
5236 OK GROUP01_01 OPEN PRIMARY 0 0 REALTIME VALID 4078 41507 4078 41507 NONE
<<DATABASE GLOBAL INFO:>>
IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT
xx.xxx.xx.xx 45236 2022-04-04 15:38:26 GLOBAL VALID OPEN GROUP01_02 OK 1 1 OPEN STANDBY DSC_OPEN REALTIME VALID
EP INFO:
INST_PORT INST_OK INAME ISTATUS IMODE DSC_SEQNO DSC_CTL_NODE RTYPE RSTAT FSEQ FLSN CSEQ CLSN DW_STAT_FLAG
5236 OK GROUP01_02 OPEN STANDBY 0 0 REALTIME VALID 4075 41507 4075 41507 NONE
DATABASE(GROUP01_02) APPLY INFO FROM (GROUP01_01):
DSC_SEQNO[0], (ASEQ, SSEQ, KSEQ)[4078, 4078, 4078], (ALSN, SLSN, KLSN)[41507, 41507, 41507], N_TSK[0], TSK_MEM_USE[0]
#================================================================================#
FLSN 主备库是否一致!
WSTATUS
INST_OK
tip
[monitor] 2022-04-29 14:51:50: [!!! 提示:本监视器不是确认监视器,在故障自动切换模式下如果发生主库故障,本监视器无法执行自动接管 !!!]
[monitor] 2022-04-29 14:51:50: 实例GROUP01_02[PRIMARY, OPEN, ISTAT_SAME:TRUE]不可加入其他实例,守护进程状态:OPEN,Open记录状态:VALID
[monitor] 2022-04-29 14:51:50: 实例GROUP01_02[PRIMARY, OPEN, ISTAT_SAME:TRUE]当前没有命令正在执行
[monitor] 2022-04-29 14:51:50: 实例GROUP01_02[PRIMARY, OPEN, ISTAT_SAME:TRUE]运行正常, 守护进程是OPEN状态,守护类型是GLOBAL
[monitor] 2022-04-29 14:51:50: 实例GROUP01_01[STANDBY, OPEN, ISTAT_SAME:TRUE]可加入实例GROUP01_02[PRIMARY, OPEN, ISTAT_SAME:TRUE]
[monitor] 2022-04-29 14:51:50: 实例GROUP01_01[STANDBY, OPEN, ISTAT_SAME:TRUE]当前没有命令正在执行
[monitor] 2022-04-29 14:51:50: 实例GROUP01_01[STANDBY, OPEN, ISTAT_SAME:TRUE]运行正常, 守护进程是OPEN状态,守护类型是GLOBAL
[monitor] 2022-04-29 14:51:50: 组(GROUP01)当前活动实例运行正常
[monitor] 2022-04-29 14:51:50: 所有组中的活动实例运行正常!
10. 切换演练
a. 手动切换
dmmonitor /dmdba/XXXXDB/mon/dmmonitor.ini
login
用户名: sysdba
密码: Dmdba2022
switchover
<=>
switchover GROUP01.GROUP01_02
show
b. 自动切换
将 xxxxdb02 上的 dmserver 进程 kill 掉后,dmwatcher 守护进程会自动启动数据库。
将 xxxxdb02 上的 dmserver, dmwatcher 都进程 kill 掉后,
ps -ef | grep dmdba | egrep "dmserver|dmwatch" | grep -v grep
ps -ef | grep dmdba | egrep "dmserver|dmwatch" | grep -v grep | awk -F ' ' '{print $2}' | xargs -I {} kill -9 {}
ps -ef | grep dmdba | egrep "dmserver|dmwatch" | grep -v grep
show
此时,可以在 monitor 界面看到数据库自动切换到节点 xxxxdb01
通过 SQL 对主库查询:
SQL>
select name, instance_name, host_name, status$, mode$, oguid from v$instance;
行号 NAME INSTANCE_NAME HOST_NAME STATUS$ MODE$ OGUID
---------- ---------- ------------- -------------------- ------- ------- -----------
1 GROUP01_01 GROUP01_01 xxxxdb01.example.com OPEN PRIMARY 455236
启动故障节点 xxxxdb02 上的守护进程,会自动启动数据库
systemctl start DmWatcherServiceXXXXDB5236
<=>
dmwatcher /dmdata/XXXXDB/sys/XXXXDB/dmwatcher.ini
c. 手工关闭 dmwatcher 进程,会自动停止数据库
systemctl stop DmWatcherServiceXXXXDB5236
ps -ef | grep dmdba | egrep "dmserver|dmwatch" | grep -v grep
发现通过服务的方式关闭 dmwatcher 服务,会自动停止数据库
11. 应用连接数据库
在应用服务器上配置:
vi /etc/dm_svc.conf
=================================================================================
XXXXDB=(xx.xxx.xx.xx:5236,xx.xxx.xx.xx:5236)
LOGIN_MODE=(1)
SWITCH_TIME=(3)
SWITCH_INTERVAL=(1000)
TIME_ZONE=(480)
LANGUAGE=(cn)
=================================================================================
应用调用服务名 XXXXDB 完成数据库连接操作。
应用url配置:
jdbc:dm://XXXXDB
在 Windows DM管理工具 上配置
notepad C:\Windows\System32\dm_svc.conf
=================================================================================
XXXXDB_PRIMARY=(xx.xxx.xx.xx:5236,xx.xxx.xx.xx:5236)
XXXXDB_STANDBY=(xx.xxx.xx.xx:5236,xx.xxx.xx.xx:5236)
TIME_ZONE=(480)
LANGUAGE=(cn)
[XXXXDB_PRIMARY]
LOGIN_MODE=(1)
SWITCH_TIME=(3)
SWITCH_INTERVAL=(1000)
[XXXXDB_STANDBY]
LOGIN_MODE=(2)
=================================================================================
■ 集群脑裂(GROUP SPLIT)恢复
a. 停掉故障节点守护服务和实例服务
systemctl stop DmWatcherServiceXXXXDB5236.servic
b. 在正常节点联机备份数据库
mkdir -p /dmdata/bak/XXXXDB
rm -rf /dmdata/bak/XXXXDB/XXXXDB_Full_BAK_20220501
rdisql SYSDBA/spdb12345@127.0.0.1:5236 -e "backup database full to XXXXDB_Full_BAK_20220501 backupset '/dmdata/bak/XXXXDB/XXXXDB_Full_BAK_20220501'"
ls -l /dmdata/bak/XXXXDB
c. 拷贝备份文件到故障节点
scp -rp /dmdata/bak/XXXXDB/XXXXDB_Full_BAK_20220501 xxxxdb02:/dmdata/bak/XXXXDB/
d. 在故障节点执行脱机数据库还原与恢复
dmrman CTLSTMT="restore database '/dmdata/XXXXDB/sys/XXXXDB/dm.ini' from backupset '/dmdata/bak/XXXXDB/XXXXDB_Full_BAK_20220501'"
dmrman CTLSTMT="recover database '/dmdata/XXXXDB/sys/XXXXDB/dm.ini' from backupset '/dmdata/bak/XXXXDB/XXXXDB_Full_BAK_20220501'"
dmrman CTLSTMT="recover database '/dmdata/XXXXDB/sys/XXXXDB/dm.ini' update db_magic"
e. 修改新恢复备库模式
SQL>
sp_set_para_value(1, 'ALTER_MODE_STATUS', 1);
alter database standby;
sp_set_para_value(1, 'ALTER_MODE_STATUS', 0);
select name, instance_name, host_name, status$, mode$, oguid from v$instance;
行号 NAME INSTANCE_NAME HOST_NAME STATUS$ MODE$ OGUID
---------- ---------- ------------- --------- ------- ------- -----------
1 GROUP01_02 GROUP01_02 xxxxdb02 MOUNT STANDBY 455236
f. 删除故障节点数据实例目录下的dmwatcher.ctl文件
cd /dmdata/XXXXDB/sys/XXXXDB
rm -f dmwatcher.ctl
g. 启动故障节点守护服务和实例服务
systemctl stop DmWatcherServiceXXXXDB5236.servic
h. 通过monitor监控节点观察集群状态
show
tip