在之前的博客,我们了解了MPP 的概念,以及MPP环境的搭建,如下:
DM7 达梦数据库 大规模并行处理 MPP (1) — 基本概念和原理
https://www.cndba.cn/dave/article/3657
DM7 达梦数据库 大规模并行处理 MPP (2) — 环境搭建和使用
https://www.cndba.cn/dave/article/3658
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主库重复以上步骤,创建实例。
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 是各实例对应的守护进程之间,以及守护进程和监视器之间的通信端口,配置如下:
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。
[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 方式启动主库。
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 目录中。
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 配置守护进程,配置为全局守护类型,使用自动切换模式。
[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 mount
一定要以 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状态,无法查询。
确认下守护进程的信息,运行是正常的:
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的编号,尽可能不要重复使用。 因为同一台主机上,只要端口不同,可以测试多个环境。 一旦端口冲突了,就只能运行一套。
版权声明:本文为博主原创文章,未经博主允许不得转载。