达梦数据库搭建备库

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值