签到成功

知道了

CNDBA社区CNDBA社区

DM7 达梦 数据库 数据守护(Data Watch) (8) -- MPP主备环境搭建

2019-09-13 01:30 3026 0 原创 DM 达梦
作者: dave

在之前的博客,我们了解了MPP 的概念,以及MPP环境的搭建,如下:http://www.cndba.cn/cndba/dave/article/3678

DM7 达梦数据库 大规模并行处理 MPP (1) — 基本概念和原理
https://www.cndba.cn/dave/article/3657
DM7 达梦数据库 大规模并行处理 MPP (2) — 环境搭建和使用
https://www.cndba.cn/dave/article/3658http://www.cndba.cn/cndba/dave/article/3678

MPP的数据守护就是对MPP的每个EP节点都配置成数据守护,从而保证整个MPP环境的高可用性。下面了解MPP + DW的搭建具体步骤。

1 环境说明

本例配置 2 个 MPP 节点数,每个节点作为主库,与其备库组成一个守护组,因此需要配置两个守护组,取名分别为GRP3、GRP4,主库名为GRP3_MPP_EP01/ GRP4_MPP_EP02,对应的备库实例名分别为 GRP3_MPP_EP11/GRP4_MPP_EP22。

配置环境说明

主机类型 IP地址 实例名 操作系统
MPP1 主库 192.168.20.191(外部服务)
192.168.56.191(内部通信)
GRP3_MPP_EP01 NeoKylin Linux General Server release 6.0
MPP1 备库 192.168.20.192(外部服务)
192.168.56.192(内部通信)
GRP3_MPP_EP11 NeoKylin Linux General Server release 6.0
MPP2 主库 192.168.20.193(外部服务)
192.168.56.193(内部通信)
GRP4_MPP_EP02 NeoKylin Linux General Server release 6.0
MPP2 备库 192.168.20.194(外部服务)
192.168.56.194(内部通信)
GRP4_MPP_EP22 NeoKylin Linux General Server release 6.0
监控 192.168.56.190 确认监视器 NeoKylin Linux General Server release 6.0

端口规划

实例名 PORT_NUM DW_PORT MAL_HOST MAL_PORT MAL_DW_PORT MPP实例序列
GRP3_MPP_EP01 5236 5336 192.168.56.191 5436 5536 0
GRP3_MPP_EP11 5237 5337 192.168.56.192 5437 5537
GRP4_MPP_EP02 5238 5338 192.168.56.193 5438 5538 1
GRP4_MPP_EP22 5239 5339 192.168.56.194 5439 5539

2 数据准备

2.1 创建主库实例

DM7 达梦数据库 通过dminit 创建 并 注册 数据库实例
https://www.cndba.cn/dave/article/3580

在2台MPP主库上创建实例:GRP3_MPP_EP01 和 GRP4_MPP_EP02。

[dave@www.cndba.cn1 ~]$ dminit PATH=/dm/dmdbms/data DB_NAME=GRP3_MPP_EP01 INSTANCE_NAME=GRP3_MPP_EP01
initdb V7.6.0.95-Build(2018.09.13-97108)ENT 
db version: 0x7000a
file dm.key not found, use default license!
License will expire in 14 day(s) on 2019-09-26

 log file path: /dm/dmdbms/data/GRP3_MPP_EP01/GRP3_MPP_EP0101.log


 log file path: /dm/dmdbms/data/GRP3_MPP_EP01/GRP3_MPP_EP0102.log

write to dir [/dm/dmdbms/data/GRP3_MPP_EP01].
create dm database success. 2019-09-12 21:54:57
[dave@www.cndba.cn1 ~]$ 

#注册服务:
[root@dm1 ~]# /dm/dmdbms/script/root/dm_service_installer.sh -t dmserver -i /dm/dmdbms/data/GRP3_MPP_EP01/dm.ini -p GRP3_MPP_EP01
移动服务脚本文件(/dm/dmdbms/bin/DmServiceGRP3_MPP_EP01 到 /etc/rc.d/init.d/DmServiceGRP3_MPP_EP01)
创建服务(DmServiceGRP3_MPP_EP01)完成
[root@dm1 ~]# 

#启动DB:
[dave@www.cndba.cn1 ~]$ service DmServiceGRP3_MPP_EP01 start
Starting DmServiceGRP3_MPP_EP01:                           [ OK ]
[dave@www.cndba.cn1 ~]$ 

#启动归档模式:
[dave@www.cndba.cn1 bin]$ disql SYSDBA/SYSDBA

Server[LOCALHOST:5236]:mode is normal, state is open
login used time: 11.249(ms)
disql V7.6.0.95-Build(2018.09.13-97108)ENT 
Connected to: DM 7.1.6.95
SQL> alter database mount;
executed successfully
used time: 00:00:01.766. Execute id is 0.
SQL> alter database add archivelog 'DEST=/dm/dmarch,TYPE=local,FILE_SIZE=128,space_limit=0';
executed successfully
used time: 2.975(ms). Execute id is 0.
SQL>alter database archivelog;
executed successfully
used time: 9.097(ms). Execute id is 0.
SQL> alter database open;
executed successfully
used time: 656.739(ms). Execute id is 0.
SQL>

在另一台MPP主库重复以上步骤,创建实例。http://www.cndba.cn/cndba/dave/article/3678

2.2 使用DMRMAN备份主库

对2台MPP主库进行备份,这里采用离线备份:

[dave@www.cndba.cn1 ~]$ service DmServiceGRP3_MPP_EP01 stop
Stopping DmServiceGRP3_MPP_EP01:                           [ OK ]
[dave@www.cndba.cn1 ~]$ 

[dave@www.cndba.cn1 ~]$ cd /dm/dmdbms/bin
[dave@www.cndba.cn1 bin]$ ./dmrman 
dmrman V7.6.0.95-Build(2018.09.13-97108)ENT 
RMAN> backup database '/dm/dmdbms/data/GRP3_MPP_EP01/dm.ini' full backupset '/dm/dmbak/GRP3_MPP_EP01_full_bak';
backup database '/dm/dmdbms/data/GRP3_MPP_EP01/dm.ini' full backupset '/dm/dmbak/GRP3_MPP_EP01_full_bak';
file dm.key not found, use default license!
checking if the database under system path [/dm/dmdbms/data/GRP3_MPP_EP01] is running...[4].
checking if the database under system path [/dm/dmdbms/data/GRP3_MPP_EP01] is running...[3].
checking if the database under system path [/dm/dmdbms/data/GRP3_MPP_EP01] is running...[2].
checking if the database under system path [/dm/dmdbms/data/GRP3_MPP_EP01] is running...[1].
checking if the database under system path [/dm/dmdbms/data/GRP3_MPP_EP01] is running...[0].
checking if the database under system path [/dm/dmdbms/data/GRP3_MPP_EP01] is running, write dmrman info.
EP[0] max_lsn: 44755
BACKUP DATABASE [GRP3_MPP_EP01], execute......
CMD CHECK LSN......
BACKUP DATABASE [GRP3_MPP_EP01], collect dbf......
CMD CHECK ......
DBF BACKUP SUBS......
total 1 packages processed...
total 3 packages processed...
total 4 packages processed...
DBF BACKUP MAIN......
BACKUPSET [/dm/dmbak/GRP3_MPP_EP01_full_bak] END, CODE [0]......
META GENERATING......
total 5 packages processed...
total 5 packages processed!
CMD END.CODE:[0]
backup successfully!
time used: 7051.925(ms)
RMAN> 

#将备份分发到对应的备库:
[dave@www.cndba.cn1 dmbak]$ scp -r GRP3_MPP_EP01_full_bak 192.168.20.192:`pwd`
dmdba@192.168.20.192's password: 
GRP3_MPP_EP01_full_bak.bak                                                                                                                100% 5326KB   5.2MB/s   00:01    
GRP3_MPP_EP01_full_bak.meta                                                                                                               100%   69KB  68.5KB/s   00:00    
[dave@www.cndba.cn1 dmbak]$

在另一台MPP主库重复以上步骤。

2.3 分别初始化2台备库并恢复数据

根据之前的规划,初始化2台MPP备库,实例为:GRP3_MPP_EP11和GRP4_MPP_EP22。

#初始化实例:
[dave@www.cndba.cn2 ~]$ dminit PATH=/dm/dmdbms/data DB_NAME=GRP3_MPP_EP11 INSTANCE_NAME=GRP3_MPP_EP11
initdb V7.6.0.95-Build(2018.09.13-97108)ENT 
db version: 0x7000a
file dm.key not found, use default license!
License will expire in 14 day(s) on 2019-09-26

 log file path: /dm/dmdbms/data/GRP3_MPP_EP11/GRP3_MPP_EP1101.log


 log file path: /dm/dmdbms/data/GRP3_MPP_EP11/GRP3_MPP_EP1102.log

write to dir [/dm/dmdbms/data/GRP3_MPP_EP11].
create dm database success. 2019-09-12 22:11:53
[dave@www.cndba.cn2 ~]$ 

#注册服务:
[root@dm2 ~]# /dm/dmdbms/script/root/dm_service_installer.sh -t dmserver -i /dm/dmdbms/data/GRP3_MPP_EP11/dm.ini -p GRP3_MPP_EP11
Move the service script file(/dm/dmdbms/bin/DmServiceGRP3_MPP_EP11 to /etc/rc.d/init.d/DmServiceGRP3_MPP_EP11)
Finished to create the service (DmServiceGRP3_MPP_EP11)
[root@dm2 ~]# 

#还原数据库
[dave@www.cndba.cn2 bin]$ ./dmrman CTLSTMT="RESTORE DATABASE '/dm/dmdbms/data/GRP3_MPP_EP11/dm.ini' FROM BACKUPSET '/dm/dmbak/'"
dmrman V7.6.0.95-Build(2018.09.13-97108)ENT 
RESTORE DATABASE '/dm/dmdbms/data/GRP3_MPP_EP11/dm.ini' FROM BACKUPSET '/dm/dmbak/'
file dm.key not found, use default license!
Global parameter value of RT_HEAP_TARGET is illegal, use min value!
checking if the database under system path [/dm/dmdbms/data/GRP3_MPP_EP11] is running...[4].
checking if the database under system path [/dm/dmdbms/data/GRP3_MPP_EP11] is running...[3].
checking if the database under system path [/dm/dmdbms/data/GRP3_MPP_EP11] is running...[2].
checking if the database under system path [/dm/dmdbms/data/GRP3_MPP_EP11] is running...[1].
checking if the database under system path [/dm/dmdbms/data/GRP3_MPP_EP11] is running...[0].
checking if the database under system path [/dm/dmdbms/data/GRP3_MPP_EP11] is running, write dmrman info.
RESTORE DATABASE  CHECK......
RESTORE DATABASE , dbf collect......
RESTORE DATABASE , dbf refresh ......
RESTORE BACKUPSET [/dm/dmbak] START......
total 4 packages processed...
RESTORE DATABASE , UPDATE ctl file......
RESTORE DATABASE , REBUILD key file......
RESTORE DATABASE , CHECK db info......
RESTORE DATABASE , UPDATE db info......
total 5 packages processed!
CMD END.CODE:[0]
restore successfully.
time used: 8028.619(ms)
[dave@www.cndba.cn2 bin]$ 

#恢复数据库:
[dave@www.cndba.cn2 bin]$ ./dmrman CTLSTMT="RECOVER DATABASE '/dm/dmdbms/data/GRP3_MPP_EP11/dm.ini' FROM BACKUPSET '/dm/dmbak'"
dmrman V7.6.0.95-Build(2018.09.13-97108)ENT 
RECOVER DATABASE '/dm/dmdbms/data/GRP3_MPP_EP11/dm.ini' FROM BACKUPSET '/dm/dmbak'
file dm.key not found, use default license!
Global parameter value of RT_HEAP_TARGET is illegal, use min value!
checking if the database under system path [/dm/dmdbms/data/GRP3_MPP_EP11] is running...[4].
checking if the database under system path [/dm/dmdbms/data/GRP3_MPP_EP11] is running...[3].
checking if the database under system path [/dm/dmdbms/data/GRP3_MPP_EP11] is running...[2].
checking if the database under system path [/dm/dmdbms/data/GRP3_MPP_EP11] is running...[1].
checking if the database under system path [/dm/dmdbms/data/GRP3_MPP_EP11] is running...[0].
checking if the database under system path [/dm/dmdbms/data/GRP3_MPP_EP11] is running, write dmrman info.
EP[0] max_lsn: 44755
RESTORE RLOG  CHECK......
CMD END.CODE:[603],DESC:[no log generates while the backupset [/dm/dmbak] created]
no log generates while the backupset [/dm/dmbak] created
recover successfully!
time used: 7024.192(ms)
[dave@www.cndba.cn2 bin]$

在另一个备库重复以上步骤。

3 配置主库 GRP3_MPP_EP01

3.1 配置 dm.ini

配置主库实例名 GRP3_MPP_EP01的dm.ini 参数,修改如下:

#实例名,建议使用“组名_守护环境_序号”的命名方式,总长度不能超过 16
INSTANCE_NAME = GRP3_MPP_EP01
PORT_NUM = 5236  #数据库实例监听端口
DW_PORT = 5336   #守护环境下,监听守护进程连接端口
DW_ERROR_TIME = 60 #接收守护进程消息超时时间
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态
ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
MAL_INI = 1 #打开 MAL 系统
ARCH_INI = 1 #打开归档配置
MPP_INI = 1 #启用 MPP 配置
HA_INST_CHECK_FLAG = 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 是各实例对应的守护进程之间,以及守护进程和监视器之间的通信端口,配置如下:http://www.cndba.cn/cndba/dave/article/3678

MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间

[MAL_INST1]
MAL_INST_NAME = GRP3_MPP_EP01 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST = 192.168.56.191 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 5436  #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.20.191 #实例的对外服务 IP 地址
MAL_INST_PORT = 5236 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致
MAL_DW_PORT = 5536 #实例对应的守护进程监听 TCP 连接的端口

[MAL_INST2]
MAL_INST_NAME = GRP4_MPP_EP02
MAL_HOST = 192.168.56.193
MAL_PORT = 5438
MAL_INST_HOST = 192.168.20.193
MAL_INST_PORT = 5238
MAL_DW_PORT = 5538

[MAL_INST3]
MAL_INST_NAME = GRP3_MPP_EP11
MAL_HOST = 192.168.56.192
MAL_PORT = 5437
MAL_INST_HOST = 192.168.20.192
MAL_INST_PORT = 5237
MAL_DW_PORT = 5537

[MAL_INST4]
MAL_INST_NAME = GRP4_MPP_EP22
MAL_HOST = 192.168.56.194
MAL_PORT = 5439
MAL_INST_HOST = 192.168.20.194
MAL_INST_PORT = 5239
MAL_DW_PORT = 5539

3.3 配置 dmarch.ini

修改 dmarch.ini,配置本地归档和实时归档。除了本地归档外,其他归档配置项中的 ARCH_DEST 表示实例是 Primary 模式时,需要同步归档数据的目标实例名。
当前实例 GRP3_MPP_EP01 是主库,需要向 MPP 备库 GRP3_MPP_EP11 同步数据,因此实时归档的 ARCH_DEST 配置为 GRP3_MPP_EP11。http://www.cndba.cn/cndba/dave/article/3678

[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = GRP3_MPP_EP11 #实时归档目标实例名

[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dm/dmarch  #本地归档文件存放路径
ARCH_FILE_SIZE = 128  #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 0  #单位 Mb,0 表示无限制,范围 1024~4294967294M

3.4 配置 dmmpp.ctl

dmmpp.ctl 是二进制文件,由 dmmpp.ini 文本通过 dmctlcvt 工具转换而来, 先创建dmmpp.ini 配置文件,本例中两节点的 dmmpp.ini 配置如下:

[service_name1]
mpp_seq_no = 0
mpp_inst_name = GRP3_MPP_EP01
[service_name2] 
mpp_seq_no = 1
mpp_inst_name = GRP4_MPP_EP02

转换命令如下:

[dave@www.cndba.cn1 GRP3_MPP_EP01]$ dmctlcvt TYPE=2 SRC=/dm/dmdbms/data/GRP3_MPP_EP01/dmmpp.ini DEST=/dm/dmdbms/data/GRP3_MPP_EP01/dmmpp.ctl
DMCTLCVT V7.6.0.95-Build(2018.09.13-97108)ENT 
Can not open ini file !
convert txt to ctl success!

3.5 配置 dmwatcher.ini

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

[GRP3]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #自动切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 45430 #守护系统唯一 OGUID 值
INST_INI = /dm/dmdbms/data/GRP3_MPP_EP01/dm.ini #dm.ini 配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /dm/dmdbms/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阀值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阀值,默认关闭

3.6 生成 dmwatcher.ctl

同一个守护进程组,必须使用同一份 dmwatcher.ctl。因此,只需要使用 dmctlcvt工具生成一份 dmwatcher.ctl 文件,然后分别拷贝到各个数据库目录下即可。

在配置完成 dmwatcher.ini 后,使用 dmctlcvt 工具生成 dmwatcher.ctl:

[dave@www.cndba.cn1 data]$ dmctlcvt TYPE=3 SRC=/dm/dmdbms/data/GRP3_MPP_EP01/dmwatcher.ini DEST=/dm/dmdbms/data/GRP3_MPP_EP01
DMCTLCVT V7.6.0.95-Build(2018.09.13-97108)ENT 
Can not open ini file !
convert txt to ctl success!
[dave@www.cndba.cn1 data]$ 

#默认生成控制文件有个子目录,需要移动到父目录中:
#拷贝生成的 dmwatcher.ctl 文件到数据文件目录/dm/dmdbms/data/GRP3_MPP_EP01。
[dave@www.cndba.cn1 GRP3_MPP_EP01]$ cd GRP3
[dave@www.cndba.cn1 GRP3]$ ls
dmwatcher.ctl
[dave@www.cndba.cn1 GRP3]$ mv dmwatcher.ctl ../
[dave@www.cndba.cn1 GRP3]$

3.7 启动主库

以 mount 方式启动主库。http://www.cndba.cn/cndba/dave/article/3678

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

3.8 设置 OGUID

启动命令行工具 DIsql,使用 MPP 类型为 LOCAL 方式,登录主库设置 OGUID 值。

[dave@www.cndba.cn1 bin]$ ./disql SYSDBA/SYSDBA*LOCAL@LOCALHOST:5236

Server[LOCALHOST:5236]:mode is normal, state is mount
login used time: 8.817(ms)
disql V7.6.0.95-Build(2018.09.13-97108)ENT 
Connected to: DM 7.1.6.95
SQL> sp_set_oguid(45430);
DMSQL executed successfully
used time: 11.240(ms). Execute id is 1.

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

3.9 修改数据库模式

启动命令行工具 DIsql,使用 MPP 类型为 LOCAL 方式,登录主库修改数据库为Primary 模式。

[dave@www.cndba.cn1 bin]$ ./disql SYSDBA/SYSDBA*LOCAL@LOCALHOST:5236

Server[LOCALHOST:5236]:mode is normal, state is mount
login used time: 8.817(ms)
disql V7.6.0.95-Build(2018.09.13-97108)ENT 
Connected to: DM 7.1.6.95
used time: 11.240(ms). Execute id is 1.
SQL> alter database primary;
executed successfully
used time: 4.507(ms). Execute id is 0.

4 配置主库 GRP4_MPP_EP02

4.1 配置 dm.ini

配置主库的实例名为 GRP4_MPP_EP02,dm.ini 参数修改如下:

#实例名,建议使用“组名_守护环境_序号”的命名方式,总长度不能超过 16
INSTANCE_NAME = GRP4_MPP_EP02
PORT_NUM = 5238 #数据库实例监听端口
DW_PORT = 5338 #守护环境下,监听守护进程连接端口
DW_ERROR_TIME = 60 #接收守护进程消息超时时间
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态
ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
MAL_INI = 1 #打开 MAL 系统
ARCH_INI = 1 #打开归档配置
MPP_INI = 1 #启用 MPP 配置
HA_INST_CHECK_FLAG = 1 #检测是否多个实例进程同时启动
RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志发送信息

4.2 配置 dmmal.ini

直接将实例 GRP3_MPP_EP01 配置的 dmmal.ini 拷贝到/dm/dmdbms/data/GRP4_MPP_EP02 目录中。

http://www.cndba.cn/cndba/dave/article/3678

4.3 配置 dmarch.ini

修改 dmarch.ini,配置本地归档和实时归档。除了本地归档外,其他归档配置项中的 ARCH_DEST 表示实例是 Primary 模式时,需要同步归档数据的目标实例名。
当前实例 GRP4_MPP_EP02 是主库,需要向 MPP 备库 GRP4_MPP_EP22 同步数据,因此实时归档的 ARCH_DEST 配置为 GRP4_MPP_EP22。

[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = GRP4_MPP_EP22 #实时归档目标实例名

[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dm/dmarch  #本地归档文件存放路径
ARCH_FILE_SIZE = 128  #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 0  #单位 Mb,0 表示无限制,范围 1024~4294967294M

4.4 配置 dmmpp.ctl

直接将GRP3_MPP_EP01的 dmmpp.ctl 复制到/dm/dmdbms/data/GRP4_MPP_EP02 目录。

[dave@www.cndba.cn1 GRP3_MPP_EP01]$ scp dmmpp.ctl 192.168.20.193:/dm/dmdbms/data/GRP4_MPP_EP02/
dmdba@192.168.20.193's password: 
dmmpp.ctl                                                                                                                                 100%   41KB  40.6KB/s   00:00    
[dave@www.cndba.cn1 GRP3_MPP_EP01]$

4.5 配置 dmwatcher.ini

修改 dmwatcher.ini 配置守护进程,配置为全局守护类型,使用自动切换模式。http://www.cndba.cn/cndba/dave/article/3678

[GRP4]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #自动切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 45431 #守护系统唯一 OGUID 值
INST_INI = /dm/dmdbms/data/GRP4_MPP_EP02/dm.ini #dm.ini 配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /dm/dmdbms/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阀值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阀值,默认关闭

4.6 生成 dmwatcher.ctl

同一个守护进程组,必须使用同一份 dmwatcher.ctl。因此,只需要使用 dmctlcvt工具生成一份 dmwatcher.ctl 文件,然后分别拷贝到各个数据库目录下即可。
在配置完成 dmwatcher.ini 后,使用 dmctlcvt 工具生成 dmwatcher.ctl:

[dave@www.cndba.cn3 GRP4_MPP_EP02]$ dmctlcvt TYPE=3 SRC=/dm/dmdbms/data/GRP4_MPP_EP02/dmwatcher.ini DEST=/dm/dmdbms/data/GRP4_MPP_EP02
DMCTLCVT V7.6.0.95-Build(2018.09.13-97108)ENT 
Can not open ini file !
convert txt to ctl success!

#默认生成控制文件有个子目录,需要移动到父目录中:
[dave@www.cndba.cn3 GRP4_MPP_EP02]$ cd GRP4
[dave@www.cndba.cn3 GRP4]$ ls
dmwatcher.ctl
[dave@www.cndba.cn3 GRP4]$ mv dmwatcher.ctl ../
[dave@www.cndba.cn3 GRP4]$

4.7 启动主库

以 mount 方式启动主库

[dave@www.cndba.cn3 GRP4_MPP_EP02]$ dmserver /dm/dmdbms/data/GRP4_MPP_EP02/dm.ini mounthttp://www.cndba.cn/cndba/dave/article/3678

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

4.8 设置 OGUID

启动命令行工具 DIsql,使用 MPP 类型为 LOCAL 方式,登录主库设置 OGUID 值。

[dave@www.cndba.cn3 ~]$ disql SYSDBA/SYSDBA*LOCAL@LOCALHOST:5238

Server[LOCALHOST:5238]:mode is normal, state is mount
login used time: 9.940(ms)
disql V7.6.0.95-Build(2018.09.13-97108)ENT 
Connected to: DM 7.1.6.95
SQL> sp_set_oguid(45431);
DMSQL executed successfully
used time: 17.918(ms). Execute id is 1.

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

4.9 修改数据库模式

启动命令行工具 DIsql,使用 MPP 类型为 LOCAL 方式,登录主库修改数据库为Primary 模式。

[dave@www.cndba.cn3 ~]$ disql SYSDBA/SYSDBA*LOCAL@LOCALHOST:5238

Server[LOCALHOST:5238]:mode is normal, state is mount
login used time: 9.940(ms)
disql V7.6.0.95-Build(2018.09.13-97108)ENT 
Connected to: DM 7.1.6.95
SQL> alter database primary;
executed successfully
used time: 6.577(ms). Execute id is 0.
SQL>

5 配置备库 GRP3_MPP_EP11

5.1 配置 dm.ini

配置备库实例名 GRP3_MPP_EP11的参数,数据守护 V2.1 中,MPP 备库也需要打开 MPP_INI 配置,dm.ini 参数修改如下:

#实例名,建议使用“组名_守护环境_序号”的命名方式,总长度不能超过 16
INSTANCE_NAME = GRP3_MPP_EP11
PORT_NUM = 5237 #数据库实例监听端口
DW_PORT = 5337 #守护环境下,监听守护进程连接端口
DW_ERROR_TIME = 60 #接收守护进程消息超时时间
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态
ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
MAL_INI = 1 #打开 MAL 系统
ARCH_INI = 1 #打开归档配置
MPP_INI = 1 #打开 MPP 配置
HA_INST_CHECK_FLAG = 1 #检测是否多个实例进程同时启动
RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志重演信息

5.2 配置 dmmal.ini

直接将实例 GRP3_MPP_EP01 配置的 dmmal.ini 拷贝到/dm/dmdbms/data/GRP3_MPP_EP11目录中。

5.3 配置 dmarch.ini

修改 dmarch.ini,配置本地归档和实时归档。除了本地归档外,其他归档配置项中的 ARCH_DEST 表示实例是 Primary 模式时,需要同步归档数据的目标实例名。
当前实例 GRP3_MPP_EP11 是备库,守护系统配置完成后,可能在各种故障处理中,GRP3_MPP_EP11 切换为新的主库,正常情况下,GRP3_MPP_EP01 会切换为新的备库,需要向 GRP3_MPP_EP01 同步数据,因此 实 时 归档的 ARCH_DEST 配置为GRP3_MPP_EP01。

[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = GRP3_MPP_EP01 #实时归档目标实例名

[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dm/dmarch  #本地归档文件存放路径
ARCH_FILE_SIZE = 128  #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 0  #单位 Mb,0 表示无限制,范围 1024~4294967294M

5.4 配置 dmmpp.ctl

数据守护 V2.1 中,MPP 备库同样需要配置 dmmpp.ctl 文件,可以直接从主库上拷贝。本例中将实例 GRP3_MPP_EP01 配置的 dmmpp.ctl 拷贝到/dm/dmdbms/data/GRP3_MPP_EP11目录中。

[dave@www.cndba.cn1 GRP3_MPP_EP01]$ scp dmmpp.ctl 192.168.20.192:/dm/dmdbms/data/GRP3_MPP_EP11/
dmdba@192.168.20.192's password: 
dmmpp.ctl                                                                                                                                 100%   41KB  40.6KB/s   00:00    
[dave@www.cndba.cn1 GRP3_MPP_EP01]$

5.5 配置 dmwatcher.ini

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

[GRP3]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #自动切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 45430 #守护系统唯一 OGUID 值
INST_INI = /dm/dmdbms/data/GRP3_MPP_EP11/dm.ini #dm.ini 配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /dm/dmdbms/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阀值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阀值,默认关闭

5.6 生成 dmwatcher.ctl

同一个守护进程组,必须使用同一份 dmwatcher.ctl。因此,只需要使用 dmctlcvt工具生成一份 dmwatcher.ctl 文件,然后分别拷贝到各个数据库目录下即可。
在配置完成 dmwatcher.ini 后,使用 dmctlcvt 工具生成 dmwatcher.ctl:

[dave@www.cndba.cn2 GRP3_MPP_EP11]$ dmctlcvt TYPE=3 SRC=/dm/dmdbms/data/GRP3_MPP_EP11/dmwatcher.ini DEST=/dm/dmdbms/data/GRP3_MPP_EP11
DMCTLCVT V7.6.0.95-Build(2018.09.13-97108)ENT 
Can not open ini file !
convert txt to ctl success!

#默认生成控制文件有个子目录,需要移动到父目录中:
[dave@www.cndba.cn2 GRP3_MPP_EP11]$ cd GRP3
[dave@www.cndba.cn2 GRP3]$ ls
dmwatcher.ctl
[dave@www.cndba.cn2 GRP3]$ mv dmwatcher.ctl ../
[dave@www.cndba.cn2 GRP3]$

5.7 启动备库

以 mount 方式启动备库

[dave@www.cndba.cn3 GRP4_MPP_EP02]$ dmserver /dm/dmdbms/data/GRP3_MPP_EP11/dm.ini mount
一定要以 mount 方式启动数据库实例,否则系统启动时会重构回滚表空间,生成 Redo 日志;并且,启动后应用可能连接到数据库实例进行操作,破坏主备库的数据一致性。数据守护配置结束后,守护进程会自动 Open 数据库。

5.8 设置 OGUID

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

[dave@www.cndba.cn2 dmbak]$ disql SYSDBA/SYSDBA@LOCALHOST:5237

Server[LOCALHOST:5237]:mode is normal, state is mount
login used time: 17.146(ms)
disql V7.6.0.95-Build(2018.09.13-97108)ENT 
Connected to: DM 7.1.6.95
SQL> sp_set_oguid(45430);
DMSQL executed successfully
used time: 20.943(ms). Execute id is 1.

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

5.9 修改数据库模式

启动命令行工具 DIsql,登录实例修改数据库为 Standby 模式。

SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
DMSQL executed successfully
used time: 10.559(ms). Execute id is 2.
SQL> ALTER DATABASE STANDBY;
executed successfully
used time: 7.439(ms). Execute id is 0.
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
DMSQL executed successfully
used time: 7.193(ms). Execute id is 3.
SQL>

6 配置备库 GRP4_MPP_EP22

6.1 配置 dm.ini

配置备库实例名为 GRP4_MPP_EP22,数据守护 V2.1 中,MPP 备库也需要打开 MPP_INI 配置,dm.ini 参数修改如下:

#实例名,建议使用“组名_守护环境_序号”的命名方式,总长度不能超过 16
INSTANCE_NAME = GRP4_MPP_EP22
PORT_NUM = 5239 #数据库实例监听端口
DW_PORT = 5339 #守护环境下,监听守护进程连接端口
DW_ERROR_TIME = 60 #接收守护进程消息超时时间
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态
ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
MAL_INI = 1 #打开 MAL 系统
ARCH_INI = 1 #打开归档配置
MPP_INI = 1 #打开 MPP 配置
HA_INST_CHECK_FLAG = 1 #检测是否多个实例进程同时启动
RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志重演信息

6.2 配置 dmmal.ini

直接将实例 GRP3_MPP_EP01 配置的 dmmal.ini 拷贝到/dm/dmdbms/data/GRP4_MPP_EP22目录中。

6.3 配置 dmarch.ini

修改 dmarch.ini,配置本地归档和实时归档。除了本地归档外,其他归档配置项中的 ARCH_DEST 表示实例是 Primary 模式时,需要同步归档数据的目标实例名。
当前实例 GRP4_MPP_EP22 是备库,守护系统配置完成后,可能在各种故障处理中,GRP4_MPP_EP22 切换为新的主库,正常情况下,GRP4_MPP_EP02 会切换为新的备库,需要向 GRP4_MPP_EP02 同步数据,因此 实 时 归档的 ARCH_DEST 配置为GRP4_MPP_EP02。

[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = GRP4_MPP_EP02 #实时归档目标实例名

[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dm/dmarch  #本地归档文件存放路径
ARCH_FILE_SIZE = 128  #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 0  #单位 Mb,0 表示无限制,范围 1024~4294967294M

6.4 配置 dmmpp.ctl

数据守护 V2.1 中,MPP 备库同样需要配置 dmmpp.ctl 文件,可以直接从主库上拷贝。本例中将实例 GRP3_MPP_EP01 配置的 dmmpp.ctl 拷贝到/dm/dmdbms/data/GRP4_MPP_EP22目录中。

[dave@www.cndba.cn1 GRP3_MPP_EP01]$ scp dmmpp.ctl 192.168.20.194:/dm/dmdbms/data/GRP4_MPP_EP22/
dmdba@192.168.20.194's password: 
dmmpp.ctl                                                                                                                                 100%   41KB  40.6KB/s   00:00    
[dave@www.cndba.cn1 GRP3_MPP_EP01]$

6.5 配置 dmwatcher.ini

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

[GRP4]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #自动切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 45431 #守护系统唯一 OGUID 值
INST_INI = /dm/dmdbms/data/GRP4_MPP_EP22/dm.ini #dm.ini 配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /dm/dmdbms/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阀值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阀值,默认关闭

6.6 生成 dmwatcher.ctl

同一个守护进程组,必须使用同一份 dmwatcher.ctl。因此,只需要使用 dmctlcvt工具生成一份 dmwatcher.ctl 文件,然后分别拷贝到各个数据库目录下即可。
在配置完成 dmwatcher.ini 后,使用 dmctlcvt 工具生成 dmwatcher.ctl:

[dave@www.cndba.cn4 GRP4_MPP_EP22]$ dmctlcvt TYPE=3 SRC=/dm/dmdbms/data/GRP4_MPP_EP22/dmwatcher.ini DEST=/dm/dmdbms/data/GRP4_MPP_EP22
DMCTLCVT V7.6.0.95-Build(2018.09.13-97108)ENT 
Can not open ini file !
convert txt to ctl success!

#默认生成控制文件有个子目录,需要移动到父目录中:
[dave@www.cndba.cn4 GRP4_MPP_EP22]$ cd GRP4
[dave@www.cndba.cn4 GRP4]$ ls
dmwatcher.ctl
[dave@www.cndba.cn4 GRP4]$ mv dmwatcher.ctl ../
[dave@www.cndba.cn4 GRP4]$

6.7 启动备库

以 mount 方式启动备库

[dave@www.cndba.cn3 GRP4_MPP_EP02]$ dmserver /dm/dmdbms/data/GRP4_MPP_EP22/dm.ini mount

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

6.8 设置 OGUID

启动命令行工具 DIsql,登录实例设置 OGUID 值。

[dave@www.cndba.cn4 ~]$ disql SYSDBA/SYSDBA@LOCALHOST:5239

Server[LOCALHOST:5239]:mode is normal, state is mount
login used time: 9.617(ms)
disql V7.6.0.95-Build(2018.09.13-97108)ENT 
Connected to: DM 7.1.6.95
SQL> sp_set_oguid(45431);
DMSQL executed successfully
used time: 19.172(ms). Execute id is 1.

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

6.9 修改数据库模式

启动命令行工具 DIsql,登录实例修改数据库为 Standby 模式:

SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1); 
DMSQL executed successfully
used time: 7.289(ms). Execute id is 2.
SQL> ALTER DATABASE STANDBY; 
executed successfully
used time: 6.537(ms). Execute id is 0.
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
DMSQL executed successfully
used time: 9.706(ms). Execute id is 3.
SQL>

7 配置监视器并启动

7.1 配置监视器文件

由于主备库的守护进程配置为自动切换模式,因此这里选择配置确认监视器。和普通监视器相比,确认监视器除了相同的命令支持外,在主库发生故障时,能够自动通知备库接管为新的主库,具有自动故障处理的功能。
故障自动切换模式下,必须配置确认监视器,且确认监视器最多只能配置一个。

在监控节点的/dm/dmdbms/data目录下创建并修改 dmmonitor.ini 配置确认监视器,其中 MON_DW_IP 中的 IP 和 PORT 和dmmal.ini 中的 MAL_HOST 和 MAL_DW_PORT 配置项保持一致。

MON_DW_CONFIRM = 1 #确认监视器模式
MON_LOG_PATH = /dm/dmdbms/log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32 #每个日志文件最大 32M
MON_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间

[GRP3]
MON_INST_OGUID = 45430 #组 GRP1 的唯一 OGUID 值 
#以下配置为监视器到组 GRP1 的守护进程的连接信息,以“IP:PORT”的形式配置
#IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT
MON_DW_IP = 192.168.56.191:5536
MON_DW_IP = 192.168.56.192:5537

[GRP4]
MON_INST_OGUID = 45431 #组 GRP2 的唯一 OGUID 值 
#以下配置为监视器到组 GRP2 的守护进程的连接信息,以“IP:PORT”的形式配置
#IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT
MON_DW_IP = 192.168.56.193:5538
MON_DW_IP = 192.168.56.194:5539

7.2 注册服务

在监视节点用root用户执行:

[root@monitor ~]# /dm/dmdbms/script/root/dm_service_installer.sh -t dmmonitor -i /dm/dmdbms/data/dmmonitor.ini -p dave
Move the service script file(/dm/dmdbms/bin/DmMonitorServicedave to /etc/rc.d/init.d/DmMonitorServicedave)
Finished to create the service (DmMonitorServicedave)
[root@monitor ~]#

7.3 启动监视器

[root@monitor ~]# service DmMonitorServicedave start
Starting DmMonitorServicedave:                             [ OK ]
[root@monitor ~]# ps -ef|grep monitor
avahi     1274     1  0 03:54 ?        00:00:00 avahi-daemon: running [monitor-2.local]
dmdba    22847     1  0 07:10 pts/1    00:00:00 /dm/dmdbms/bin/svc_ctl_linux dmmonitor /dm/dmdbms/data/dmmonitor.ini
root     22865 22525  0 07:11 pts/1    00:00:00 grep monitor
[root@monitor ~]#

8 注册并启动守护进程

8.1 注册守护进程服务

在所有节点注册守护进程服务:

[root@dm1 ~]# /dm/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -i /dm/dmdbms/data/GRP3_MPP_EP01/dmwatcher.ini -p GRP3_MPP_EP01
移动服务脚本文件(/dm/dmdbms/bin/DmWatcherServiceGRP3_MPP_EP01 到 /etc/rc.d/init.d/DmWatcherServiceGRP3_MPP_EP01)
创建服务(DmWatcherServiceGRP3_MPP_EP01)完成
[root@dm1 ~]# 

[root@dm3 ~]# /dm/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -i /dm/dmdbms/data/GRP4_MPP_EP02/dmwatcher.ini -p GRP4_MPP_EP02
Move the service script file(/dm/dmdbms/bin/DmWatcherServiceGRP4_MPP_EP02 to /etc/rc.d/init.d/DmWatcherServiceGRP4_MPP_EP02)
Finished to create the service (DmWatcherServiceGRP4_MPP_EP02)
[root@dm3 ~]# 

[root@dm2 ~]# /dm/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -i /dm/dmdbms/data/GRP3_MPP_EP11/dmwatcher.ini -p GRP3_MPP_EP11
Move the service script file(/dm/dmdbms/bin/DmWatcherServiceGRP3_MPP_EP11 to /etc/rc.d/init.d/DmWatcherServiceGRP3_MPP_EP11)
Finished to create the service (DmWatcherServiceGRP3_MPP_EP11)
[root@dm2 ~]# 

[root@dm4 dmbak]# /dm/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -i /dm/dmdbms/data/GRP4_MPP_EP22/dmwatcher.ini -p GRP4_MPP_EP22
Move the service script file(/dm/dmdbms/bin/DmWatcherServiceGRP4_MPP_EP22 to /etc/rc.d/init.d/DmWatcherServiceGRP4_MPP_EP22)
Finished to create the service (DmWatcherServiceGRP4_MPP_EP22)
[root@dm4 dmbak]#

8.2 启动守护进程

[root@dm1 ~]# service DmWatcherServiceGRP3_MPP_EP01 start
Starting DmWatcherServiceGRP3_MPP_EP01:                    [ OK ]
[root@dm1 ~]# 

[dave@www.cndba.cn2 ~]$ service DmWatcherServiceGRP3_MPP_EP11 start
Starting DmWatcherServiceGRP3_MPP_EP11:                    [ OK ]
[dave@www.cndba.cn2 ~]$ 

[dave@www.cndba.cn3 ~]$ service DmWatcherServiceGRP4_MPP_EP02 start
Starting DmWatcherServiceGRP4_MPP_EP02:                    [ OK ]
[dave@www.cndba.cn3 ~]$ 

[dave@www.cndba.cn4 ~]$ service DmWatcherServiceGRP4_MPP_EP22 start
Starting DmWatcherServiceGRP4_MPP_EP22:                    [ OK ]
[dave@www.cndba.cn4 ~]$

9 验证

9.1 MPP 验证

在MPP主节点1创建测试表:

[dave@www.cndba.cn1 ~]$ disql SYSDBA/SYSDBA

Server[LOCALHOST:5236]:mode is primary, state is open
login used time: 11.181(ms)
disql V7.6.0.95-Build(2018.09.13-97108)ENT 
Connected to: DM 7.1.6.95
SQL> create table cndba as select * from sysobjects;
executed successfully
used time: 46.844(ms). Execute id is 5.
SQL>

到MPP主节点2查询:MPP运行正常:

[dave@www.cndba.cn3 ~]$ disql SYSDBA/SYSDBA*LOCAL@LOCALHOST:5238

Server[LOCALHOST:5238]:mode is primary, state is open
login used time: 9.370(ms)
disql V7.6.0.95-Build(2018.09.13-97108)ENT 
Connected to: DM 7.1.6.95
SQL> select count(1) from cndba;

LINEID     COUNT(1)            
---------- --------------------
1          0

used time: 4.213(ms). Execute id is 7.
SQL> exit
[dave@www.cndba.cn3 ~]$ disql SYSDBA/SYSDBA*GLOBAL@LOCALHOST:5238

Server[LOCALHOST:5238]:mode is primary, state is open
login used time: 11.090(ms)
disql V7.6.0.95-Build(2018.09.13-97108)ENT 
Connected to: DM 7.1.6.95
SQL> select count(1) from cndba;

LINEID     COUNT(1)            
---------- --------------------
1          1274

used time: 9.469(ms). Execute id is 417783.
SQL>

9.2 数据守护验证

#在GRP3 备节点查询:
[dave@www.cndba.cn2 ~]$  disql SYSDBA/SYSDBA@LOCALHOST:5237

Server[LOCALHOST:5237]:mode is standby, state is mount
login used time: 8.880(ms)
disql V7.6.0.95-Build(2018.09.13-97108)ENT 
Connected to: DM 7.1.6.95
SQL> select count(1) from cndba;
select count(1) from cndba;
[-510]:Error in line: 1
System in mount status.
used time: 1.414(ms). Execute id is 0.
SQL> select count(1) from cndba;
select count(1) from cndba;
[-510]:Error in line: 1
System in mount status.
used time: 0.907(ms). Execute id is 0.
SQL> alter database open;
alter database open;
[-720]:Error in line: 1
Dmwatcher is active, or current config not allowed to alter database.
used time: 0.612(ms). Execute id is 0.
SQL>

在GRP4的备节点查询:

[dave@www.cndba.cn4 ~]$ disql SYSDBA/SYSDBA@LOCALHOST:5239

Server[LOCALHOST:5239]:mode is standby, state is mount
login used time: 9.359(ms)
disql V7.6.0.95-Build(2018.09.13-97108)ENT 
Connected to: DM 7.1.6.95
SQL> select count(1) from cndba;
select count(1) from cndba;
[-510]:Error in line: 1
System in mount status.
used time: 1.260(ms). Execute id is 0.
SQL>

两个备库都是mount无法查询。

在之前搭建的数据守护平台,备库都是可以直接查询的。 从目前的测试看,MPP架构下的数据守护,备库由守护进程自动管理,并且处于mount状态,无法查询。http://www.cndba.cn/cndba/dave/article/3678

确认下守护进程的信息,运行是正常的:

SQL> select * from v$dmwatcher;

LINEID     N_GROUP     GROUP_NAME INST_NAME     DW_TYPE DW_MODE AUTO_RESTART DW_STATUS DW_SUB_STATUS   LAST_MSG_TIME               SWITCH_COUNT CTL_NUM     INST_NUM   
---------- ----------- ---------- ------------- ------- ------- ------------ --------- --------------- --------------------------- ------------ ----------- -----------
           MAX_CONN_NUM
           ------------
1          1           GRP3       GRP3_MPP_EP01 GLOBAL  AUTO    1            OPEN      SUB_STATE_START 2019-09-13 01:07:40.000000  0            1           1
           2

2          1           GRP4       GRP4_MPP_EP02 GLOBAL  AUTO    1            OPEN      SUB_STATE_START 2029-03-12 19:11:14.000000  0            1           1
           2


used time: 6.578(ms). Execute id is 946357.
SQL> select * from v$mal_link_status;

LINEID     SRC_SITE      DEST_SITE     CTL_LINK_STATUS DATA_LINK_STATUS
---------- ------------- ------------- --------------- ----------------
1          GRP3_MPP_EP01 GRP4_MPP_EP02 CONNECTED       CONNECTED
2          GRP3_MPP_EP01 GRP3_MPP_EP11 CONNECTED       CONNECTED
3          GRP3_MPP_EP01 GRP4_MPP_EP22 CONNECTED       CONNECTED
4          GRP4_MPP_EP02 GRP3_MPP_EP01 CONNECTED       CONNECTED
5          GRP4_MPP_EP02 GRP3_MPP_EP11 CONNECTED       CONNECTED
6          GRP4_MPP_EP02 GRP4_MPP_EP22 CONNECTED       CONNECTED

6 rows got

used time: 12.497(ms). Execute id is 946359.
SQL>

10 小结

搭建测试了3套数据守护平台,总结几点经验如下:

1.实时主备和读写分离集群备库是可以查询的。
2.从测试看MPP 架构下的数据守护备库是mount状态,无法查询,受守护进程自动管理。
3.在我测试MPP架构数据守护时,DB_NAME 和 INSTANCE_NAME配置是一样的,从后面的配置经验来看,建议同一套数据守护平台使用同一个DB_NAME, 把INSTANCE_NAME 配置成不同即可,比如设置:DB_NAME=CNDBA, INSTANCE_NAME=GRP3_MPP_EP01,这样后面配置参数可以少修改很多。
4.设置oguid以及各种端口以及GROUP的编号,尽可能不要重复使用。 因为同一台主机上,只要端口不同,可以测试多个环境。 一旦端口冲突了,就只能运行一套。

版权声明:本文为博主原创文章,未经博主允许不得转载。

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
dave

dave

关注

人的一生应该是这样度过的:当他回首往事的时候,他不会因为虚度年华而悔恨,也不会因为碌碌无为而羞耻;这样,在临死的时候,他就能够说:“我的整个生命和全部精力,都已经献给世界上最壮丽的事业....."

  • 2283
    原创
  • 3
    翻译
  • 579
    转载
  • 196
    评论
  • 访问:8187143次
  • 积分:4428
  • 等级:核心会员
  • 排名:第1名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ