DM MPP集群(带交叉守护进程)安装配置

目录

DM MPP集群(带交叉守护进程)--安装配置... 3

1.    DM MPP架构基础... 3

2.    环境准备... 4

2.1     系统信息规划... 4

2.2     在 EP01 和 EP02 上分别安装软件并创建数据库... 5

2.3     在 EP01 和 EP02 上分别准备备库数据... 6

3.    配置主库 GRP1_MPP_EP01. 7

3.1     配置 dm.ini 7

3.2     配置 dmmal.ini 7

3.3     配置 dmarch.ini(实时归档)... 8

3.4     配置 dmmpp.ctl 8

3.5     以 Mount 方式启动主库... 9

3.6     设置 OGUID.. 9

3.7     修改数据库模式... 9

4.    配置主库 GRP2_MPP_EP02. 10

4.1     配置 dm.ini 10

4.2     配置 dmmal.ini 10

4.3     配置 dmarch.ini(实时归档)... 10

4.4     配置 dmmpp.ctl 11

4.5     以mount方式启动主库... 11

4.6     设置 OGUID.. 11

4.7     修改数据库模式... 11

5.    配置备库 GRP1_MPP_EP11. 11

5.1     配置 dm.ini 11

5.2     配置 dmmal.ini 12

5.3     配置 dmarch.ini(实时归档)... 12

5.4     配置 dmmpp.ctl 12

5.5     以mount方式启动备库... 12

5.6     设置 OGUID.. 12

5.7     修改数据库模式... 13

6.    配置备库 GRP2_MPP_EP22. 13

6.1     配置 dm.ini 13

6.2     配置 dmmal.ini 14

6.3     配置 dmarch.ini 14

6.4     配置 dmmpp.ctl 14

6.5     以 Mount 方式备库... 14

6.6     设置 OGUID.. 14

6.7     修改数据库模式... 15

7.    配置 dmwatcher.ini 15

7.1     在dm21机器上配置 dmwatcher.ini 15

7.2     在dm22机器上配置 dmwatcher.ini 16

7.3     分别启动 dm21、dm22 机器上的守护进程... 17

8.    配置并启动监视器... 17

9.    停止 MPP 系统... 18

10.      连接MPP集群数据库... 18

11.      MPP使用及基本的功能测试... 20

11.1   MPP集群状态信息... 20

11.2   MPP库状态信息(全局连接)... 23

11.3   MPP常用的操作命令... 23

11.4       建立分布表... 24

12.      在MPP中守护进程集群功能测试... 30

12.1       场景一:关机dm21. 30

12.2       场景二:开启dm21. 35

12.3       场景三:将GRP1_MPP_EP01切回到dm21上... 37

DM MPP集群(带交叉守护进程)--安装配置

注:本文旨在说明DM MPP集群基础的安装配置原理实现,理论上的实现。没有数据守护,不可靠,不能用于生产(用于生产应做成交叉守护的方式)

  1. DM MPP架构基

DM MPP系统基本的架构图:

DM MPP 采用完全对等无共享架构,对整个系统来说,每个 EP 作用都是一样的,用户可以连接到其中的任何一个进行操作。而对每个用户会话来说,EP 具有主从之分。用户会话实际连接的那个 EP 对该用户会话来说称为主 EP,其余的 EP 都称为从 EP。

若在 DM MPP 系统的运行过程中,某一 EP 发生故障停机,则整个 MPP 系统将处于不能正常服务的状态。当前所有的用户会话会被系统断开,不能进行全局登录,只能进行本地登录。当前所有的用户会话会被系统断开,不能进行全局登录,只能进行本地登录。因此,为了保证 MPP 系统的高可用性,我们强烈建议采用 DM MPP 与数据守护相结合的部署方案。如下图可靠性方案:

为了提高系统可靠性并节约硬件资源,DM MPP 主备系统可采用交叉守护的方式,即每个 EP 和其对应的备库实例不在同一台主机上,将 EP 与别的 EP 的备库放在一台主机上。

  1. 环境准备
  1. 系统信息规划

机器配置情况

主机名

内网

公网

角色

dm21

192.168.0.21

192.168.1.21

主库 GRP1_MPP_EP01

备库 GRP2_MPP_EP22

dm22

192.168.0.22

192.168.1.22

主库 GRP2_MPP_EP02

备库 GRP1_MPP_EP11

dm23

192.168.0.23

监视器

主库信息(因为是不同的主机,所以可以用相同的端口):

主库实例名

PORT_NUM

MAL_INST_DW_PORT

MAL_HOST(内网)

MAL_PORT

MAL_DW_PORT

MPP_SEQNO(MPP 实例序号)

GRP1_MPP_EP01

5236

5243

192.168.0.21

5337

5253

0

GRP2_MPP_EP02

5236

5243

192.168.0.22

5337

5253

1

备库信息(因为是不同的主机,所以可以用相同的端口):

备库实例名

PORT_NUM

MAL_INST_DW_PORT

MAL_HOST(内网)

MAL_PORT

MAL_DW_PORT

对应主库实例名

GRP1_MPP_EP11

5237

5244

192.168.0.22

5338

5254

GRP1_MPP_EP01

GRP2_MPP_EP22

5237

5244

192.168.0.21

5338

5254

GRP1_MPP_EP02

守护进程组信息(一般来说,每个单独的实例都是使用一个单独的守护进程守护。本文档中,由于同一台机器上有不同组的两个实例,我们可以只配置一个守护进程,同时守护两个实例):

组名

实例名

OGUID

所在机器

GRP1

GRP1_MPP_EP01(主库)

45330

192.168.0.21

GRP1_MPP_EP11(备库)

192.168.0.22

GRP2

GRP2_MPP_EP02 (主库)

45331

192.168.0.22

GRP2_MPP_EP22 (备库)

192.168.0.21

说明:一个守护进程组对应一套主备库!我这里只配置一个守护进程,两个组!

数据存放规划(采取机器交叉的方式配置两个备数据库,为了区分用了/dm/data/EP01BAK

主库实例名

主库存放的数据位置

对应的备库实例名

备库存放主库数据的位置

GRP1_MPP_EP01

位于主机dm21的:/dm/data/EP01目录中

GRP2_MPP_EP11

位于主机dm22的:/dm/data/EP01BAK目录中

GRP1_MPP_EP02

位于主机dm22的:/dm/data/EP02目录中

GRP2_MPP_EP12

位于主机dm21的:/dm/data/EP02BAK目录中

注意:DM MPP 各 EP 使用的 DM 服务器版本应一致,同时还应注意各 EP 所在主机的操作系统位数、大小端模式、时区及时间设置都应一致,否则可能造成意想不到的错误。

  1. 在 EP01 和 EP02 上分别安装软件并创建数据库

建库要求:在各 EP 上创建数据库时,要求有些初始化参数必须所有 EP 都相同,见《DM8大规模并行处理MPP.pdf》3.3.1 节表 3.3。我们建议各 EP 的数据库初始化参数都保持一致,以免产生错误。

DM软件安装步骤略,机器事先都安装了 DM,安装路径为’/dm/dmdbms/’,执行程序保存在’ /dm/dmdbms/bin’目录中,数据存放路径为’/dm/data/EP01’, ’/dm/data/EP02’。

这里只初始化实例和库。

在两个节点上分做如下一样的操作(初始化参数必须相同BLANK_PAD_MODE=0 LENGTH_IN_CHAR=0 USE_NEW_HASH=1):

节点1上(主库):

/dm/dmdbms/bin/dminit  path=/dm/data/EP01 BLANK_PAD_MODE=0 LENGTH_IN_CHAR=0 USE_NEW_HASH=1 DB_NAME=mppdb INSTANCE_NAME=GRP1_MPP_EP01

节点2上(主库):

/dm/dmdbms/bin/dminit  path=/dm/data/EP02 BLANK_PAD_MODE=0 LENGTH_IN_CHAR=0 USE_NEW_HASH=1 DB_NAME=mppdb INSTANCE_NAME=GRP2_MPP_EP02

注意:DB_NAME是一样的(因为是同一个库嘛),但是INSTANCE_NAME是不一样的(当然也可以一样,因为是不同的主机嘛),为了区分。

  1. 在 EP01 和 EP02 上分别准备备库数据

我这里用如下方法来分别准备两个备库数据:

1)、主库脱机备份

[dmdba@dm21 ~]$ mkdir -p /dm/bakup

[dmdba@dm21 ~]$ dmserver /dm/data/EP01/mppdb/dm.ini

输入exit正常退出。

注:dmrman备份,必须要启动过一次的数据库才能备份,否则报错!此时将上边初始化的库启一次再备即可。此处还没有做成服务,故做一次前台启动,然后关之,再备。

[dmdba@dm21 ~]$ dmrman CTLSTMT="BACKUP DATABASE  '/dm/data/EP01/mppdb/dm.ini'  FULL TO BACKUP_FILE1 BACKUPSET '/dm/bakup/bakup_full01'"

[dmdba@dm21 ~]$ ls -l /dm/bakup/*

total 5952

-rw-r--r-- 1 dmdba dinstall 6010368 Apr 18 09:58 bakup_full01.bak

-rw-r--r-- 1 dmdba dinstall   78336 Apr 18 09:58 bakup_full01.meta

[dmdba@dm22 ~]$ mkdir -p /dm/bakup/

[dmdba@dm22 ~]$ scp -r  dmdba@192.168.0.21:/dm/bakup/* /dm/bakup/

2)备库执行脱机数据库还原与恢复

[dmdba@dm22 ~]$ dmrman CTLSTMT="RESTORE DATABASE  to  '/dm/data/EP01BAK/mppdb'  FROM  BACKUPSET '/dm/bakup/bakup_full01'"

[dmdba@dm22 ~]$ grep -i EP01BAK  /dm/data/EP01BAK/mppdb/dm.ini

                CTL_PATH                        = /dm/data/EP01BAK/mppdb/dm.ctl     #ctl file path

                CTL_BAK_PATH                    = /dm/data/EP01BAK/mppdb/ctl_bak    #dm.ctl backup path

                SYSTEM_PATH                     = /dm/data/EP01BAK/mppdb            #system path

                CONFIG_PATH                     = /dm/data/EP01BAK/mppdb            #config path

                TEMP_PATH                       = /dm/data/EP01BAK/mppdb            #temporary file path

                BAK_PATH                        = /dm/data/EP01BAK/mppdb/bak        #backup file path

[dmdba@dm22 ~]$

可以看到restore后dm.ini中改了相关目录。

因为脱机备份没有产生任何 REDO 日志,所以此处省略恢复数据库的操作步骤。

[dmdba@dm22 ~]$ mkdir -p /dm/data/EP01BAK/mppdb/bak  && mkdir  -p /dm/data/EP01BAK/mppdb/ctl_bak

[dmdba@dm22 ~]$ dmrman CTLSTMT="RECOVER DATABASE '/dm/data/EP01BAK/mppdb/dm.ini' UPDATE DB_MAGIC"

注意: 主库传送日志时会判断永久魔数(permanent_magic这个值是否一样,确保是来自同一个数据守护环境中的库,否则传送不了日志。

SELECT PERMANENT_MAGIC;--数据库永久魔数

SELECT DB_MAGIC FROM V$RLOG;--数据库魔数

  1. 配置主库 GRP1_MPP_EP01
  1. 配置 dm.ini

修改EP01的dm.ini配置

[dmdba@dm21 ~]$ vi /dm/data/EP01/mppdb/dm.ini

#实例名,建议使用组名_守护环境_序号的命名方式,总长度不能超过 16

INSTANCE_NAME = GRP1_MPP_EP01

PORT_NUM = 5236 #数据库实例监听端口

DW_INACTIVE_INTERVAL = 60 #接收守护进程消息超时时间

ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID

ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间

MAL_INI = 1 #打开 MAL 系统

ARCH_INI = 1 #打开归档配置

MPP_INI = 1 #启用 MPP 配置

RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志发送信息

  1. 配置 dmmal.ini

配置 MAL 系统,各主备库的 dmmal.ini 配置必须完全一致。

[dmdba@dm21 ~]$ vi /dm/data/EP01/mppdb/dmmal.ini

MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔

MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间

[MAL_INST1]

 MAL_INST_NAME = GRP1_MPP_EP01 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致

 MAL_HOST = 192.168.0.21 #MAL 系统监听 TCP 连接的 IP 地址

 MAL_PORT = 5337 #MAL 系统监听 TCP 连接的端口

 MAL_INST_HOST = 192.168.1.21 #实例的对外服务 IP 地址

 MAL_INST_PORT = 5236 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致

 MAL_DW_PORT = 5253 #实例对应的守护进程监听 TCP 连接的端口,其他守护进程或监视器使用 MAL_HOST + MAL_DW_PORT 创建与该实例守护进程的 TCP 连接

 MAL_INST_DW_PORT = 5243 #实例监听守护进程 TCP 连接的端口

[MAL_INST2]

 MAL_INST_NAME = GRP2_MPP_EP02

 MAL_HOST = 192.168.0.22

 MAL_PORT = 5337

 MAL_INST_HOST = 192.168.1.22

 MAL_INST_PORT = 5236

 MAL_DW_PORT = 5253

 MAL_INST_DW_PORT = 5243

[MAL_INST3]

 MAL_INST_NAME = GRP1_MPP_EP11

 MAL_HOST = 192.168.0.22

 MAL_PORT = 5338

 MAL_INST_HOST = 192.168.1.22

 MAL_INST_PORT = 5237

 MAL_DW_PORT = 5254

 MAL_INST_DW_PORT = 5244

[MAL_INST4]

 MAL_INST_NAME = GRP2_MPP_EP22

 MAL_HOST = 192.168.0.21

 MAL_PORT = 5338

 MAL_INST_HOST = 192.168.1.21

 MAL_INST_PORT = 5237

 MAL_DW_PORT = 5254

 MAL_INST_DW_PORT = 5244

  1. 配置 dmarch.ini(实时归档)

当前实例 GRP1_MPP_EP01 是主库,需要向 MPP 备库 GRP1_MPP_EP11(192.168.0.22) 同步数据,因此实时归档的 ARCH_DEST 配置为 GRP1_MPP_EP11。

[dmdba@dm21 ~]$ mkdir /dm/arch/{EP01,EP02BAK}

[dmdba@dm21 ~]$ vi /dm/data/EP01/mppdb/dmarch.ini

[ARCHIVE_REALTIME1]

ARCH_TYPE = REALTIME #实时归档类型

ARCH_DEST = GRP1_MPP_EP11 #实时归档目标实例名

[ARCHIVE_LOCAL1]

ARCH_TYPE = LOCAL #本地归档类型

ARCH_DEST = /dm/arch/EP01 #本地归档文件存放路径

ARCH_FILE_SIZE = 128 #单位 Mb,本地单个归档文件最大值

ARCH_SPACE_LIMIT = 0 #单位 Mb0 表示无限制,范围 1024~4294967294M

  1. 配置 dmmpp.ctl

dmmpp.ctl 是二进制文件,由 dmmpp.ini 文本通过 dmctlcvt 工具转换而来。MPP 系统中所有 EP 的 dmmpp.ctl 完全相同。

[dmdba@dm21 ~]$ vi /dm/data/EP01/mppdb/dmmpp.ini

[service_name1]

mpp_seq_no = 0

mpp_inst_name = GRP1_MPP_EP01

[service_name2]

mpp_seq_no = 1

mpp_inst_name = GRP2_MPP_EP02

然后再用dmctlcvt工具转换成dmmpp.ctl文件。

dmctlcvt TYPE=2 SRC=/dm/data/EP01/mppdb/dmmpp.ini DEST=/dm/data/EP01/mppdb/dmmpp.ctl

  1. 以 Mount 方式启动主库

[dmdba@dm21 ~]$ /dm/dmdbms/bin/dmserver /dm/data/EP01/mppdb/dm.ini mount

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

  1. 设置 OGUID

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

[dmdba@dm21 ~]$ disql sysdba/SYSDBA:5236#"{MPP_TYPE=LOCAL}"

Server[LOCALHOST:5236]:mode is normal, state is mount

login used time : 2.105(ms)

disql V8

SQL>

SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);

sp_set_oguid(45330);

SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

注意:系统通过 OGUID 值确定一个守护进程组,由用户保证 OGUID 值的唯一性,并

确保数据守护系统中,数据库、守护进程和监视器配置相同的 OGUID 值。

  1. 修改数据库模式

SQL>alter database primary;

  1. 配置主库 GRP2_MPP_EP02
  1. 配置 dm.ini

[dmdba@dm22 ~]$ vi /dm/data/EP02/mppdb/dm.ini

#实例名,建议使用组名_守护环境_序号的命名方式,总长度不能超过 16

INSTANCE_NAME = GRP2_MPP_EP02

PORT_NUM = 5236 #数据库实例监听端口

DW_INACTIVE_INTERVAL = 60 #接收守护进程消息超时时间

ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID

ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间

MAL_INI = 1 #打开 MAL 系统

ARCH_INI = 1 #打开归档配置

MPP_INI = 1 #启用 MPP 配置

RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志发送信息

  1. 配置 dmmal.ini

将实 例 GRP1_MPP_EP01 配置的 dmmal.ini 拷 贝 到/dm/data/EP02/mppdb/ 目录中。

[dmdba@dm22 ~]$ scp dmdba@192.168.0.21:/dm/data/EP01/mppdb/dmmal.ini  /dm/data/EP02/mppdb/

  1. 配置 dmarch.ini(实时归档)

当前实例 GRP2_MPP_EP02 是主库,需要向 MPP 备库 GRP2_MPP_EP22 (192.168.0.21)同步数据,因此实时归档的 ARCH_DEST 配置为 GRP2_MPP_EP22。

[dmdba@dm22 ~]$ mkdir /dm/arch/{EP02,EP01BAK}

[dmdba@dm22 ~]$ vi /dm/data/EP02/mppdb/dmarch.ini

[ARCHIVE_REALTIME1]

ARCH_TYPE = REALTIME #实时归档类型

ARCH_DEST = GRP2_MPP_EP22 #实时归档目标实例名

[ARCHIVE_LOCAL1]

ARCH_TYPE = LOCAL #本地归档类型

ARCH_DEST = /dm/arch/EP02 #本地归档文件存放路径

ARCH_FILE_SIZE = 128 #单位 Mb,本地单个归档文件最大值

ARCH_SPACE_LIMIT = 0 #单位 Mb0 表示无限制,范围 1024~4294967294M

  1. 配置 dmmpp.ctl

[dmdba@dm22 ~]$ scp dmdba@192.168.0.21:/dm/data/EP01/mppdb/dmmpp.ctl  /dm/data/EP02/mppdb/

  1. 以mount方式启动主库

[dmdba@dm22 ~]$ /dm/dmdbms/bin/dmserver /dm/data/EP02/mppdb/dm.ini mount

  1. 设置 OGUID

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

[dmdba@dm22 ~]$ disql sysdba/SYSDBA:5236#"{MPP_TYPE=LOCAL}"

Server[LOCALHOST:5236]:mode is normal, state is mount

login used time : 2.105(ms)

disql V8

SQL>

SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);

sp_set_oguid(45331);

SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

  1. 修改数据库模式

SQL>alter database primary;

  1. 配置备库 GRP1_MPP_EP11

是GRP1_MPP_EP01主库对应的备库,是在192.168.0.22主机上进行配置,目录位置是:/dm/data/EP01BAK

  1. 配置 dm.ini

[dmdba@dm22 ~]$ vi /dm/data/EP01BAK/mppdb/dm.ini

#实例名,建议使用组名_守护环境_序号的命名方式,总长度不能超过 16

INSTANCE_NAME = GRP1_MPP_EP11

PORT_NUM = 5237 #数据库实例监听端口

DW_INACTIVE_INTERVAL = 60 #接收守护进程消息超时时间

ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID

ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间

MAL_INI = 1 #打开 MAL 系统

ARCH_INI = 1 #打开归档配置

MPP_INI = 1 #打开 MPP 配置

RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志重演信息

  1. 配置 dmmal.ini

[dmdba@dm22 ~]$ scp dmdba@192.168.0.21:/dm/data/EP01/mppdb/dmmal.ini  /dm/data/EP01BAK/mppdb/

  1. 配置 dmarch.ini(实时归档)

[dmdba@dm22 ~]$ vi /dm/data/EP01BAK/mppdb/dmarch.ini

[ARCHIVE_REALTIME1]

ARCH_TYPE = REALTIME #实时归档类型

ARCH_DEST = GRP1_MPP_EP01 #实时归档目标实例名

[ARCHIVE_LOCAL1]

ARCH_TYPE = LOCAL #本地归档类型

ARCH_DEST = /dm/arch/EP01BAK/ #本地归档文件存放路径

ARCH_FILE_SIZE = 128 #单位 Mb,本地单个归档文件最大值

ARCH_SPACE_LIMIT = 0 #单位 Mb0 表示无限制,范围 1024~4294967294M

  1. 配置 dmmpp.ctl

[dmdba@dm22 ~]$ scp dmdba@192.168.0.21:/dm/data/EP01/mppdb/dmmpp.ctl  /dm/data/EP01BAK/mppdb/

  1. 以mount方式启动备库

[dmdba@dm22 ~]$ /dm/dmdbms/bin/dmserver /dm/data/EP01BAK/mppdb/dm.ini mount

  1. 设置 OGUID

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

[dmdba@dm22 ~]$ disql  sysdba/SYSDBA:5237

Server[LOCALHOST:5237]:mode is normal, state is mount

login used time : 1.677(ms)

disql V8

SQL>

SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);

sp_set_oguid(45330);

SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

  1. 修改数据库模式

[dmdba@dm22 ~]$ disql  sysdba/SYSDBA:5237

SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);

ALTER DATABASE STANDBY;

SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

  1. 配置备库 GRP2_MPP_EP22

是GRP2_MPP_EP02主库对应的备库,是在192.168.0.21主机上进行配置,目录位置是:/dm/data/EP02BAK

  1. 配置 dm.ini

[dmdba@dm21 ~]$ vi /dm/data/EP02BAK/mppdb/dm.ini

#实例名,建议使用组名_守护环境_序号的命名方式,总长度不能超过 16

INSTANCE_NAME = GRP2_MPP_EP22

PORT_NUM = 5237 #数据库实例监听端口

DW_INACTIVE_INTERVAL = 60 #接收守护进程消息超时时间

ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID

ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间

MAL_INI = 1 #打开 MAL 系统

ARCH_INI = 1 #打开归档配置

MPP_INI = 1 #打开 MPP 配置

RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志重演信息

  1. 配置 dmmal.ini

[dmdba@dm21 ~]$ cp /dm/data/EP01/mppdb/dmmal.ini /dm/data/EP02BAK/mppdb/

  1. 配置 dmarch.ini

[ARCHIVE_REALTIME1]

ARCH_TYPE = REALTIME #实时归档类型

ARCH_DEST = GRP2_MPP_EP02 #实时归档目标实例名

[ARCHIVE_LOCAL1]

ARCH_TYPE = LOCAL #本地归档类型

ARCH_DEST = /dm/arch/EP02BAK #本地归档文件存放路径

ARCH_FILE_SIZE = 128 #单位 Mb,本地单个归档文件最大值

ARCH_SPACE_LIMIT = 0 #单位 Mb0 表示无限制,范围 1024~4294967294M

  1. 配置 dmmpp.ctl

[dmdba@dm21 ~]$ cp /dm/data/EP01/mppdb/dmmpp.ctl /dm/data/EP02BAK/mppdb/

  1. 以 Mount 方式备库

[dmdba@dm21 ~]$ /dm/dmdbms/bin/dmserver /dm/data/EP02BAK/mppdb/dm.ini mount

  1. 设置 OGUID

[dmdba@dm21 ~]$ disql  sysdba/SYSDBA:5237

Server[LOCALHOST:5237]:mode is normal, state is mount

login used time : 2.013(ms)

disql V8

SQL>

SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);

sp_set_oguid(45331);

SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

  1. 修改数据库模式

[dmdba@dm21 ~]$ disql  sysdba/SYSDBA:5237

SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);

ALTER DATABASE STANDBY;

SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

  1. 配置 dmwatcher.ini

一般来说,每个单独的实例都是使用一个单独的守护进程守护。本文档中,由于同一台机器上有不同组的两个实例,我们可以只配置一个守护进程,同时守护两个实例。

如下配置:

组名

实例名

OGUID

所在机器

GRP1

GRP1_MPP_EP01(主库)

45330

192.168.0.21

GRP1_MPP_EP11(备库)

192.168.0.22

GRP2

GRP2_MPP_EP02 (主库)

45331

192.168.0.22

GRP2_MPP_EP22 (备库)

192.168.0.21

说明:一个守护进程组对应一套主备库!我这里只配置一个守护进程,两个组!启动守护进程的配置文件dmwatcher.ini都放在主库上的/dm/data/EP01/mppdb/和/dm/data/EP02/mppdb/目录下。

  1. 在dm21机器上配置 dmwatcher.ini

配置为全局守护类型,使用自动切换模式。

[dmdba@dm21 ~]$ vi /dm/data/EP01/mppdb/dmwatcher.ini

[GRP1]

DW_TYPE = GLOBAL #全局守护类型

DW_MODE = AUTO #自动切换模式

DW_ERROR_TIME = 10 #远程守护进程故障认定时间

INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间

INST_ERROR_TIME = 10 #本地实例故障认定时间

INST_OGUID = 45330 #守护系统唯一 OGUID

INST_INI = /dm/data/EP01/mppdb/dm.ini #dm.ini 配置文件路径

INST_AUTO_RESTART = 1 #打开实例的自动启动功能

INST_STARTUP_CMD = /dm/dmdbms/bin/dmserver #命令行方式启动

RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭

RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭

[GRP2]

DW_TYPE = GLOBAL #全局守护类型

DW_MODE = AUTO #自动切换模式

DW_ERROR_TIME = 10 #远程守护进程故障认定时间

INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间

INST_ERROR_TIME = 10 #本地实例故障认定时间

INST_OGUID = 45331 #守护系统唯一 OGUID

INST_INI = /dm/data/EP02BAK/mppdb/dm.ini  #dm.ini 配置文件路径

INST_AUTO_RESTART = 1 #打开实例的自动启动功能

INST_STARTUP_CMD = /dm/dmdbms/bin/dmserver #命令行方式启动

RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭

RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭

  1. 在dm22机器上配置 dmwatcher.ini

配置为全局守护类型,使用自动切换模式。

[dmdba@dm22 ~]$ vi /dm/data/EP02/mppdb/dmwatcher.ini

[GRP1]

DW_TYPE = GLOBAL #全局守护类型

DW_MODE = AUTO #自动切换模式

DW_ERROR_TIME = 10 #远程守护进程故障认定时间

INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间

INST_ERROR_TIME = 10 #本地实例故障认定时间

INST_OGUID = 45330 #守护系统唯一 OGUID

INST_INI = /dm/data/EP01BAK/mppdb/dm.ini #dm.ini 配置文件路径

INST_AUTO_RESTART = 1 #打开实例的自动启动功能

INST_STARTUP_CMD = /dm/dmdbms/bin/dmserver #命令行方式启动

RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭

RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭

[GRP2]

DW_TYPE = GLOBAL #全局守护类型

DW_MODE = AUTO #自动切换模式

DW_ERROR_TIME = 10 #远程守护进程故障认定时间

INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间

INST_ERROR_TIME = 10 #本地实例故障认定时间

INST_OGUID = 45331 #守护系统唯一 OGUID

INST_INI = /dm/data/EP02/mppdb/dm.ini #dm.ini 配置文件路径

INST_AUTO_RESTART = 1 #打开实例的自动启动功能

INST_STARTUP_CMD = /dm/dmdbms/bin/dmserver #命令行方式启动

RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭

RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭

  1. 分别启动 dm21、dm22 机器上的守护进程

[dmdba@dm21 ~]$ /dm/dmdbms/bin/dmwatcher /dm/data/EP01/mppdb/dmwatcher.ini

[dmdba@dm22 ~]$ /dm/dmdbms/bin/dmwatcher /dm/data/EP02/mppdb/dmwatcher.ini

守护进程启动后,进入 Startup 状态,此时实例都处于 Mount 状态。守护进程开始

广播自身和其监控实例的状态信息,结合自身信息和远程守护进程的广播信息,守护进程将

本地实例 Open,并切换为 Open 状态。

实验表明: 我们可以看到,当启一边的watcher时,库是不会到open的,只有两边都完成watcher启动,库才会一起到open

  1. 配置并启动监视器

故障自动切换模式下,必须配置确认监视器,且确认监视器最多只能配置一个。

[dmdba@dm23 ~]$ vi /dm/data/dmmonitor.ini

MON_DW_CONFIRM = 1 #确认监视器模式

MON_LOG_PATH = /dm/data/log #监视器日志文件存放路径

MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件

MON_LOG_FILE_SIZE = 32 #每个日志文件最大 32M

MON_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间

[GRP1]

MON_INST_OGUID = 45330 # GRP1 的唯一 OGUID

#以下配置为监视器到组 GRP1 的守护进程的连接信息,以―IP:PORT‖的形式配置

#IP 对应 dmmal.ini 中的 MAL_HOSTPORT 对应 dmmal.ini 中的 MAL_DW_PORT

MON_DW_IP = 192.168.0.21:5253

MON_DW_IP = 192.168.0.22:5254

[GRP2]

MON_INST_OGUID = 45331 # GRP2 的唯一 OGUID

#以下配置为监视器到组 GRP2 的守护进程的连接信息,以―IP:PORT‖的形式配置

#IP 对应 dmmal.ini 中的 MAL_HOSTPORT 对应 dmmal.ini 中的 MAL_DW_PORT

MON_DW_IP = 192.168.0.22:5253

MON_DW_IP = 192.168.0.21:5254

启动监视器

[dmdba@dm23 ~]$ /dm/dmdbms/bin/dmmonitor /dm/data/dmmonitor.ini

  1. 停止 MPP 系统

需要停止 DM MPP 系统的运行时,只需要停止每个 EP 的 DM 实例即可,没有特别的顺序要求

另外说明:若在 DM MPP 系统的运行过程中,某一 EP 发生故障停机,则整个 MPP 系统将处于不能正常服务的状态。当前所有的用户会话会被系统断开,不能进行全局登录,只能进行本地登录。当前所有的用户会话会被系统断开,不能进行全局登录,只能进行本地登录。因此,为了保证 MPP 系统的高可用性,我们强烈建议采用 DM MPP 与数据守护相结合的部署方案

  1. 连接MPP集群数据库
  1. 理解全局连接与本地连接的区别

理解手册“3.1.5 全局连接与本地连接”

本地连接:disql sysdba/SYSDBA:5236#"{MPP_TYPE=LOCAL}"

[dmdba@dm22 ~]$ disql sysdba/SYSDBA:5236#"{MPP_TYPE=LOCAL}"

Server[LOCALHOST:5236]:mode is primary, state is open

login used time : 3.683(ms)

disql V8

SQL>

SQL> quit

[dmdba@dm22 ~]$ disql sysdba/SYSDBA:5237#"{MPP_TYPE=LOCAL}"

Server[LOCALHOST:5237]:mode is standby, state is open

login used time : 3.975(ms)

disql V8

SQL> quit

[dmdba@dm22 ~]$

全局连接:默认为全局连接,当然也可以:

disql sysdba/SYSDBA:5236#"{MPP_TYPE=GLOBAL}"

[dmdba@dm22 ~]$ disql sysdba/SYSDBA:5237

Server[LOCALHOST:5237]:mode is standby, state is open

login used time : 1.572(ms)

disql V8

SQL> quit

[dmdba@dm22 ~]$ disql sysdba/SYSDBA:5236

Server[LOCALHOST:5236]:mode is primary, state is open

login used time : 3.132(ms)

disql V8

SQL> quit

[dmdba@dm22 ~]$

  1. 配置通过服务名来连MPP库(全局连接

我这里通过WINDONS测试:

编辑:Windows 平台下位于%SystemRoot%\system32 目录下的: dm_svc.conf

# dm_svc.conf 文件

# #开头的行表示是注释

# 全局配置区

DMMPPDB=(192.168.0.21:5236,192.168.0.22:5236,192.168.0.21:5237,192.168.0.22:5237)

TIME_ZONE=(+480) #表示+8:00 时区

LANGUAGE=(cn)

#DMMPPDB 服务配置区

[DMMPPDB]

SWITCH_TIMES=(60)

SWITCH_INTERVAL=(1000)

EP_SELECTOR=(1)

AUTO_RECONNECT=(1)

#LOGIN_DSC_CTRL=1   #只连集群的主控节点

可以看到我从节点1通过服务名DMMPPDB连到了节点2上边。此时节点2相当于主服务,节点1相当于从了(参手册中的概念:3.1.2 主、从 EP)。另外注意这里是全局连接,用户建立的实际上是与整个 MPP 系统的全局连接。

  1. MPP使用及基本的功能测试

记住一点:主库5236端口、备库5237端

  1. MPP集群状态信息

show

2022-04-18 17:34:19

#================================================================================#

GROUP            OGUID       MON_CONFIRM     MODE            MPP_FLAG 

GRP1             45330       TRUE            AUTO            TRUE     

<<DATABASE GLOBAL INFO:>>

DW_IP               MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT   

192.168.0.21        5253         2022-04-18 17:33:29  GLOBAL    VALID     OPEN           GRP1_MPP_EP01    OK        1     1     OPEN        PRIMARY   DSC_OPEN       REALTIME  VALID   

EP INFO:

INST_IP             INST_PORT  INST_OK   INAME            ISTATUS     IMODE     DSC_SEQNO  DSC_CTL_NODE RTYPE     RSTAT    FSEQ            FLSN            CSEQ            CLSN            DW_STAT_FLAG         

192.168.1.21        5236       OK        GRP1_MPP_EP01    OPEN        PRIMARY   0          0            REALTIME  VALID    4356            29169           4356            29169           NONE                 

<<DATABASE GLOBAL INFO:>>

DW_IP               MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT   

192.168.0.22        5254         2022-04-18 17:33:30  GLOBAL    VALID     OPEN           GRP1_MPP_EP11    OK        1     1     OPEN        STANDBY   DSC_OPEN       REALTIME  VALID   

EP INFO:

INST_IP             INST_PORT  INST_OK   INAME            ISTATUS     IMODE     DSC_SEQNO  DSC_CTL_NODE RTYPE     RSTAT    FSEQ            FLSN            CSEQ            CLSN            DW_STAT_FLAG         

192.168.1.22        5237       OK        GRP1_MPP_EP11    OPEN        STANDBY   0          0            REALTIME  VALID    4144            29169           4144            29169           NONE                 

DATABASE(GRP1_MPP_EP11) APPLY INFO FROM (GRP1_MPP_EP01), REDOS_PARALLEL_NUM (1):

DSC_SEQNO[0], (RSEQ, SSEQ, KSEQ)[4356, 4356, 4356], (RLSN, SLSN, KLSN)[29169, 29169, 29169], N_TSK[0], TSK_MEM_USE[0]

REDO_LSN_ARR: (29169)

#--------------------------------------------------------------------------------#

2022-04-18 17:34:19

#--------------------------------------------------------------------------------#

GROUP            OGUID       MON_CONFIRM     MODE            MPP_FLAG 

GRP2             45331       TRUE            AUTO            TRUE     

<<DATABASE GLOBAL INFO:>>

DW_IP               MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT   

192.168.0.22        5253         2022-04-18 17:33:29  GLOBAL    VALID     OPEN           GRP2_MPP_EP02    OK        1     1     OPEN        PRIMARY   DSC_OPEN       REALTIME  VALID   

EP INFO:

INST_IP             INST_PORT  INST_OK   INAME            ISTATUS     IMODE     DSC_SEQNO  DSC_CTL_NODE RTYPE     RSTAT    FSEQ            FLSN            CSEQ            CLSN            DW_STAT_FLAG         

192.168.1.22        5236       OK        GRP2_MPP_EP02    OPEN        PRIMARY   0          0            REALTIME  VALID    4352            26190           4352            26190           NONE                 

<<DATABASE GLOBAL INFO:>>

DW_IP               MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT   

192.168.0.21        5254         2022-04-18 17:33:30  GLOBAL    VALID     OPEN           GRP2_MPP_EP22    OK        1     1     OPEN        STANDBY   DSC_OPEN       REALTIME  VALID   

EP INFO:

INST_IP             INST_PORT  INST_OK   INAME            ISTATUS     IMODE     DSC_SEQNO  DSC_CTL_NODE RTYPE     RSTAT    FSEQ            FLSN            CSEQ            CLSN            DW_STAT_FLAG         

192.168.1.21        5237       OK        GRP2_MPP_EP22    OPEN        STANDBY   0          0            REALTIME  VALID    4137            26190           4137            26190           NONE                 

DATABASE(GRP2_MPP_EP22) APPLY INFO FROM (GRP2_MPP_EP02), REDOS_PARALLEL_NUM (1):

DSC_SEQNO[0], (RSEQ, SSEQ, KSEQ)[4352, 4352, 4352], (RLSN, SLSN, KLSN)[26190, 26190, 26190], N_TSK[0], TSK_MEM_USE[0]

REDO_LSN_ARR: (26190)

#================================================================================#

tip

[monitor]         2022-04-18 18:20:53: Instance GRP1_MPP_EP01[PRIMARY, OPEN, ISTAT_SAME:TRUE] cannot join other instances, dmwatcher status is OPEN, SYSOPENHISTORY status is VALID

[monitor]         2022-04-18 18:20:53: Instance GRP1_MPP_EP01[PRIMARY, OPEN, ISTAT_SAME:TRUE] has no command to execute currently

[monitor]         2022-04-18 18:20:53: Instance GRP1_MPP_EP01[PRIMARY, OPEN, ISTAT_SAME:TRUE] is OK, dmwatcher status is OPEN, dw_type is GLOBAL

[monitor]         2022-04-18 18:20:53: Instance GRP1_MPP_EP11[STANDBY, OPEN, ISTAT_SAME:TRUE] can join instance GRP1_MPP_EP01[PRIMARY, OPEN, ISTAT_SAME:TRUE]

[monitor]         2022-04-18 18:20:53: Instance GRP1_MPP_EP11[STANDBY, OPEN, ISTAT_SAME:TRUE] has no command to execute currently

[monitor]         2022-04-18 18:20:53: Instance GRP1_MPP_EP11[STANDBY, OPEN, ISTAT_SAME:TRUE] is OK, dmwatcher status is OPEN, dw_type is GLOBAL

[monitor]         2022-04-18 18:20:53: Group(GRP1) current active instances are OK

[monitor]         2022-04-18 18:20:53: Instance GRP2_MPP_EP02[PRIMARY, OPEN, ISTAT_SAME:TRUE] cannot join other instances, dmwatcher status is OPEN, SYSOPENHISTORY status is VALID

[monitor]         2022-04-18 18:20:53: Instance GRP2_MPP_EP02[PRIMARY, OPEN, ISTAT_SAME:TRUE] has no command to execute currently

[monitor]         2022-04-18 18:20:53: Instance GRP2_MPP_EP02[PRIMARY, OPEN, ISTAT_SAME:TRUE] is OK, dmwatcher status is OPEN, dw_type is GLOBAL

[monitor]         2022-04-18 18:20:53: Instance GRP2_MPP_EP22[STANDBY, OPEN, ISTAT_SAME:TRUE] can join instance GRP2_MPP_EP02[PRIMARY, OPEN, ISTAT_SAME:TRUE]

[monitor]         2022-04-18 18:20:53: Instance GRP2_MPP_EP22[STANDBY, OPEN, ISTAT_SAME:TRUE] has no command to execute currently

[monitor]         2022-04-18 18:20:53: Instance GRP2_MPP_EP22[STANDBY, OPEN, ISTAT_SAME:TRUE] is OK, dmwatcher status is OPEN, dw_type is GLOBAL

[monitor]         2022-04-18 18:20:53: Group(GRP2) current active instances are OK

[monitor]         2022-04-18 18:20:53: Current active group(has active primary instance) mpp ctl files are same

[monitor]         2022-04-18 18:20:53: All groups' current active instances are OK!

  1. MPP库状态信息(全局连接

  1. MPP常用的操作命令

参手册中的《4.7 MPP 下系统过程与系统视图常见用法》

获取 EP 节点配置信息:

SELECT * FROM V$MPP_CFG_ITEM WHERE SF_GET_EP_SEQNO(ROWID) = SF_GET_SELF_EP_SEQNO();

获取当前会话连接的实例名

SELECT NAME FROM V$INSTANCE WHERE SF_GET_EP_SEQNO(ROWID) = SF_GET_SELF_EP_SEQNO();

获取表 T_RANGE 在每个实例上的数据行数

CALL SP_GET_EP_COUNT('SYSDBA','T_RANGE');

  1. 建立分布表

MPP 的数据分布类型和具体设置在建表时指定。在 MPP 模式下创建分布表,如果未指定列则默认为 RANDOMLY(随机)分布表;

测试如下:

  1. 创建哈希分布表测试

记住一点:主库5236端口、备库5237端口

创建哈希分布表 T_HASH,分布列为 C1,然后插入数据看是否会根据分布列进行自动分发。

[dmdba@dm21 ~]$ disql sysdba/SYSDBA:5236

Server[LOCALHOST:5236]:mode is primary, state is open

login used time : 2.696(ms)

disql V8

SQL> CREATE TABLE T_HASH(C1 INT, C2 CHAR(10)) DISTRIBUTED BY HASH (C1);

executed successfully

used time: 37.393(ms). Execute id is 500.

SQL>

分别在两个节点登后,主5236端口、备5237端口,都可以查到此表

插入数据分列测试一:

[dmdba@dm21 ~]$ disql sysdba/SYSDBA@DMMPPDB

insert into t_hash(c1,c2) values(11111,'x');

insert into t_hash(c1,c2) values(22222,'x');

insert into t_hash(c1,c2) values(33333,'x');

insert into t_hash(c1,c2) values(44,'44');

insert into t_hash(c1,c2) values(00,'00');

分别在所有节点的主备环境查询如下:

观察hash表主备数据分布情况:

我们这里可以得出一个实验结论:

  1. 当登陆dm21或dm22上以主库身份的端口5236查询数据,都可以看到一样的结果!!!
  2. 当登陆dm21或dm22上以备库身份的端口5237查询数据,看到的结果是不一样的!!!它只能看到本节点存放的数据!!!但是两个节点的所有备库都数据总和是一样的。

下边的截图更能说说这两点结论。

主库1(5236端口):GRP1_MPP_EP01与它对应的备库

节点一(dm21)存放三条数据。节点二(dm22)存放2条数据。我们在备库上可以看到相应的数据存放情况!

主库2(5236端口)GRP1_MPP_EP01和它对应的备库

节点二(dm22)存放两条数据。节点一(dm21)存放3条数据。我们在备库上可以看到相应的数据存放情况!

另外最简单的可以用本地登陆与全局登陆,也可以一目了然地看出数据分布情况:

  1. 创建范围分布表测试

创建范围分布表 T_RANGE,分布列为 C1。

[dmdba@dm21 ~]$ disql sysdba/SYSDBA:5236

SQL> CREATE TABLE T_RANGE (C1 INT, C2 CHAR(10)) DISTRIBUTED BY RANGE (C1) (VALUES LESS THAN(100) on GRP1_MPP_EP01, VALUES EQU OR LESS THAN (101) ON GRP2_MPP_EP02);

insert into T_RANGE (c1,c2) values(99,'less 100');

insert into T_RANGE (c1,c2) values(101,'equl 101');

insert into T_RANGE (c1,c2) values(200,'than 100');  --会报错,因为超过我的最大值!

insert into T_RANGE (c1,c2) values(9,'less 100');

insert into T_RANGE (c1,c2) values(0,'less 100');

commit;

分别在两个节点本地登后,都可以此数据。

节点1:

节点2:

结论:符合范围分布。

  1. 在MPP中守护进程集群功能测试
  1. 场景一:关机dm21

目的:现在关掉一台主机,看是否能正常服务(正常高可用),比如创建表,查询等。

比如关dm21

[root@dm21 ~]# poweroff

在监示器上显示:

因为我poweroff,故监示器不能及时更新在节点1(dm21)上的库信息,只能更新其节点1的 watcher信息!

仍可以查询全部信息:

做事务:

再做一条数据:

SQL> insert into t_hash(c1,c2) values('55555','ccccccc');

affect rows 1

used time: 1.609(ms). Execute id is 692670.

SQL> commit;

executed successfully

used time: 2.287(ms). Execute id is 692671.

SQL>

  1. 场景二:开启dm21

目的:看是否能在dm21上查到刚才的数据。

启动watcher就行,库不用启,因为配置了watcher可以自动启动库的!

[dmdba@dm21 ~]$ /dm/dmdbms/bin/dmwatcher /dm/data/EP01/mppdb/dmwatcher.ini

观察监示器:

可以看到,dm21都变成了备库并且是open的!现在在dm21上来查询数据。

数据OK!因为节点1现在都是备库,它们的数据和加起来是一样的!

  1. 场景三:将GRP1_MPP_EP01切回到dm21上

前提条件:要在监器show看一下所有状态是否OK?例如:规档是不是VALID的、watcher是不是OPEN的等等,否则在监示器上发出的命令有可能不成功,从而导致切换失败!

为了这一点最好登陆到各端口对应的库上去看。

切换如下:

switchover GRP1.GRP1_MPP_EP01

查询如下:

查询:

 更多学习内容参考:达梦数据库 - 新一代大型通用关系型数据库 | 达梦云适配中心 https://eco.dameng.com

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值