正常守护进程状态 WSTATUS 为 OPEN,实例状态 ISTATUS 为 OPEN,归档类型 RTYPE 为REALTIME,归档状态 RSTAT 为VALID。
手动停止主库守护进程,主库服务,模拟主库故障情况。
在实际过程中,因为配置守护进程文件dmwatcher.ini里面设置了INST_AUTO_RESTART=1(实例自动重启),当检测到数据库实例挂掉的时候,会立刻重启。
所以我们先停掉守护进程。
cd $DM_HOME/bin
./DmWatcherServiceDW1 stop
-- 查看数据库和守护进程(确认关闭)
ps -ef|grep dmdba
--kill -9一定要问过领导才可以使用
停掉数据库服务
cd $DM_HOME/bin
--先停止守护进程,再停止数据库服务,否则守护进程会自动拉起数据库服务。
./DmServiceDW1 stop
-- 查看数据库和守护进程(确认关闭)
ps -ef|grep dmdba
停掉守护进程后,WSTATUS=error,监视器接收不到任何的主库的守护信息
停掉数据库服务
将主数据库的服务停止后,监视器开始切换升级备库为主库,备库在将所有Redo日志重演结束后,就可以切换为主库对外提供数据库服务。
在监视器里面用show查看
备库的实例日志显示(dm_DW1_xxx.log)
日志中code=-6007, errno=104 + lost connect to site(0) + 所有链路同时失效的组合是主库虚拟机关机的确凿证据。
守护进程日志也显示了error=104,表明所有连接被同时重置。
如果设置了读写分离集群(主库写,备库读的情况下),那么此时写是写入备库的。
用disql进去备库
可以发现备库已经变成了主库,在备库这里添加一条数据用于验证当主库恢复之后是否数据同步。
在实际过程中,因为配置守护进程文件dmwatcher.ini里面设置了INST_AUTO_RESTART=1(实例自动重启),当检测到数据库实例挂掉的时候,会立刻重启。
监视器接收不到主库的守护进程信息,会自动给备库进行升级成为主库,我们可以查看主库的守护进程日志和实例日志等看看是不是数据库服务或者守护进程出现了问题。
主库故障后,备库切换为主库;当原主库恢复后,默认会以 “备库” 身份重新加入集群
重新启动主库的数据库服务,启动守护进程
./DmServiceDW1 start
./DmWatcherServiceDW1 start
开始对DW1进行状态切换,将原来是primary状态切换为standby,原来的主库就变成了备库
检查数据同步是否正常
前面在DW2(即切换后的主库)添加的数据,在重新加入主库的数据库可以查到
设置了读写分离,变为了备库就不允许插入数据了
手动停止备库守护进程,主库服务,模拟备库故障情况。
在实际过程中,因为配置守护进程文件dmwatcher.ini里面设置了INST_AUTO_RESTART=1(实例自动重启),当检测到数据库实例挂掉的时候,会立刻重启。
所以我们先停掉守护进程。
cd $DM_HOME/bin
./DmWatcherServiceDW2 stop
./DmServiceDW2 stop
-- 查看数据库和守护进程(确认关闭)
ps -ef|grep dmdba
停掉守护进程后,WSTATUS=error,监视器接收不到任何的备库的守护信息
在监视器用show命令可以看到数据库状态报错
用tip命令查看系统当前运行状态
在DM管理工具查看归档状态,显示为INVALID
select * from SYS.VARCH_STATUS

查看最后推送归档日志的时间
SELECT arch_dest,LAST_END_TIME,LAST_SEND_CODE,LAST_SEND_DESC
from SYS.VARCH_SEND_INFO where arch_dest=‘DW2’;
监视器接收不到备库的守护进程信息,主库会进行尝试连接备库,向监视器确认是否备库异常。
监视器
查看到备库已恢复
检查数据同步是否正常
在主库添加的数据,在重新加入备库的数据库可以查到
关闭主库的心跳网络
ifdown ens33
--验证
ip link show ens33
监视器接收不到主库的守护进程信息,自动切换备库为主库
用show命令可以查看到
在备库的守护进程日志可以看到提示连接不到数据库服务
备库的实例日志输出
通过在备库ping或者telnet测试心跳网络
-- 在备库节点执行
ping 192.168.100.111
-- 端口连通性测试
telnet 192.168.100.111 7336 # MAL端口
telnet 192.168.100.111 7436 # 守护进程端口
当主库的心跳网络发生故障时,监视器无法接收到主库的守护进程信息,无法判断主库是否正常,回自动将备库切换为主库。
--恢复网络
ifup ens33
--验证
ip link show ens33
监视器
DW1的守护进程恢复,监视器可以接收到信息
主库恢复后重新加入集群回变为备库
关闭备库的心跳网络
ifdown ens33
--验证
ip link show ens33
监视器接收不到备库守护进程信息,状态也为error
在主库的守护进程日志可以看到接收不到守护进程信息
通过在主库ping或者telnet测试心跳网络
-- 在主库节点执行
ping 192.168.100.113
-- 端口连通性测试
telnet 192.168.100.113 7336 # MAL端口
telnet 192.168.100.113 7436 # 守护进程端口
当备库的心跳网络发生故障时,监视器无法接收到主库的守护进程信息,无法判断备库是否正常,监视器对备库守护进程状态判定为error。
5.6故障处理
--恢复网络
ifup ens33
--验证
ip link show ens33
监视器
DW2的守护进程恢复,监视器可以接收到信息,主库重新推送归档日志给备库,备库重演归档日志。
关闭主库的虚拟机
# 用root用户 立即关机
shutdown -h now
正常情况下:
故障后:
监视器接收不到主库的守护进程消息
切换备库(DW2)为新的主库
show:可以看到DW2已经成为新的主库,DW1显示为error状态,
tip:查看系统当前运行状态
备库的实例日志显示(dm_DW1_xxx.log)
日志中code=-6007, errno=104 + lost connect to site(0) + 所有链路同时失效的组合是主库虚拟机关机的确凿证据。
守护进程日志也显示了error=104,表明所有连接被同时重置。
ping 192.168.100.111
telnet 192.168.100.111 5236 # 数据库端口
telnet 192.168.100.111 7336 # MAL端口
telnet 192.168.100.111 7436 # 守护进程端口
在备库上尝试连接主库网络,发现都不通
用shell连接主库发现连接不上。
监控工具显示接收不到主库的守护进程信息,实例日志和守护进程日志都表明MAL通信接收失败,归档日志推送失败,通过ping和telnet的方式还有ssh远程连接的方式都连接不上主库,这些都表明主库可能关机了。
重启主库主机,到监视器里面观察是否正常加入集群,最后再将原来的主库切换回主库。
重启主库主机后,监视器重新接收到守护进程的信息,DW1重新加入集群,并且原来的主库降级为了备库。
手动切换回原来的配置(DW1为主库,DW2为备库)
#直接在监视器出输入这些内容
login
用户名:SYSDBA
密码:Dameng123
switchover GRP_DW.DW1 #DW1:数据库实例名称
y
关闭备库的虚拟机
# 用root用户 立即关机
shutdown -h now
正常情况下:
故障后:
主库守护进程(DW1)经历了一系列状态切换
监视器接收不到备库的守护进程消息
show:可以看到DW1主库还是正常状态,备库守护进程状态为error,实例状态也是关闭,归档状态为invalid。
tip:查看系统当前运行状态
主库的实例日志显示
日志中code=-6007, errno=104 + lost connect to site(0) + 所有链路同时失效的组合是主库虚拟机关机的确凿证据。
7.3.2守护进程日志(dmwatcher)
守护进程日志也显示DW2的守护进程有问题,尝试连接DW2连接不成功,归档状态变为 INVALID。
ping 192.168.100.113
telnet 192.168.100.113 5236 # 数据库端口
telnet 192.168.100.113 7336 # MAL端口
telnet 192.168.100.113 7436 # 守护进程端口
在主库上尝试连接备库网络,发现都不通
用shell连接主库发现连接不上。
查看集群状态
select * from SYS.V$ARCH_STATUS;
备库的 ARCH_STATUS = INVALID
监控工具显示接收不到备库的守护进程信息,实例日志和守护进程日志都表明MAL通信接收失败,归档日志推送失败,通过ping和telnet的方式还有ssh远程连接的方式都连接不上备库,还有利用sql语句查看集群状态,看到备库的归档状态为invalid,这些都表明备库可能关机了。
重启备库主机,到监视器里面观察是否正常加入集群。
关闭监视器,关闭掉备库,在主库创建事务,产生新的归档日志,然后删掉归档日志,造成归档日志丢失的情况。
8.2查看故障状态
在监视器可以看到,备库的RSTAT=INVALID归档状态异常,CLSN和FLSN跟主库的不一样
备库查看发现没有主库插入的数据
主库现在的LSN
以上都表明已经归档断档了
在保证主库可以正常运作的情况下,利用热备来恢复备库的数据,使得主备之间数据一致。
#进入disql
./disql SYSDBA/'"Dameng123"'
select arch_mode from v$database; -- 需返回'Y'(归档已开启)
---------------------若归档没有开启-----------------
alter database mount;
alter database archivelog;
alter database add archivelog 'DEST=/dmdata/arch, TYPE=local, FILE_SIZE=1024, SPACE_LIMIT=2048';
alter database open;
注意,集群一般在dmarch.ini(归档配置文件)已经配置好了归档信息了。
开启归档,确保热备份时能同步备份期间产生的 Redo 日志。
8.3.2执行主库全量联机备份
主库在disql下执行热备
./disql SYSDBA/'"Dameng123"'
#全库备份到/home/dmdba/bakfull
BACKUP DATABASE FULL BACKUPSET '/home/dmdba/bakfull';
全备已经包含了断档的数据了,不需要额外再归档。
将备份的文件发送给备库
scp -r /home/dmdba/bakfull 192.168.155.113:/home/dmdba/bakfull/
8.3.3备库脱机还原与恢复
关闭备库的守护进程和实例
使用 DMRMAN 工具还原主库全量备份
./dmrman
#将主库全量数据还原到备库,重建数据文件。
restore database '/dmdata/data/dmdb/dm.ini' from backupset '/home/dmdba/bakfull/bakfull';
#将数据库恢复到备份集对应的时间点状态,确保数据一致性。
recover database '/dmdata/data/dmdb/dm.ini' from backupset '/home/dmdba/bakfull/bakfull';
执行命令更新备库标识(避免与主库冲突)
recover database '/dmdata/data/dmdb/dm.ini' update db_magic;
以mount模式启动备库实例,等待守护进程接管。
./dmserver /dmdata/DAMENG/dm.ini mount
启动备库守护进程
./DmWatcherServiceDW2 start
①验证备库数据是否跟主库一致,备库可以查看到主库添加的数据
②监视器
Show
主备库都是正常状态,也恢复了归档推送,同时他们的CLSN(数据库已经分配的最大 LSN 值)和FLSN(已写入联机日志文件的 LSN 值)都相同。
一定要先备份相关的配置文件。
./DmMonitorServicedmdb stop
./DmServiceDW1 stop
./DmWatcherServiceDW1 stop
主备库都执行
主备库都要修改
MAL_INI = 0 # 关闭MAL通信
ARCH_INI = 0 # 关闭归档(若需保留本地归档可设1)
ALTER_MODE_STATUS = 1 # 允许手动修改模式
主备库都要修改,以下这些全部注释或删除
# 配置归档模式, 事务一致性模式 还是 高性能模式 实时归档默认为:0 读写分离模式为:1
ARCH_WAIT_APPLY=1
[ARCHIVE_REALTIME1]
#ARCH_TYPE 归档类型 LOCAL REMOTE REALTIME TIMELY ASYNC
ARCH_TYPE= REALTIME #实时归档
ARCH_DEST= dw2
dw_type=local #守护进程类型设置为本地守护,意味着守护进程只在本地实例起作用,不再参与全局的主备守护集群管理;
dw_mode=munual #表示手动模式,即不会自动进行主备切换等操作,符合单机模式下不需要自动切换的需求。
在新的终端进入disql
ALTER DATABASE NORMAL; -- 退出主备模式,转为普通库
ALTER DATABASE OPEN; -- 切换为OPEN状态
SELECT NAME, STATUS,MODE FROM V$INSTANCE;
现在已经变成了单机模式了。
systemctl disable DmWatcherServiceDW1; # 禁止守护进程开机自启
当主库启动不了时(例如主库宕机),超过了dmwatcher.ini配置的DW_ERROR_TIME(接收守护进程消息超时时间),监视器会提示接收不到主库的守护进程,
注意:当监视器为普通监视器时,是无法实现自动切换的。
在dmmonitor.ini配置文件中MON_DW_CONFIRM= 1则表示监视器为确认监视器,可以自动切换。
备库的实例日志显示(dm_DW1_xxx.log),
在确认监视器下
监视器接收不到主库DW1的守护进程信息,守护进程状态(WSTATUS)为error,触发自动接管流程
监视器选择集群里面正常的主机作为新的主库,选择了DW2
备库(DW2)的守护进程从OPEN状态切换为TAKEOVER(接管)状态,暂停正常业务,
暂停数据同步,SP_APPLY_KEEP_PKG()重演原主库的redolog日志确保主备数据保持一致
备库先以MOUNT模式启动(加载配置文件,不开放服务),再通过ALTER DATABASE PRIMARY语句将角色从STANDBY改为PRIMARY(从备库变成了主库),监视器通知新主库(DW2)将原主库(DW1)的归档状态标记为无效(避免向故障主库发送日志)
最后开放数据库实例,可以提供正常服务,开放守护进程状态,DW2正式接管成功。
流程图如下:
要想将原来的主库继续作为主库,可以在监视器手动切换
#直接在监视器出输入这些内容
login
用户名:SYSDBA
密码:Dameng123
switchover GRP_DW.DW1 #DW1:数据库实例名称
y
出现这个【切换成功】的提示,监视信息也显示原来的主库变回主库,说明切换成功!
社区地址:https://eco.dameng.com
文章
阅读量
获赞