目录
5.2 在DM1与DM2上设置oguid,并设置相对应的角色
1、环境
主机名 | IP | 角色 | |
dm1 | 192.168.31.166 | 主库 | |
dm2 | 192.168.31.168 | 备库 | |
dm3 | 192.168.31.169 | 监控 |
实例名 | PORT_NUM | DW_PORT | MAL_HOST | MAL_PORT | MAL_DW_PORT | |
---|---|---|---|---|---|---|
DM1 | 5236 | 5337 | 192.168.31.166 | 5438 | 5439 | |
DM2 | 5236 | 5337 | 192.168.31.168 | 5438 | 5439 | |
2、在DM1上将生产数据库打开归档(略)
3、备份同步数据
3.1、在DM1上将生产数据库创建RMAN备份
3.2、将备份传输至DM2主机
[dmdba@dm1 bak]$ scp -r DB_dm1_FULL_2020_03_03_19_17_32 dm2:/dm/dmdbms/data/dm2/bak/.
dmdba@dm2's password:
DB_dm1_FULL_2020_03_03_19_17_32.bak 100% 40MB 86.1MB/s 00:00
DB_dm1_FULL_2020_03_03_19_17_32_1.bak 100% 755KB 12.0MB/s 00:00
DB_dm1_FULL_2020_03_03_19_17_32.meta 100% 77KB 6.5MB/s 00:00
3.3、恢复DM2环境
在DM2上创建DM2数据库
关闭DM2上的数据库
[root@dm2 ~]# systemctl stop DmServicedm2.service
[root@dm2 ~]#
在DM2上以overwrite进行restore与recover
Update DB magic
4、准备配置文件
以下配置文件为DM1,DM2跟DM1的配置为主机名、实例名进行颠倒即可。
[dmdba@dm1 dm1]$ cat dmarch.ini
#DaMeng Database Archive Configuration file
#this is comments
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME
ARCH_DEST = dm2
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dm/dmarch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
[dmdba@dm1 dm1]$ cat dmmal.ini
MAL_CHECK_INTERVAL = 5
MAL_CONN_FAIL_INTERVAL = 5
[MAL_INST1]
MAL_INST_NAME = dm1
MAL_HOST = dm1
MAL_PORT = 5238
MAL_INST_HOST = dm1
MAL_INST_PORT = 5236
MAL_INST_DW_PORT = 5237
MAL_DW_PORT = 5239
[MAL_INST2]
MAL_INST_NAME = dm2
MAL_HOST = dm2
MAL_PORT = 5238
MAL_INST_HOST = dm2
MAL_INST_PORT = 5236
MAL_INST_DW_PORT = 5237
MAL_DW_PORT = 5239
[dmdba@dm1 dm1]$
[dmdba@dm1 dm1]$ cat dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL
DW_MODE = MANUAL
DW_ERROR_TIME = 10
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 10
INST_OGUID = 453331
INST_INI = /dm/dmdbms/data/dm1/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /dm/dmdbms/bin/dmserver
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0
[dmdba@dm1 dm1]$ cat dm.ini
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
MAL_INI = 1
ARCH_INI = 1
5、打开同步
5.1关闭DM1,DM2数据库后,以mount启动
[dmdba@dm1 ~]$ dmserver /dm/dmdbms/data/dm1/dm.ini mount
file dm.key not found, use default license!
version info: develop
Use normal os_malloc instead of HugeTLB
Use normal os_malloc instead of HugeTLB
DM Database Server x64 V8 1-1-45-19.11.21-116030-ENT startup...
Database mode = 0, oguid = 0
License will expire on 2020-11-21
file lsn: 53461
ndct db load finished
ndct fill fast pool finished
nsvr_startup end.
aud sys init success.
aud rt sys init success.
systables desc init success.
ndct_db_load_info success.
SYSTEM IS READY.
[dmdba@dm2 dm2]$ dmserver /dm/dmdbms/data/dm2/dm.ini mount
file dm.key not found, use default license!
version info: develop
Use normal os_malloc instead of HugeTLB
Use normal os_malloc instead of HugeTLB
DM Database Server x64 V8 1-1-45-19.11.21-116030-ENT startup...
Database mode = 0, oguid = 0
License will expire on 2020-11-21
Instance DM2 startup failed, execute 'recover database ... update db_magic' in dmrman.
[dmdba@dm2 dm2]$ dmserver /dm/dmdbms/data/dm2/dm.ini mount
file dm.key not found, use default license!
version info: develop
Use normal os_malloc instead of HugeTLB
Use normal os_malloc instead of HugeTLB
DM Database Server x64 V8 1-1-45-19.11.21-116030-ENT startup...
Database mode = 0, oguid = 0
License will expire on 2020-11-21
file lsn: 53120
ndct db load finished
ndct fill fast pool finished
nsvr_startup end.
aud sys init success.
aud rt sys init success.
systables desc init success.
ndct_db_load_info success.
SYSTEM IS READY.
5.2 在DM1与DM2上设置oguid,并设置相对应的角色
[dmdba@dm1 dm1]$ disql sysdba/sysdba
Server[LOCALHOST:5236]:mode is normal, state is mount
login used time: 2.995(ms)
disql V8
SQL> sp_set_oguid(453331);
DMSQL executed successfully
used time: 7.864(ms). Execute id is 1.
SQL>
SQL>
SQL>
SQL> alter database primary;
executed successfully
used time: 26.578(ms). Execute id is 0.
SQL>
[dmdba@dm2 ~]$ disql sysdba/sysdba
Server[LOCALHOST:5236]:mode is normal, state is mount
login used time: 3.247(ms)
disql V8
SQL> sp_set_oguid(453331);
DMSQL executed successfully
used time: 6.793(ms). Execute id is 1.
SQL> alter database standby;
executed successfully
used time: 6.277(ms). Execute id is 0.
SQL>
5.3、注册守护进程,并启动
[root@dm1 ~]# /dm/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -watcher_ini /dm/dmdbms/data/dm1/dmwatcher.ini -p dm1
Created symlink from /etc/systemd/system/multi-user.target.wants/DmWatcherServicedm1.service to /usr/lib/systemd/system/DmWatcherServicedm1.service.
Finished to create the service (DmWatcherServicedm1)
[root@dm1 ~]# systemctl start DmWatcherServicedm1
[root@dm1 ~]#
[root@dm2 ~]# /dm/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -watcher_ini /dm/dmdbms/data/dm2/dmwatcher.ini -p dm2
Created symlink from /etc/systemd/system/multi-user.target.wants/DmWatcherServicedm2.service to /usr/lib/systemd/system/DmWatcherServicedm2.service.
Finished to create the service (DmWatcherServicedm2)
[root@dm2 ~]# systemctl start DmWatcherServicedm2
[root@dm2 ~]#
5.4、启动完后,数据即打开
6、测试同步
DM1上创建用户:
SQL> create user test identified by test12345;
executed successfully
used time: 13.137(ms). Execute id is 30.
DM2上查看
没创建之前的效果
SQL> select username from dba_users;
LINEID USERNAME
---------- ----------
1 SYSSSO
2 SYSDBA
3 SYSREP
4 SYS
5 SYSAUDITOR
used time: 15.096(ms). Execute id is 28.
创建之后的可以看到DM2已经被同步
SQL> select username from dba_users;
LINEID USERNAME
---------- ----------
1 SYSSSO
2 SYSDBA
3 SYSREP
4 TEST
5 SYS
6 SYSAUDITOR
6 rows got
used time: 2.096(ms). Execute id is 29.
SQL>
7、配置DMDW监视器
在DM3上准备配置文件
[dmdba@dm3 data]$ cat /dm/dmdbms/data/dmmonitor.ini
MON_DW_CONFIRM = 1
MON_LOG_PATH = /dm/dmdbms/log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 32
MON_LOG_SPACE_LIMIT = 0
[GRP1]
MON_INST_OGUID = 453331
MON_DW_IP = dm1:5239
MON_DW_IP = dm2:5239
启动监视器
[dmdba@dm3 data]$ dmmonitor /dm/dmdbms/data/dmmonitor.ini
[monitor] 2020-03-03 20:19:38: DMMONITOR[4.0] V8
[monitor] 2020-03-03 20:19:38: DMMONITOR[4.0] IS READY.
[monitor] 2020-03-03 20:19:38: Received message from(DM1)
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2020-03-03 20:19:38 OPEN OK DM1 OPEN PRIMARY VALID 4 58225 58225
[monitor] 2020-03-03 20:19:38: Received message from(DM2)
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2020-03-03 23:35:53 OPEN OK DM2 OPEN STANDBY VALID 4 58225 58225
7 切换测试
7.1switchover
[dmdba@dm3 data]$ dmmonitor /dm/dmdbms/data/dmmonitor.ini
choose switchover grp1
switchover grp1.DM2
login
sysdba/sysdba
switchover grp1.DM2
[dmdba@dm3 data]$ dmmonitor /dm/dmdbms/data/dmmonitor.ini
[monitor] 2020-03-03 20:31:37: DMMONITOR[4.0] V8
[monitor] 2020-03-03 20:31:37: DMMONITOR[4.0] IS READY.
[monitor] 2020-03-03 20:31:37: Received message from(DM1)
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2020-03-03 20:31:37 OPEN OK DM1 OPEN PRIMARY VALID 6 69008 69008
[monitor] 2020-03-03 20:31:37: Received message from(DM2)
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2020-03-03 23:47:52 OPEN OK DM2 OPEN STANDBY VALID 6 69008 69008
choose switchover grp1
Can choose one of the following instances to do switchover:
1: DM2
switchover grp1.DM2
[monitor] 2020-03-03 20:32:07: Not login dmmonitor or server public key changed, please try to login again!
Input command illegal, please input help to get the help information!
login
username:sysdba
password:
[monitor] 2020-03-03 20:32:29: Login dmmonitor success!
switchover grp1.DM2
[monitor] 2020-03-03 20:32:35: Start to switchover instance DM2
[monitor] 2020-03-03 20:32:35: Notify dmwatcher(DM1) switch to SWITCHOVER status
[monitor] 2020-03-03 20:32:35: Dmwatcher process DM1 status switching [OPEN-->SWITCHOVER]
[monitor] 2020-03-03 20:32:35: Switch dmwatcher DM1 to SWITCHOVER status success
[monitor] 2020-03-03 20:32:35: Notify dmwatcher(DM2) switch to SWITCHOVER status
[monitor] 2020-03-03 20:32:35: Dmwatcher process DM2 status switching [OPEN-->SWITCHOVER]
[monitor] 2020-03-03 20:32:35: Switch dmwatcher DM2 to SWITCHOVER status success
[monitor] 2020-03-03 20:32:35: Instance DM1 start to execute sql SP_SET_GLOBAL_DW_STATUS(0, 6)
[monitor] 2020-03-03 20:32:35: Instance DM1 execute sql SP_SET_GLOBAL_DW_STATUS(0, 6) success
[monitor] 2020-03-03 20:32:35: Instance DM2 start to execute sql SP_SET_GLOBAL_DW_STATUS(0, 6)
[monitor] 2020-03-03 20:32:35: Instance DM2 execute sql SP_SET_GLOBAL_DW_STATUS(0, 6) success
[monitor] 2020-03-03 20:32:35: Instance DM1 start to execute sql ALTER DATABASE MOUNT
[monitor] 2020-03-03 20:32:37: Instance DM1 execute sql ALTER DATABASE MOUNT success
[monitor] 2020-03-03 20:32:37: Instance DM2 start to execute sql SP_APPLY_KEEP_PKG()
[monitor] 2020-03-03 20:32:37: Instance DM2 execute sql SP_APPLY_KEEP_PKG() success
[monitor] 2020-03-03 20:32:37: Instance DM2 start to execute sql ALTER DATABASE MOUNT
[monitor] 2020-03-03 20:32:37: Instance DM2 has 1 apply task to do
[monitor] 2020-03-03 20:32:39: Instance DM2 execute sql ALTER DATABASE MOUNT success
[monitor] 2020-03-03 20:32:39: Instance DM1 start to execute sql ALTER DATABASE STANDBY
[monitor] 2020-03-03 20:32:39: Instance DM1 execute sql ALTER DATABASE STANDBY success
[monitor] 2020-03-03 20:32:39: Instance DM2 start to execute sql ALTER DATABASE PRIMARY
[monitor] 2020-03-03 20:32:39: Instance DM2 execute sql ALTER DATABASE PRIMARY success
[monitor] 2020-03-03 20:32:39: Notify instance DM2 to change all arch status to be invalid
[monitor] 2020-03-03 20:32:39: Succeed to change all instances arch status to be invalid
[monitor] 2020-03-03 20:32:39: Instance DM1 start to execute sql ALTER DATABASE OPEN FORCE
[monitor] 2020-03-03 20:32:39: Instance DM1 execute sql ALTER DATABASE OPEN FORCE success
[monitor] 2020-03-03 20:32:39: Instance DM2 start to execute sql ALTER DATABASE OPEN FORCE
[monitor] 2020-03-03 20:32:41: Instance DM2 execute sql ALTER DATABASE OPEN FORCE success
[monitor] 2020-03-03 20:32:41: Instance DM1 start to execute sql SP_SET_GLOBAL_DW_STATUS(6, 0)
[monitor] 2020-03-03 20:32:41: Instance DM1 execute sql SP_SET_GLOBAL_DW_STATUS(6, 0) success
[monitor] 2020-03-03 20:32:41: Instance DM2 start to execute sql SP_SET_GLOBAL_DW_STATUS(6, 0)
[monitor] 2020-03-03 20:32:41: Instance DM2 execute sql SP_SET_GLOBAL_DW_STATUS(6, 0) success
[monitor] 2020-03-03 20:32:41: Notify dmwatcher(DM1) switch to OPEN status
[monitor] 2020-03-03 20:32:41: Dmwatcher process DM1 status switching [SWITCHOVER-->OPEN]
[monitor] 2020-03-03 20:32:41: Switch dmwatcher DM1 to OPEN status success
[monitor] 2020-03-03 20:32:41: Notify dmwatcher(DM2) switch to OPEN status
[monitor] 2020-03-03 20:32:41: Dmwatcher process DM2 status switching [SWITCHOVER-->OPEN]
[monitor] 2020-03-03 20:32:41: Switch dmwatcher DM2 to OPEN status success
[monitor] 2020-03-03 20:32:41: Notify group(GRP1)'s dmwatcher to do clear
[monitor] 2020-03-03 20:32:41: Clean request of dmwatcher processer DM1 success
[monitor] 2020-03-03 20:32:41: Clean request of dmwatcher processer DM2 success
[monitor] 2020-03-03 20:32:41: Switchover instance DM2 success
2020-03-03 20:32:41
#================================================================================#
GROUP OGUID MON_CONFIRM MODE MPP_FLAG
GRP1 453331 TRUE MANUAL FALSE
<<DATABASE GLOBAL INFO:>>
IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT
dm2 5239 2020-03-03 23:48:56 GLOBAL VALID OPEN DM2 OK 1 1 OPEN PRIMARY DSC_OPEN REALTIME VALID
EP INFO:
INST_PORT INST_OK INAME ISTATUS IMODE DSC_SEQNO DSC_CTL_NODE RTYPE RSTAT FSEQ FLSN CSEQ CLSN DW_STAT_FLAG
5236 OK DM2 OPEN PRIMARY 0 0 REALTIME VALID 3896 69299 3896 74176 NONE
<<DATABASE GLOBAL INFO:>>
IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT
dm1 5239 2020-03-03 20:32:41 GLOBAL VALID OPEN DM1 OK 1 1 OPEN STANDBY DSC_OPEN REALTIME INVALID
EP INFO:
INST_PORT INST_OK INAME ISTATUS IMODE DSC_SEQNO DSC_CTL_NODE RTYPE RSTAT FSEQ FLSN CSEQ CLSN DW_STAT_FLAG
5236 OK DM1 OPEN STANDBY 0 0 REALTIME INVALID 3895 69008 3895 69008 NONE
DATABASE(DM1) APPLY INFO FROM (DM2):
DSC_SEQNO[0], (ASEQ, SSEQ, KSEQ)[3895, 3895, 3895], (ALSN, SLSN, KLSN)[69008, 69008, 69008], N_TSK[0], TSK_MEM_USE[0]
#================================================================================#
[monitor] 2020-03-03 20:32:44: Dmwatcher process DM2 status switching [OPEN-->RECOVERY]
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2020-03-03 23:48:59 RECOVERY OK DM2 OPEN PRIMARY VALID 7 74176 74176
[monitor] 2020-03-03 20:32:46: Dmwatcher process DM2 status switching [RECOVERY-->OPEN]
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2020-03-03 23:49:01 OPEN OK DM2 OPEN PRIMARY VALID 7 74176 74176
7.2 takeover
[root@dm2 ~]# systemctl stop network
login
username:sysdba
password:
[monitor] 2020-03-03 23:58:52: Login dmmonitor success!
choose takeover grp1
Can choose one of the following instances to do takeover:
1: DM1
1: DM1
Input command illegal, please input help to get the help information!
takeover DM1
[monitor] 2020-03-03 23:59:06: Start to takeover use instance DM1
[monitor] 2020-03-03 23:59:06: Notify dmwatcher(DM1) switch to TAKEOVER status
[monitor] 2020-03-03 23:59:06: Dmwatcher process DM1 status switching [OPEN-->TAKEOVER]
[monitor] 2020-03-03 23:59:06: Switch dmwatcher DM1 to TAKEOVER status success
[monitor] 2020-03-03 23:59:06: Instance DM1 start to execute sql SP_SET_GLOBAL_DW_STATUS(0, 7)
[monitor] 2020-03-03 23:59:06: Instance DM1 execute sql SP_SET_GLOBAL_DW_STATUS(0, 7) success
[monitor] 2020-03-03 23:59:06: Instance DM1 start to execute sql SP_APPLY_KEEP_PKG()
[monitor] 2020-03-03 23:59:07: Instance DM1 execute sql SP_APPLY_KEEP_PKG() success
[monitor] 2020-03-03 23:59:07: Instance DM1 start to execute sql ALTER DATABASE MOUNT
[monitor] 2020-03-03 23:59:08: Instance DM1 execute sql ALTER DATABASE MOUNT success
[monitor] 2020-03-03 23:59:08: Instance DM1 start to execute sql ALTER DATABASE PRIMARY
[monitor] 2020-03-03 23:59:08: Instance DM1 execute sql ALTER DATABASE PRIMARY success
[monitor] 2020-03-03 23:59:11: Notify instance DM1 to change all arch status to be invalid
[monitor] 2020-03-03 23:59:11: Succeed to change all instances arch status to be invalid
[monitor] 2020-03-03 23:59:11: Instance DM1 start to execute sql ALTER DATABASE OPEN FORCE
[monitor] 2020-03-03 23:59:13: Instance DM1 execute sql ALTER DATABASE OPEN FORCE success
[monitor] 2020-03-03 23:59:13: Instance DM1 start to execute sql SP_SET_GLOBAL_DW_STATUS(7, 0)
[monitor] 2020-03-03 23:59:13: Instance DM1 execute sql SP_SET_GLOBAL_DW_STATUS(7, 0) success
[monitor] 2020-03-03 23:59:13: Notify dmwatcher(DM1) switch to OPEN status
[monitor] 2020-03-03 23:59:13: Dmwatcher process DM1 status switching [TAKEOVER-->OPEN]
[monitor] 2020-03-03 23:59:13: Switch dmwatcher DM1 to OPEN status success
[monitor] 2020-03-03 23:59:13: Notify group(GRP1)'s dmwatcher to do clear
[monitor] 2020-03-03 23:59:13: Clean request of dmwatcher processer DM1 success
[monitor] 2020-03-03 23:59:13: Success to takeover use instance DM1
2020-03-03 23:59:13
#================================================================================#
GROUP OGUID MON_CONFIRM MODE MPP_FLAG
GRP1 453331 TRUE MANUAL FALSE
<<DATABASE GLOBAL INFO:>>
IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT
dm1 5239 2020-03-03 23:59:13 GLOBAL VALID OPEN DM1 OK 1 1 OPEN PRIMARY DSC_OPEN REALTIME VALID
EP INFO:
INST_PORT INST_OK INAME ISTATUS IMODE DSC_SEQNO DSC_CTL_NODE RTYPE RSTAT FSEQ FLSN CSEQ CLSN DW_STAT_FLAG
5236 OK DM1 OPEN PRIMARY 0 0 REALTIME VALID 3906 79531 3906 84408 NONE
ERROR DATABASE:
<<DATABASE GLOBAL INFO:>>
IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT
dm2 5239 2020-03-03 23:57:54 GLOBAL VALID ERROR DM2 OK 1 1 OPEN PRIMARY DSC_OPEN REALTIME VALID
EP INFO:
INST_PORT INST_OK INAME ISTATUS IMODE DSC_SEQNO DSC_CTL_NODE RTYPE RSTAT FSEQ FLSN CSEQ CLSN DW_STAT_FLAG
5236 OK DM2 OPEN PRIMARY 0 0 REALTIME VALID 3905 79240 3905 79240 NONE
#================================================================================#