1.环境说明
配置项 主库 (DBSERVER1) 备库 (DBSERVER2)
业务 192.168.73.100 192.168.73.101
MAL IP 192.168.73.110 192.168.73.111
实例名 DBSERVER1 DBSERVER2
实例端口 (PORT_NUM) 5237 5237
MAL 端口 (MAL_PORT) 5337 5337
守护进程端口 (MAL_DW_PORT) 5437 5437
实例守护端口 (MAL_INST_DW_PORT) 5537 5537
OGUID 45331 45331
安装目录 /home/dmdba/dmdbms /home/dmdba/dmdbms
数据目录 /data/dmdata/DMMENG /data/dmdata/DMMENG
归档目录 /dmarch/ /dmarch/
临时文件目录 /data/malpath/ /data/malpath/
2.数据准备-初始化实例
2.1.主库
[dmdba@DW1 ~]$ /home/dmdba/dmdbms/bin/dminit path=/data/dmdata PAGE_SIZE=32 EXTENT_SIZE=32 CASE_SENSITIVE=y CHARSET=1 DB_NAME=DMMENG INSTANCE_NAME=DBSERVER1 PORT_NUM=5237 SYSDBA_PWD=Dameng123 SYSAUDITOR_PWD=Dameng123 SYSSSO_PWD=Dameng123
2.2.备库
[dmdba@DW2 ~]$ /home/dmdba/dmdbms/bin/dminit path=/data/dmdata PAGE_SIZE=32 EXTENT_SIZE=32 CASE_SENSITIVE=y CHARSET=1 DB_NAME=DMMENG INSTANCE_NAME=DBSERVER2 PORT_NUM=5237 SYSDBA_PWD=Dameng123 SYSAUDITOR_PWD=Dameng123 SYSSSO_PWD=Dameng123
2.3.主库脱机备份
1.正常关闭数据库
2.DMRMAN备份
RMAN> BACKUP DATABASE '/data/dmdata/DMMENG/dm.ini' FULL TO BACKUP_FILE2 BACKUPSET '/dmbak/BACKUP_FIILE_02';
3.拷贝备份文件到备库机器
spc -r /dmbak/BACKUP_FIILE_02 root@192.168.73.101:/dmbak
4.备库脱机还原与恢复
RMAN> RESTORE DATABASE '/data/dmdata/DMMENG/dm.ini' FROM BACKUPSET '/dmbak/BACKUP_FILE2';
脱机备份没有产生任何 REDO 日志,所以恢复这一步此处省略
5.数据库更新
RMAN> RECOVER DATABASE '/data/dmdata/DMMENG/dm.ini' UPDATE DB_MAGIC;
3.配置主库
3.1.dm.ini配置
[dmdba@DW1 DMMENG] vi /data/dmdata/DMMENG/dm.ini
INSTANCE_NAME = DBSERVER
PORT_NUM = 5237 ##数据库实例监听端口
BUFFER=1200 ##缓冲区大小
DW_INACTIVE_INTERVAL = 60 ##接收守护进程消息超时时间
ALTER_MODE_STATUS = 0 ##不允许手工方式修改实例模式/状态/
ENABLE_OFFLINE_TS = 2 ##不允许备库OFFLINE表空间
MAL_INI = 1 ##打开MAL系统
ARCH_INI = 1 ##打开归档配置
RLOG_SEND_APPLY_MON = 64 ##统计最近64次的日志发送信息
HAGR_BUF_GLOBAL_SIZE= 200
HAGR_BUF_SIZE = 200
HJ_BUF_GLOBAL_SIZE = 200
HJ_BUF_SIZE = 200
MEMORY_TARGET = 0
3.2.dmmal.ini配置
[dmdba@DW1 DMMENG] vi /data/dmdata/DMMENG/dmmal.ini
MAL_CHECK_INTERVAL = 5 #MAL链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 #判定MAL链路断开的时间
MAL_TEMP_PATH = /data/malpath/ #临时文件目录
[MAL_INST1]
MAL_INST_NAME = DBSERVER1 #实例名,和 dm.ini的INSTANCE_NAME一致
MAL_HOST = 192.168.73.110 #MAL系统监听TCP连接的IP地址
MAL_PORT = 5337 #MAL系统监听TCP连接的端口
MAL_INST_HOST = 192.168.73.100 #实例的对外服务IP地址
MAL_INST_PORT = 5237 #实例对外服务端口,和dm.ini的PORT_NUM一致
MAL_DW_PORT = 5437 #实例对应的守护进程监听TCP连接的端口
MAL_INST_DW_PORT = 5537 #实例监听守护进程TCP连接的端口
[MAL_INST2]
MAL_INST_NAME = DBSERVER2
MAL_HOST = 192.168.73.111
MAL_PORT = 5337
MAL_INST_HOST = 192.168.73.101
MAL_INST_PORT = 5237
MAL_DW_PORT = 5437
MAL_INST_DW_PORT = 5537
3.3.dmarch.ini配置
[dmdba@DW1 DMMENG] vi /data/dmdata/DMMENG/dmarch.ini
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME ##实时归档类型
ARCH_DEST = DBSERVER2 ##实时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL ##本地归档类型
ARCH_DEST = /dmarch ##本地归档文件存放路径
ARCH_FILE_SIZE = 128 ##单位Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 0 ##单位Mb,0表示无限制
3.4.dmwatcher.ini守护进程配置
[dmdba@DW1 DMMENG] vi /data/dmdata/DMMENG/dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL ##全局守护类型
DW_MODE = AUTO ##自动切换模式
DW_ERROR_TIME = 10 ##远程守护进程故障认定时间
INST_RECOVER_TIME = 60 ##主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 ##本地实例故障认定时间
INST_OGUID = 453331 ##守护系统唯一OGUID值
INST_INI = /data/dmdata/DMMENG/dm.ini ##dm.ini配置文件路径
INST_AUTO_RESTART = 1 ##打开实例的自动启动功能
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver ##命令行方式启动
RLOG_SEND_THRESHOLD = 0 ##指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0 ##指定备库重演日志的时间阈值,默认关闭
3.5.启动主库
[root@DW1 ~]# service DmServiceDMMENG start
3.6.设置 OGUID
启动命令行工具 DIsql,登录主库设置 OGUID
[dmdba@DW1 bin]$ disql SYSDBA/Dameng123@localhost:5237
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>sp_set_oguid(453331);
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
3.7.修改数据库模式
启动命令行工具 DIsql,登录主库修改数据库为 PRIMARY 模式
[dmdba@DW1 bin]$ disql SYSDBA/Dameng123@localhost:5237
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>ALTER DATABASE PRIMARY;
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
4.配置备库
4.1.dm.ini配置
[dmdba@DW2 bin]$ vi /data/dmdata/DMMENG/dm.ini
##实例名,建议使用“组名_守护环境_序号”的命名方式,总长度不能超过16
PORT_NUM = 5237 ##数据库实例监听端口
DW_INACTIVE_INTERVAL = 60 ##接收守护进程消息超时时间
ALTER_MODE_STATUS = 0 ##不允许手工方式修改实例模式/状态/OGUID
ENABLE_OFFLINE_TS = 2 ##不允许备库OFFLINE表空间
MAL_INI = 1 ##打开MAL系统
ARCH_INI = 1 ##打开归档配置
RLOG_SEND_APPLY_MON = 64 ##统计最近64次的日志重演信息
HAGR_BUF_GLOBAL_SIZE= 200
HAGR_BUF_SIZE = 200
HJ_BUF_GLOBAL_SIZE = 200
HJ_BUF_SIZE = 200
MEMORY_TARGET = 0
4.2.配置dmmal.ini
[dmdba@DW2 bin]$ vi /data/dmdata/DMMENG/dmmal.ini
MAL_CHECK_INTERVAL = 5 #MAL链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 #判定MAL链路断开的时间
MAL_TEMP_PATH = /data/malpath/ #临时文件目录
[MAL_INST1]
MAL_INST_NAME = DBSERVER1 #实例名,和 dm.ini的INSTANCE_NAME一致
MAL_HOST = 192.168.73.110 #MAL系统监听TCP连接的IP地址
MAL_PORT = 5337 #MAL系统监听TCP连接的端口
MAL_INST_HOST = 192.168.73.100 #实例的对外服务IP地址
MAL_INST_PORT = 5237 #实例对外服务端口,和dm.ini的PORT_NUM一致
MAL_DW_PORT = 5437 #实例对应的守护进程监听TCP连接的端口
MAL_INST_DW_PORT = 5537 #实例监听守护进程TCP连接的端口
[MAL_INST2]
MAL_INST_NAME = DBSERVER2
MAL_HOST = 192.168.73.111
MAL_PORT = 5337
MAL_INST_HOST = 192.168.73.101
MAL_INST_PORT = 5237
MAL_DW_PORT = 5437
MAL_INST_DW_PORT = 5537
4.3. 配置 dmarch.ini
[dmdba@DW2 bin]$ vi /data/dmdata/DMMENG/dmarch.ini
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME ##实时归档类型
ARCH_DEST = DBSERVER ##实时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL ##本地归档类型
ARCH_DEST = /dmarch ##本地归档文件路径
ARCH_FILE_SIZE = 128 ##单位Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 0 ##单位Mb,0表示无限制
4.4.配置 dmwatcher.ini
[dmdba@DW2 bin]$ vi /data/dmdata/DMMENG/dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL ##全局守护类型
DW_MODE = AUTO ##自动切换模式
DW_ERROR_TIME = 10 ##远程守护进程故障认定时间
INST_RECOVER_TIME = 60 ##主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 ##本地实例故障认定时间
INST_OGUID = 453331 ##守护系统唯一OGUID值
INST_INI = /data/dmdata/DMMENG/dm.ini ##dm.ini配置文件路径
INST_AUTO_RESTART = 1 ##打开实例的自动启动功能
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver ##命令行方式启动
RLOG_SEND_THRESHOLD = 0 ##指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0 ##指定备库重演日志的时间阈值,默认关闭
4.5.启动备库
[dmdba@DW2 bin]$ ./dmserver /data/dmdata/DMMENG/dm.ini mount
4.6.设置 OGUID
启动命令行工具 DIsql,登录主库设置 OGUID
[dmdba@DW2 bin]$ disql SYSDBA/Dameng123@localhost:5237
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>sp_set_oguid(453331);
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
4.7.修改数据库模式
SQL> ALTER DATABASE MOUNT;
SQL> SELECT STATUS$,MODE$,NAME,INSTANCE_NAME FROM V$INSTANCE; #查看当前模式
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1); //第1步
SQL>alter database standby; //第2步
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0); //第3步
5.配置单实例监视器
5.1.dmmonitor.ini
[dmdba@DWM bin]$ /home/dmdba/dmdbms/bin/dmmonitor.ini
MON_DW_CONFIRM = 1 ##确认监视器模式
MON_LOG_PATH = /data/dmdata/log ##监视器日志文件存放路径
MON_LOG_INTERVAL = 60 ##每隔60s定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32 ##每个日志文件最大32M
MON_LOG_SPACE_LIMIT = 0 ##不限定日志文件总占用空间
[GRP1]
MON_INST_OGUID = 453331 ##组GRP1的唯一OGUID值
##以下配置为监视器到组GRP1的守护进程的连接信息,以“IP:PORT”的形式配置
##IP对应dmmal.ini中的MAL_HOST,PORT对应dmmal.ini中的MAL_DW_PORT
MON_DW_IP = 192.168.73.110:5437
MON_DW_IP = 192.168.73.111:5437
6.启动主备库的守护进程
#注册主库守护进程#
[root@DW1 ~]# /home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /data/dmdata/DMMENG/dmwatcher.ini
[root@DW1 ~]# service DmWatcherServiceWatcher start
#注册备库守护进程#
[root@DW2 ~]# /home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /data/dmdata/DMMENG/dmwatcher.ini
[root@DW2 ~]# service DmWatcherServiceWatcher start
7.启动监视器
[dmdba@DWM bin]$ dmmonitor dmmonitor.ini
查看CLSN、FLSN、IMODE字段参数信息是否正确一致,数据库状态是否正常
8.数据同步测试验证
主库写入数据
[dmdba@DW1 ~]$ /home/dmdba/dmdbms/bin/disql SYSDBA/Dameng123@localhost:5237
SQL> create table T1 (id int);
SQL> insert into T1 values(1);
SQL> select * from T1;
备库查看数据
SQL> select * from T1;
主库事务提交,备库查询数据与主库一致,验证主备数据同步正常
9.模拟主库故障与恢复-自动切换
9.1.模拟主库故障
模拟环境DW2是主库,避免守护进程自动重启实例,先停止守护进程,再停止数据库
停止守护进程
[root@DW2 ~]# service DmWatcherServiceWatcher stop
[root@DW2 ~]# kill -9 dmserver
由于dmwatcher.ini内参数DW_ERROR_TIME 设置为 10,故监视器认定远程守护进程消息故障守护进程状态为ERROR
观察实例状态
停止主库后,观察监视器备库的状态,INST_ERROR_TIME设置为10,在这个时间主库已被认定为故障,切换备库为主库
9.2.重新拉起守护进程
观察监视器主备库的状态变化,旧主库已切换为新备库
[root@DW2 ~]# service DmWatcherServiceWatcher start
新备库已拉起,模拟主库故障与恢复完成
https://eco.dameng.com
文章
阅读量
获赞
