目錄

  • 部署環境
  • 部署規劃
  • 主庫
  • 備庫
  • 守護進程規劃
  • 數據準備
  • 初始化實例
  • 主庫
  • 備庫
  • 註冊服務
  • 主庫
  • 備庫
  • 啓動主庫
  • 配置歸檔
  • 備份還原
  • 聯機備份EP01並脱機還原到EP11
  • 聯機備份EP02並脱機還原到EP22
  • 配置文件
  • 配置主庫 GRP1_MPP_EP01
  • dm.ini
  • dmmal.ini
  • dmarch.ini
  • dmmpp.ctl
  • 啓動主庫
  • 設置OGUID
  • 修改數據庫模式
  • 配置主庫GRP2_MPP_EP02
  • dm.ini
  • dmmal.ini
  • dmarch.ini
  • dmmpp.ctl
  • 啓動主庫
  • 設置OGUID
  • 修改數據庫模式
  • 配置備庫GRP1_MPP_EP11
  • dm.ini
  • dmmal.ini
  • dmarch.ini
  • dmmpp.ctl
  • 啓動備庫
  • 設置OGUID
  • 修改數據庫模式
  • 配置備庫GRP2_MPP_EP22
  • dm.ini
  • dmmal.ini
  • dmarch.ini
  • dmmpp.ctl
  • 啓動備庫
  • 設置OGUID
  • 修改數據庫模式
  • 配置dmwatcher
  • 配置dmmonitor
  • 啓動watcher
  • 啓動monitor
  • 客户端配置
  • 測試驗證

部署環境

機器名

IP地址

初始狀態

操作系統

A

8.142.141.128

172.21.215.74 (內網IP)

主庫 GRP1_MPP_EP01

備庫 GRP2_MPP_EP22

Debian 9

B

39.103.139.80

172.17.44.74 (內網IP)

主庫 GRP1_MPP_EP02

備庫 GRP2_MPP_EP11

Debian 9

C

本機

監視器

windows 11

部署規劃

主庫

實例名

PORT_NUM

MAL_INST_DW_PORT

MAL_HOST

MAL_PORT

MAL_DW_PORT

MPP_SEQNO

GRP1_MPP_EP01

5237

5243

172.21.215.74

5337

5253

0

GRP2_MPP_EP02

5237

5243

172.17.44.74

5337

5253

1

備庫

實例名

PORT_NUM

MAL_INST_DW_PORT

MAL_HOST

MAL_PORT

MAL_DW_PORT

MPP_SEQNO

GRP1_MPP_EP11

5238

5244

172.17.44.74

5338

5254

0

GRP2_MPP_EP22

5238

5244

172.21.215.74

5338

5254

1

守護進程規劃

組名

實例名

所在機器

GRP1

GRP1_MPP_EP01

172.21.215.74

GRP1_MPP_EP11

172.17.44.74

GRP2

GRP2_MPP_EP02

172.17.44.74

GRP2_MPP_EP22

172.21.215.74

數據準備

初始化實例

主庫

--A機器
dminit path=/dm8/data/ PAGE_SIZE=32 EXTENT_SIZE=32 CASE_SENSITIVE=y CHARSET=1 DB_NAME=EP01 INSTANCE_NAME=GRP1_MPP_EP01 PORT_NUM=5237

--B機器
dminit path=/dm8/data/ PAGE_SIZE=32 EXTENT_SIZE=32 CASE_SENSITIVE=y CHARSET=1 DB_NAME=EP02 INSTANCE_NAME=GRP2_MPP_EP02 PORT_NUM=5237

備庫

--A機器
dminit path=/dm8/data/ PAGE_SIZE=32 EXTENT_SIZE=32 CASE_SENSITIVE=y CHARSET=1 DB_NAME=EP22 INSTANCE_NAME=GRP2_MPP_EP22 PORT_NUM=5238

--B機器
dminit path=/dm8/data/ PAGE_SIZE=32 EXTENT_SIZE=32 CASE_SENSITIVE=y CHARSET=1 DB_NAME=EP11 INSTANCE_NAME=GRP1_MPP_EP11 PORT_NUM=5238

註冊服務

主庫

./dm_service_installer.sh -t dmserver -dm_ini /dm8/data/EP01/dm.ini -p EP01
./dm_service_installer.sh -t dmserver -dm_ini /dm8/data/EP02/dm.ini -p EP02

備庫

./dm_service_installer.sh -t dmserver -dm_ini /dm8/data/EP22/dm.ini -p EP22
./dm_service_installer.sh -t dmserver -dm_ini /dm8/data/EP11/dm.ini -p EP11

啓動主庫

root@lxm2:/home/dmdba/dmdbms/script/root# systemctl start DmServiceEP01.service 
root@lxm:/home/dmdba/dmdbms/script/root# systemctl start DmServiceEP02.service

配置歸檔

--A機器
dmdba@lxm2:~$ rlwrap disql SYSDBA/SYSDBA@localhost:5237

Server[localhost:5237]:mode is normal, state is open
login used time : 2.574(ms)
disql V8
SQL> ALTER DATABASE MOUNT;
executed successfully
used time: 0.643(ms). Execute id is 0.
SQL> ALTER DATABASE ADD ARCHIVELOG 'dest=/dm8/data/EP01/dm_arch,type=local,file_size=64,space_limit=20480';
executed successfully
used time: 3.270(ms). Execute id is 0.
SQL> alter database archivelog;
executed successfully
used time: 7.166(ms). Execute id is 0.
SQL> alter database open;
executed successfully
used time: 18.316(ms). Execute id is 0.
SQL> SELECT ARCH_MODE FROM V$DATABASE;

LINEID     ARCH_MODE
---------- ---------
1          Y

used time: 2.610(ms). Execute id is 55400.


--B機器
ALTER DATABASE MOUNT;
ALTER DATABASE ADD ARCHIVELOG 'dest=/dm8/data/EP02/dm_arch,type=local,file_size=64,space_limit=20480';
alter database archivelog;
alter database open;
SELECT ARCH_MODE FROM V$DATABASE;

備份還原

聯機備份EP01並脱機還原到EP11

--備份
SQL> BACKUP DATABASE BACKUPSET '/dm8/data/BACKUP_FILE_01';
executed successfully
used time: 00:00:03.753. Execute id is 55501.
SQL> exit

--拷貝
dmdba@lxm2:/dm8/data$ scp -r BACKUP_FILE_01/ dmdba@39.103.139.80:/dm8/data
dmdba@39.103.139.80's password: 
BACKUP_FILE_01.bak                                                                                                                                       100%   89MB  13.4MB/s   00:06    
BACKUP_FILE_01.meta                                                                                                                                      100%   89KB   8.5MB/s   00:00    
BACKUP_FILE_01_1.bak                                                                                                                                     100%  485KB  15.0MB/s   00:00    
--備機還原
dmdba@lxm:~$ rlwrap dmrman
dmrman V8
RESTORE DATABASE '/dm8/data/EP11/dm.ini' FROM BACKUPSET '/dm8/data/BACKUP_FILE_01';
RESTORE DATABASE '/dm8/data/EP11/dm.ini' FROM BACKUPSET '/dm8/data/BACKUP_FILE_01';
file dm.key not found, use default license!
RECOVER DATABASE '/dm8/data/EP11/dm.ini' FROM BACKUPSET '/dm8/data/BACKUP_FILE_01';
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
[Percent:100.00%][Speed:0.00M/s][Cost:00:00:02][Remaining:00:00:00]                                 
restore successfully.
time used: 00:00:02.765
RMAN> RECOVER DATABASE '/dm8/data/EP11/dm.ini' FROM BACKUPSET '/dm8/data/BACKUP_FILE_01';
Database mode = 0, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[37302], file_lsn[37302]
[Percent:100.00%][Speed:0.00PKG/s][Cost:00:00:00][Remaining:00:00:00]                               
recover successfully!
time used: 00:00:02.540
RMAN> RECOVER DATABASE '/dm8/data/EP11/dm.ini' UPDATE DB_MAGIC;
RECOVER DATABASE '/dm8/data/EP11/dm.ini' UPDATE DB_MAGIC;
Database mode = 0, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[38498], file_lsn[38498]
recover successfully!
time used: 00:00:01.055

聯機備份EP02並脱機還原到EP22

--備份
SQL> BACKUP DATABASE BACKUPSET '/dm8/data/BACKUP_FILE_02';
--拷貝
dmdba@lxm2:/dm8/data$ scp -r BACKUP_FILE_02/ dmdba@8.142.141.128:/dm8/data
--備庫還原
RESTORE DATABASE '/dm8/data/EP22/dm.ini' FROM BACKUPSET '/dm8/data/BACKUP_FILE_02';
RECOVER DATABASE '/dm8/data/EP22/dm.ini' FROM BACKUPSET '/dm8/data/BACKUP_FILE_02';
RECOVER DATABASE '/dm8/data/EP22/dm.ini' UPDATE DB_MAGIC;

配置文件

配置主庫 GRP1_MPP_EP01

dm.ini

INSTANCE_NAME = GRP1_MPP_EP01
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 次的日誌發送信息

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 = 172.21.215.74 #MAL 系統監聽 TCP 連接的 IP 地址
 MAL_PORT = 5337 #MAL 系統監聽 TCP 連接的端口
 MAL_INST_HOST = 8.142.141.128 #實例的對外服務 IP 地址
 MAL_INST_PORT = 5237 #實例的對外服務端口,和 dm.ini 中的 PORT_NUM 一致
 MAL_DW_PORT = 5253 #實例對應的守護進程監聽 TCP 連接的端口
 MAL_INST_DW_PORT = 5243 #實例監聽守護進程 TCP 連接的端口
[MAL_INST2]
 MAL_INST_NAME = GRP2_MPP_EP02
 MAL_HOST = 172.17.44.74 
 MAL_PORT = 5337
 MAL_INST_HOST = 39.103.139.80
 MAL_INST_PORT = 5237
 MAL_DW_PORT = 5253
MAL_INST_DW_PORT = 5243
[MAL_INST3]
 MAL_INST_NAME = GRP1_MPP_EP11
 MAL_HOST = 172.17.44.74 
 MAL_PORT = 5338
 MAL_INST_HOST = 39.103.139.80
 MAL_INST_PORT = 5238
 MAL_DW_PORT = 5254
MAL_INST_DW_PORT = 5244
[MAL_INST4]
 MAL_INST_NAME = GRP2_MPP_EP22
 MAL_HOST = 172.21.215.74
 MAL_PORT = 5338
 MAL_INST_HOST = 8.142.141.128
 MAL_INST_PORT = 5238
 MAL_DW_PORT = 5254
 MAL_INST_DW_PORT = 5244

dmarch.ini

[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME #實時歸檔類型
ARCH_DEST = GRP1_MPP_EP11 #實時歸檔目標實例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地歸檔類型
ARCH_DEST = /dm8/data/EP01/arch #本地歸檔文件存放路徑
ARCH_FILE_SIZE = 128 #單位 Mb,本地單個歸檔文件最大值
ARCH_SPACE_LIMIT = 0 #單位 Mb,0 表示無限制,範圍 1024~4294967294M

dmmpp.ctl

--新建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

--生成dmmpp.ctl
dmctlcvt TYPE=2 SRC=/dm8/data/EP01/dmmpp.ini DEST=/dm8/data/EP01/dmmpp.ctl

啓動主庫

dmserver /dm/data/EP01/dm.ini mount

設置OGUID

dmdba@lxm2:~$ rlwrap disql SYSDBA/SYSDBA@localhost:5237#"{mpp_type=local}"

Server[localhost:5237]:mode is normal, state is mount
login used time : 1.708(ms)
disql V8
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
sp_set_oguid(45330);
DMSQL executed successfully
used time: 9.792(ms). Execute id is 0.
SQL> DMSQL executed successfully
used time: 9.320(ms). Execute id is 1.
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
DMSQL executed successfully
used time: 4.399(ms). Execute id is 2.

修改數據庫模式

SQL>alter database primary;

配置主庫GRP2_MPP_EP02

dm.ini

INSTANCE_NAME = GRP2_MPP_EP02
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 次的日誌發送信息

dmmal.ini

同GRP1_MPP_EP01.

dmarch.ini

[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME #實時歸檔類型
ARCH_DEST = GRP2_MPP_EP22 #實時歸檔目標實例名

[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地歸檔類型
ARCH_DEST = /dm8/data/EP02/arch#本地歸檔文件存放路徑
ARCH_FILE_SIZE = 128 #單位 Mb,本地單個歸檔文件最大值
ARCH_SPACE_LIMIT = 0 #單位 Mb,0 表示無限制,範圍 1024~4294967294M

dmmpp.ctl

同GRP1_MPP_EP01.

啓動主庫

dmserver /dm8/data/EP02/dm.ini mount

設置OGUID

SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
sp_set_oguid(45331);
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

修改數據庫模式

alter database primary;

配置備庫GRP1_MPP_EP11

dm.ini

INSTANCE_NAME = GRP1_MPP_EP11
PORT_NUM = 5238 #數據庫實例監聽端口
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 次的日誌重演信息

dmmal.ini

同GRP1_MPP_EP01.

dmarch.ini

[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME #實時歸檔類型
ARCH_DEST = GRP1_MPP_EP01 #實時歸檔目標實例名

[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地歸檔類型
ARCH_DEST = /dm8/data/EP11/arch#本地歸檔文件存放路徑
ARCH_FILE_SIZE = 128 #單位 Mb,本地單個歸檔文件最大值
ARCH_SPACE_LIMIT = 0 #單位 Mb,0 表示無限制,範圍 1024~4294967294M

dmmpp.ctl

同GRP1_MPP_EP01.

啓動備庫

dmserver /dm/data/EP11/DAMENG/dm.ini mount

設置OGUID

SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
sp_set_oguid(45330);
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

修改數據庫模式

SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1); 
ALTER DATABASE STANDBY; 
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

配置備庫GRP2_MPP_EP22

dm.ini

INSTANCE_NAME = GRP2_MPP_EP22
PORT_NUM = 5238 #數據庫實例監聽端口
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 次的日誌重演信息

dmmal.ini

同GRP1_MPP_EP01.

dmarch.ini

[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME #實時歸檔類型
ARCH_DEST = GRP2_MPP_EP02 #實時歸檔目標實例名

[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地歸檔類型
ARCH_DEST = /dm8/data/EP22/arch #本地歸檔文件存放路徑
ARCH_FILE_SIZE = 128 #單位 Mb,本地單個歸檔文件最大值
ARCH_SPACE_LIMIT = 0 #單位 Mb,0 表示無限制,範圍 1024~4294967294M

dmmpp.ctl

同GRP1_MPP_EP01.

啓動備庫

dmserver /dm8/data/EP22/dm.ini mount

設置OGUID

SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
sp_set_oguid(45331);
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

修改數據庫模式

SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1); 
ALTER DATABASE STANDBY; 
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

配置dmwatcher

#A機器
[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 = /dm8/data/EP01/dm.ini #dm.ini 配置文件路徑
INST_AUTO_RESTART = 1 #打開實例的自動啓動功能
INST_STARTUP_CMD = /home/dmdba/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 = /dm8/data/EP22/dm.ini #dm.ini 配置文件路徑
INST_AUTO_RESTART = 1 #打開實例的自動啓動功能
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver #命令行方式啓動
RLOG_SEND_THRESHOLD = 0 #指定主庫發送日誌到備庫的時間閾值,默認關閉
RLOG_APPLY_THRESHOLD = 0 #指定備庫重演日誌的時間閾值,默認關閉

#B機器
[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 = /dm8/data/EP11/dm.ini #dm.ini 配置文件路徑
INST_AUTO_RESTART = 1 #打開實例的自動啓動功能
INST_STARTUP_CMD = /home/dmdba/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 = /dm8/data/EP02/dm.ini #dm.ini 配置文件路徑
INST_AUTO_RESTART = 1 #打開實例的自動啓動功能
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver #命令行方式啓動
RLOG_SEND_THRESHOLD = 0 #指定主庫發送日誌到備庫的時間閾值,默認關閉
RLOG_APPLY_THRESHOLD = 0 #指定備庫重演日誌的時間閾值,默認關閉

配置dmmonitor

MON_DW_CONFIRM = 1 #確認監視器模式
MON_LOG_PATH = C:\dmdbms #監視器日誌文件存放路徑
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_HOST,PORT 對應 dmmal.ini 中的 MAL_DW_PORT
MON_DW_IP = 8.142.141.128:5253
MON_DW_IP = 39.103.139.80:5254
[GRP2]
MON_INST_OGUID = 45331 #組 GRP2 的唯一 OGUID 值
#以下配置為監視器到組 GRP2 的守護進程的連接信息,以―IP:PORT‖的形式配置
#IP 對應 dmmal.ini 中的 MAL_HOST,PORT 對應 dmmal.ini 中的 MAL_DW_PORT
MON_DW_IP = 8.142.141.128:5254
MON_DW_IP = 39.103.139.80:5253

啓動watcher

#A機器,B機器也相同。
dmdba@lxm2:~$ dmwatcher /dm8/data/dmwatcher.ini
DMWATCHER[4.0] V8
DMWATCHER[4.0] IS READY
show
2022-07-10 18:08:44
---------------------------------------------------------------------------
GROUP_NAME       TYPE      MODE      OGUID       MPP_FLAG  AUTO_RESTART DW_STATUS       DW_SUB_STATUS   DW_CTL_STATUS   
GRP1             GLOBAL    AUTO      45330       TRUE      TRUE         STARTUP         SUB_STATE_START VALID           

INST_OK   NAME             SVR_MODE  SYS_STATUS   RTYPE     FSEQ            FLSN            CSEQ            CLSN            DW_STAT_FLAG 
OK        GRP1_MPP_EP01    PRIMARY   MOUNT        REALTIME  5810            39581           5810            39581           0            
---------------------------------------------------------------------------

---------------------------------------------------------------------------
GROUP_NAME       TYPE      MODE      OGUID       MPP_FLAG  AUTO_RESTART DW_STATUS       DW_SUB_STATUS   DW_CTL_STATUS   
GRP2             GLOBAL    AUTO      45331       TRUE      TRUE         STARTUP         SUB_STATE_START VALID           

INST_OK   NAME             SVR_MODE  SYS_STATUS   RTYPE     FSEQ            FLSN            CSEQ            CLSN            DW_STAT_FLAG 
OK        GRP2_MPP_EP22    STANDBY   MOUNT        REALTIME  5084            38632           5084            38632           0            

DATABASE(GRP2_MPP_EP22) APPLY INFO:
REDOS_PARALLEL_NUM (1) 
DSC_SEQNO[0], (RSEQ, SSEQ, KSEQ)[5084, 5084, 5084], (RLSN, SLSN, KLSN)[38632, 38632, 38632], N_TSK[0], TSK_MEM_USE[0]
REDO_LSN_ARR: (38632)

---------------------------------------------------------------------------

啓動monitor

C:\dmdbms\bin>dmmonitor.exe C:\dmdbms\data\dmmonitor.ini
[monitor]         2022-07-10 18:11:20: DMMONITOR[4.0] V8
[monitor]         2022-07-10 18:11:20: DMMONITOR[4.0] IS READY.

[monitor]         2022-07-10 18:11:20: Received message from(GRP2_MPP_EP22)
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN
                  2022-07-10 18:11:19  OPEN           OK        GRP2_MPP_EP22    OPEN        STANDBY   NULL     3        42257           42257

[monitor]         2022-07-10 18:11:20: Received message from(GRP1_MPP_EP01)
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN
                  2022-07-10 18:11:19  OPEN           OK        GRP1_MPP_EP01    OPEN        PRIMARY   VALID    3        41955           41955

[monitor]         2022-07-10 18:11:20: Received message from(GRP2_MPP_EP02)
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN
                  2022-07-10 18:11:19  OPEN           OK        GRP2_MPP_EP02    OPEN        PRIMARY   VALID    3        42257           42258

[monitor]         2022-07-10 18:11:20: Received message from(GRP1_MPP_EP11)
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN
                  2022-07-10 18:11:19  OPEN           OK        GRP1_MPP_EP11    OPEN        STANDBY   VALID    3        41954           41954

客户端配置

dmsvc.conf

測試驗證

(a)測試建表和插入數據是否會根據分佈列進行自動分發。
(b)測試故障一個節點後,集羣和持續提供服務。

dmdba@lxm2:~$ rlwrap disql SYSDBA/SYSDBA@localhost:5237#"{mpp_type=global}"

Server[localhost:5237]:mode is primary, state is open
login used time : 2.571(ms)
disql V8
SQL> select * from V$INSTANCE;

LINEID     NAME          INSTANCE_NAME INSTANCE_NUMBER HOST_NAME SVR_VERSION                DB_VERSION          START_TIME          STATUS$ MODE$   OGUID       DSC_SEQNO   DSC_ROLE
---------- ------------- ------------- --------------- --------- -------------------------- ------------------- ------------------- ------- ------- ----------- ----------- --------
           BUILD_VERSION                      BUILD_TIME          
           ---------------------------------- --------------------
1          GRP1_MPP_EP01 GRP1_MPP_EP01 1               lxm2      DM Database Server x64 V8  DB Version: 0x7000c 2022-07-10 16:20:56 OPEN    PRIMARY 45330       0           NULL
           1-2-114-22.05.25-161267-10045-ENT  May 25 2022 11:22:12

2          GRP2_MPP_EP02 GRP2_MPP_EP02 2               lxm       DM Database Server x64 V8  DB Version: 0x7000c 2022-07-10 16:40:32 OPEN    PRIMARY 45331       0           NULL
           1-2-114-22.05.25-161267-10045-ENT  May 25 2022 11:22:12


used time: 10.279(ms). Execute id is 954698.
SQL> CREATE TABLE T_RANGE(C1 INT,C2 CHAR(10)) DISTRIBUTED BY RANGE(C1)(VALUES EQU OR LESS THAN (100) ON GRP1_MPP_EP01, VALUES LESS THAN(MAXVALUE) ON GRP2_MPP_EP02);
executed successfully
used time: 31.373(ms). Execute id is 601.
SQL> insert into T_RANGE values(1,'Chris'),(51,'Lily'),(101,'Peter'),(120,'Tim'),(200,'Summy');
affect rows 5

used time: 4.900(ms). Execute id is 954711.
SQL> insert into T_RANGE values(1,'Chris'),(51,'Lily'),(181,'Petr'),(320,'Ti'),(900,'Sumy');
affect rows 5

used time: 3.262(ms). Execute id is 954713.
SQL> COMMIT;
executed successfully
used time: 6.231(ms). Execute id is 954714.
SQL> SP_GET_EP_COUNT('SYSDBA','T_RANGE'); 

LINEID     SEQNO       N_ROWS              
---------- ----------- --------------------
1          0           4
2          1           6

used time: 33.026(ms). Execute id is 954715.
SQL>

測試kill掉EP01實例,監視器監控到後,守護進程會把實例自動拉起來。

dmdba@lxm2:~$ ps -ef|grep dms
dmdba    21310 21229  0 16:20 pts/0    00:00:08 dmserver /dm8/data/EP01/dm.ini mount
dmdba    21676 21404  0 17:34 pts/1    00:00:05 dmserver /dm8/data/EP22/dm.ini mount
dmdba    21933 21784  0 18:59 pts/2    00:00:00 grep dms
dmdba@lxm2:~$ kill -9 21310
dmdba@lxm2:~/dmdbms/bin$ ps -ef|grep dms
dmdba    21676 21404  0 17:34 pts/1    00:00:05 dmserver /dm8/data/EP22/dm.ini mount
dmdba    21935     1  1 18:59 ?        00:00:00 /home/dmdba/dmdbms/bin/dmserver /dm8/data/EP01/dm.ini mount
dmdba    22036 21229  0 19:00 pts/0    00:00:00 grep dms

[monitor]         2022-07-10 18:59:37: Instance GRP1_MPP_EP01[PRIMARY, OPEN, ISTAT_SAME:TRUE] error
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN
                  2022-07-10 18:59:35  STARTUP        ERROR     GRP1_MPP_EP01    OPEN        PRIMARY   VALID    3        42983           42984

[monitor]         2022-07-10 18:59:37: Dmwatcher process GRP1_MPP_EP01 status switching [OPEN-->STARTUP]
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN
                  2022-07-10 18:59:35  STARTUP        ERROR     GRP1_MPP_EP01    OPEN        PRIMARY   VALID    3        42983           42984


--monitor
[monitor]         2022-07-10 18:59:37: Check primary instance error in group(GRP1), start to auto takeover

[monitor]         2022-07-10 18:59:37: Notify group(GRP1)'s active dmwatcher to set MID
[monitor]         2022-07-10 18:59:37: Notify group(GRP1)'s active dmwatcher to set MID success
[monitor]         2022-07-10 18:59:37: Notify group(GRP2)'s active dmwatcher to set MID
[monitor]         2022-07-10 18:59:37: Notify group(GRP2)'s active dmwatcher to set MID success
[monitor]         2022-07-10 18:59:37: Start to takeover use instance GRP1_MPP_EP11
[monitor]         2022-07-10 18:59:37: Notify dmwatcher(GRP1_MPP_EP11) switch to TAKEOVER status
[monitor]         2022-07-10 18:59:38: Dmwatcher process GRP1_MPP_EP11 status switching [OPEN-->TAKEOVER]
[monitor]         2022-07-10 18:59:38: Switch dmwatcher GRP1_MPP_EP11 to TAKEOVER status success
[monitor]         2022-07-10 18:59:38: Instance GRP1_MPP_EP11 start to execute sql SP_SET_GLOBAL_DW_STATUS(0, 7)
[monitor]         2022-07-10 18:59:38: Instance GRP1_MPP_EP11 execute sql SP_SET_GLOBAL_DW_STATUS(0, 7) success
[monitor]         2022-07-10 18:59:38: Instance GRP1_MPP_EP11 start to execute sql SP_APPLY_KEEP_PKG()
[monitor]         2022-07-10 18:59:38: Instance GRP1_MPP_EP11 execute sql SP_APPLY_KEEP_PKG() success
[monitor]         2022-07-10 18:59:38: Instance GRP1_MPP_EP11 start to execute sql ALTER DATABASE MOUNT
[monitor]         2022-07-10 18:59:39: Instance GRP1_MPP_EP11 execute sql ALTER DATABASE MOUNT success
[monitor]         2022-07-10 18:59:39: Instance GRP1_MPP_EP11 start to execute sql ALTER DATABASE PRIMARY
[monitor]         2022-07-10 18:59:39: Instance GRP1_MPP_EP11 execute sql ALTER DATABASE PRIMARY success
[monitor]         2022-07-10 18:59:39: Notify instance GRP1_MPP_EP11 to change all arch status to be invalid
[monitor]         2022-07-10 18:59:39: Succeed to change all instances arch status to be invalid
[monitor]         2022-07-10 18:59:39: Build new mppctl file success
[monitor]         2022-07-10 18:59:39: Notify to update instance GRP1_MPP_EP11[PRIMARY, MOUNT, ISTAT_SAME:TRUE] mppctl file
[monitor]         2022-07-10 18:59:39: Notify instance GRP1_MPP_EP11[PRIMARY, MOUNT, ISTAT_SAME:TRUE] update mppctl file success
[monitor]         2022-07-10 18:59:39: Notify to update instance GRP2_MPP_EP02[PRIMARY, OPEN, ISTAT_SAME:TRUE] mppctl file
[monitor]         2022-07-10 18:59:39: Notify dmwatcher(GRP2_MPP_EP02) switch to MPPCTL UPDATE status
[monitor]         2022-07-10 18:59:40: Dmwatcher process GRP2_MPP_EP02 status switching [OPEN-->MPPCTL UPDATE]
[monitor]         2022-07-10 18:59:40: Switch dmwatcher GRP2_MPP_EP02 to MPPCTL UPDATE status success
[monitor]         2022-07-10 18:59:40: Instance GRP2_MPP_EP02 start to execute sql SP_SET_GLOBAL_DW_STATUS(0, 12)
[monitor]         2022-07-10 18:59:40: Instance GRP2_MPP_EP02 execute sql SP_SET_GLOBAL_DW_STATUS(0, 12) success
[monitor]         2022-07-10 18:59:40: Instance GRP2_MPP_EP02 start to execute sql SP_SET_GLOBAL_DW_STATUS(12, 0)
[monitor]         2022-07-10 18:59:40: Instance GRP2_MPP_EP02 execute sql SP_SET_GLOBAL_DW_STATUS(12, 0) success
[monitor]         2022-07-10 18:59:40: Notify dmwatcher(GRP2_MPP_EP02) switch to OPEN status
[monitor]         2022-07-10 18:59:41: Dmwatcher process GRP2_MPP_EP02 status switching [MPPCTL UPDATE-->OPEN]
[monitor]         2022-07-10 18:59:42: Switch dmwatcher GRP2_MPP_EP02 to OPEN status success
[monitor]         2022-07-10 18:59:42: Notify instance GRP2_MPP_EP02[PRIMARY, OPEN, ISTAT_SAME:TRUE] update mppctl file success
[monitor]         2022-07-10 18:59:42: Instance GRP1_MPP_EP11 start to execute sql ALTER DATABASE OPEN FORCE
[monitor]         2022-07-10 18:59:42: Instance GRP1_MPP_EP11 execute sql ALTER DATABASE OPEN FORCE success
[monitor]         2022-07-10 18:59:42: Instance GRP1_MPP_EP11 start to execute sql SP_SET_GLOBAL_DW_STATUS(7, 0)
[monitor]         2022-07-10 18:59:42: Instance GRP1_MPP_EP11 execute sql SP_SET_GLOBAL_DW_STATUS(7, 0) success
[monitor]         2022-07-10 18:59:42: Notify dmwatcher(GRP1_MPP_EP11) switch to OPEN status
[monitor]         2022-07-10 18:59:42: Dmwatcher process GRP1_MPP_EP11 status switching [TAKEOVER-->OPEN]
[monitor]         2022-07-10 18:59:43: Switch dmwatcher GRP1_MPP_EP11 to OPEN status success
[monitor]         2022-07-10 18:59:43: Notify group(GRP1)'s dmwatcher to do clear
[monitor]         2022-07-10 18:59:43: Clean request of dmwatcher processer GRP1_MPP_EP01 success
[monitor]         2022-07-10 18:59:43: Clean request of dmwatcher processer GRP1_MPP_EP11 success
[monitor]         2022-07-10 18:59:43: Notify group(GRP2)'s dmwatcher to do clear
[monitor]         2022-07-10 18:59:43: Clean request of dmwatcher processer GRP2_MPP_EP22 success
[monitor]         2022-07-10 18:59:43: Clean request of dmwatcher processer GRP2_MPP_EP02 success
[monitor]         2022-07-10 18:59:43: Success to takeover use instance GRP1_MPP_EP11

[monitor]         2022-07-10 18:59:43: Group(GRP1) use instance GRP1_MPP_EP11 auto takeover success

[monitor]         2022-07-10 18:59:50: Instance GRP1_MPP_EP01[PRIMARY, AFTER REDO, ISTAT_SAME:TRUE] recover to OK
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN
                  2022-07-10 18:59:48  STARTUP        OK        GRP1_MPP_EP01    AFTER REDO  PRIMARY   VALID    3        42983           42983

[monitor]         2022-07-10 18:59:50: Dmwatcher process GRP1_MPP_EP01 status switching [STARTUP-->OPEN]
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN
                  2022-07-10 18:59:48  OPEN           OK        GRP1_MPP_EP01    OPEN        STANDBY   INVALID  3        42983           42983

[monitor]         2022-07-10 18:59:50: Dmwatcher process GRP1_MPP_EP11 status switching [OPEN-->RECOVERY]
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN
                  2022-07-10 18:59:48  RECOVERY       OK        GRP1_MPP_EP11    OPEN        PRIMARY   VALID    4        45431           45432

[monitor]         2022-07-10 18:59:51: Dmwatcher process GRP1_MPP_EP11 status switching [RECOVERY-->OPEN]
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN
                  2022-07-10 18:59:50  OPEN           OK        GRP1_MPP_EP11    OPEN        PRIMARY   VALID    4        45432           45432