参数名称 | 配置值 | 参数解析 |
---|---|---|
ARCH_WAIT_APPLY | 1 | 库收到 Redo 日志后,是否需要重演完成后再响应主库。0 表示收到马上响应(高性能模式),1 表示重演完成后响应(事务一致模式)。配置为即时归档时,缺省值为 1;配置为实时归档时,缺省值为 0。 |
MAL_CHECK_INTERVAL | 5 | MAL 链路检测时间间隔,单位秒(s),取值范围 0~1800,缺省为 30s,配置为 0 表示不进行 MAL 链路检测,数据守护环境不建议配置为 0,防止网络故障导致服务长时间阻塞。 |
MAL_CONN_FAIL_INTERVAL | 15 | 判定实例之间 MAL 链路断开的时间,取值范围 2~1800,单位秒(s),缺省为 10s。 |
仅当 MAL_CHECK_INTERVAL 不为 0 时有效 DW_MODE | MANUAL | 切换模式,缺省为 MANUAL;MANUAL:故障手动切换模式;AUTO:故障自动切换模式。 |
DW_ERROR_TIME | 30 | 守护进程故障认定时间,单位秒,取值范围为 3~32767,缺省 15 秒没有收到远程守护进程消息,即认定远程守护进程故障,对本地守护无效。另外此参数也是监视器认定守护进程的故障时间,超过设置的时间间隔仍没有收到守护进程消息,监视器认为守护进程出现故障。 |
INST_RECOVER_TIME | 60 | 备库故障恢复检测时间间隔,单位秒,取值范围 3~86400,缺省每 60 秒检查一下备库状态,满足故障恢复条件时,启动历史数据同步流程。数据守护系统启动完成后Switchover 主备切换后、Takeover 备库接管后以及强制 Open 主库后,主库守护进程 INST_RECOVER_TIME 内存值会强制设置成 3,确保尽快启动数据同步。另外,还可以通过监视器命令set recover time 修改 INST_RECOVER_TIME 内存值。 |
INST_ERROR_TIME | 20 | 数据库故障认定时间,单位秒,取值范围为 3~32767,缺省 15 秒没有收到数据库发送的状态信息,即认定其监控的数据库出现故障。 |
故障类型 | 故障集群状态 |
---|---|
主库内部网卡故障 | 主库 Failover,备库归档设置无效,主库异步工作。 |
备库内部网卡故障 | 主库 Failover,备库归档设置无效,主库异步工作。 |
主备库交换机故障 | 主库 Failover,备库归档设置无效,主库异步工作。 |
主备网卡同时故障 | 主库 Failover,备库归档设置无效,主库异步工作。 |
故障类型 | 故障集群状态 |
---|---|
主库守护服务故障 | 主备库集群正常,对外提供服务正常 |
备库守护服务故障 | 主备库集群正常,对外提供服务正常 |
主备库守护服务故 | 主备库集群正常,对外提供服务正常 |
主库实例服务故障 | 主库无法提供正常服务,需要人工介入进行主备状态切换。切换后由备库作为新主库对外提供业务,因主备为事务一致性模式切换后不存在数据丢失。 |
备库实例服务故障 | 主库 Failover,备库归档设置无效,主库异步工作。 |
主备库实例服务故障 | 主备库均无法正常提供服务,需人工介入处理 |
故障类型 | 故障集群状态 |
---|---|
主库服务器故障 | 需人工介入并强制接管备库。 |
备库服务器故障 | 主库 Failover,备库归档设置无效,主库异步工作。 |
主备服务器故障 | 主备库均无法正常提供服务,需人工介入处理 |
主库磁盘故障 | 参照主库实例服务故障情况 |
备库磁盘故障 | 参照备库实例服务故障情况 |
主备库磁盘故障 | 参照主、备库实例服务故障情况 |
##登录监视器
dmmonitor dmmonitor.ini
##登录监视器
login
##选择可切换为Primary库的备库列表
choose switchover [group_name]
##切换指定组的指定库为PRIMARY库
switchover [group_name[.]] [db_name]
(1)故障现象
人为使用ip link set ens33 down 关闭主库内部通信网络
##关闭主库网卡
ip link set ens33 down
监视器反馈接收守护进程(RW1)消息超时
show命令查看集群状态:
发现无法获取到主库实例状态,此时主库WSTATUS为ERROR。
模拟外部应用测试连接访问主库,可以正常连接
模拟外部应用测试往主库写入数据(人工插入1条和jmter模拟应用写入50条),结果能够正常写入数据。
在主库查询数据结果,发现能查到写入数据,共51条
在备库查询数据结果,发现不能查到写入数据
(2)故障处理
(1)故障现象
人为使用ip link set ens33 down 关闭备库内部通信网络
##关闭备库网卡
ip link set ens33 down
监视器反馈接受备库RW2超时,随后主库RW1守护进入FAILOVER故障处理流程,此时RW1实例状态由OPEN->SUSPEND,等待备库归档置为失效后主库RW1守护退出FAILOVER状态,此时RW1实例状态由SUSPEND->OPEN重新正常对外提供服务,整个故障处理时间在5s左右完成。
show命令可以看到此时RW2守护服务WSTATUS为ERROR状态,归档状态被置为失效。
模拟外部应用测试连接访问主库,可以正常连接
模拟外部应用测试往主库写入数据(人工插入1条和jmter模拟应用写入50条),结果能够正常写入数据。
在主库查询数据结果,发现能查到写入数据,共51条
在备库查询数据结果,发现不能查到写入数据
(2)故障处理
(1)故障现象
人为使用ip link set ens33 down 关闭主、备库内部通信网络
##关闭主、备库网卡
ip link set ens33 down
show命令无法获取到任何守护信息
模拟外部应用测试连接访问主库,可以正常连接
模拟外部应用测试往主库写入数据(人工插入1条和jmter模拟应用写入50条),结果能够正常写入数据。
在主库查询数据结果,发现能查到写入数据,共51条
在备库查询数据结果,发现不能查到写入数据
(2)故障处理
(1)故障现象
人为使kill -9 pid 关闭主库守护服务
##关闭主库守护
kill -9 pid
监视器反馈,接收守护进程(RW1)消息超时
模拟外部应用测试连接访问主库,可以正常连接
模拟外部应用测试往主库写入数据(人工插入1条和jmter模拟应用写入50条),结果能够正常写入数据。
在主库查询数据结果,发现能查到写入数据,共51条
在备库查询数据结果,也能查询到数据,说明此时集群具备对外访问的功能
(2)故障处理
(1)故障现象
人为使kill -9 pid 关闭备库守护服务
##关闭备库守护
kill -9 pid
监视器反馈,接收守护进程(RW2)消息超时
模拟外部应用测试连接访问主库,可以正常连接
模拟外部应用测试往主库写入数据(人工插入1条和jmter模拟应用写入50条),结果能够正常写入数据。
在主库查询数据结果,发现能查到写入数据,共51条
在备库查询数据结果,也能查询到数据,说明此时集群具备对外访问的功能
(2)故障处理
(1)故障现象
人为使kill -9 pid 关闭主、备库守护服务
##关闭主库备库守护
kill -9 pid
监视器反馈,接受到接收守护进程(RW1)消息超时和接收守护进程(RW2)消息超时
模拟外部应用测试连接访问主库,可以正常连接
模拟外部应用测试往主库写入数据(人工插入1条和jmter模拟应用写入50条),结果能够正常写入数据。
在主库查询数据结果,发现能查到写入数据,共51条
在备库查询数据结果,也能查询到数据,说明此时集群具备对外访问的功能
(2)故障处理
(1)故障现象
人为使kill -9 pid 关闭主库实例服务
##关闭主库实例
kill -9 pid
(2)故障处理
(1)故障现象
人为使kill -9 pid 关闭备库实例服务
##关闭备库实例
kill -9 pid
(2)故障处理
(1)故障现象
人为使kill -9 pid 关闭主、备库实例服务
##关闭主、备库实例
kill -9 pid
(2)故障处理
(1)故障现象
人为使主库服务器关闭
##关闭主库服务器
shutdown -h now
监视器上无法接收到主库信息
(2)故障处理
(1)故障现象
人为使备库服务器关闭
##关闭备库服务器
shutdown -h now
(2)故障处理
(1)故障现象
人为使主库、备库服务器关闭
##关闭主库、备库服务器
shutdown -h now
(2)故障处理
使用 SYSDBA 用户登录监视器。
dmmonitor /home/dmdba/dm/dmdbms/bin/dmmonitor.ini
login
用户名:SYSDBA
密码:xxxxxx
手动切换主备库
Switchover RW2
将切换后的备库踢出集群
detach database DW1
关闭踢出的备库的守护进程、实例
$DM_HOME/bin/DmWatcherServicedw stop
$DM_HOME/bin/DmServicedw stop
维护操作
维护完成后,启动踢出的备库的实例、守护进程
$DM_HOME/bin/DmServicedw start
$DM_HOME/bin/DmWatcherServicedw start
将备库重新添加进集群
attach database DW1
手动主备切换
Switchover DW1
检查集群状态
执行以下命令,启动监视器:
dmmonitor /dmdata/dmdb/dmmonitor.ini
输入 show 命令查看集群状态
将备库踢出集群
detach database RW2
关闭踢出的备库的守护进程、实例
$DM_HOME/bin/DmWatcherServicedw stop
$DM_HOME/bin/DmServicedw stop
维护操作
维护完成后,启动踢出的备库的实例、守护进程
$DM_HOME/bin/DmServicedw start
$DM_HOME/bin/DmWatcherServicedw start
将备库重新添加进集群
attach database RW2
检查集群状态
执行以下命令,启动监视器:
dmmonitor /dmdata/dmdb/dmmonitor.ini
输入 show 命令查看集群状态
按顺序关闭数据库集群
关闭主库守护进程:$DM_HOME/bin/DmWatcherServicedw stop
关闭备库守护进程:$DM_HOME/bin/DmWatcherServicedw stop
关闭主库实例:$DM_HOME/bin/DmServicedw stop
关闭备库实例:$DM_HOME/bin/DmServicedw stop
全机维护
按顺序启动数据库集群
启动主库实例:$DM_HOME/bin/DmServicedw start
启动备库实例:$DM_HOME/bin/DmServicedw start
启动主库守护进程:$DM_HOME/bin/DmWatcherServicedw start
启动备库守护进程:$DM_HOME/bin/DmWatcherServicedw start
使用 SYSDBA 用户登录监视器。
dmmonitor /home/dmdba/dm/dmdbms/bin/dmmonitor.ini
login
用户名:SYSDBA
密码:xxxxxx
使用Choose Switchover 命令列出能够切换为主库的备库列表
Choose Switchover
手动切换主备库
Switchover RW2
使用 SYSDBA 用户登录监视器。
dmmonitor /home/dmdba/dm/dmdbms/bin/dmmonitor.ini
login
用户名:SYSDBA
密码:xxxxx
使用Choose Takeover命令选出待接管备库
Choose Takeover
使用takeover命令接管故障主库。
takeover RW2
执行 show 命令查看确认。
关闭备库守护进程、实例
$DM_HOME/bin/DmWatcherServicedw stop
$DM_HOME/bin/DmServicedw stop
启动 DIsql 登录主库,执行联机备份
disql SYSDBA/'"xxxxx"'@192.168.20.70:5236
SQL> BACKUP DATABASE FULL BACKUPSET '/dmdata/BACKUP_FILE_01';
注意,如果主库 dm.ini 中的 USE_AP 设置为 1,则需要先启动 dmap 服务。
ps -ef|grep dmap
若未启动,则先启动 DMAP 服务,dmdba 到安装目录的 bin 下执行以下命令:
DmAPService start
将备份文件拷贝至备库所在的机器上,执行脱机还原与恢复
dmrman CTLSTMT="RESTORE DATABASE '/dmdata/dmdb/dm.ini' FROM BACKUPSET '/dmdata/BACKUP_FILE_01'"
dmrman CTLSTMT="RECOVER DATABASE '/dmdata/dmdb/dm.ini' FOR STANDBY FROM BACKUPSET '/dmdata/BACKUP_FILE_01'"
dmrman CTLSTMT="RECOVER DATABASE '/dmdata/dmdb/dm.ini' UPDATE DB_MAGIC"
重新配置备库的dm.ini、dmmal.ini、dmarch.ini 和 dmwatcher.ini 配置文件
以Mount方式启动备库
dmserver /dmdata/dmdb/dm.ini mount
新建终端使用DIsql登录备库,设置OGUID(若备库仍在同集群则忽略),修改备库模式
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>sp_set_oguid(453331);
SQL>alter database standby;
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
上述语句中,sp_set_oguid()设置的 OGUID 值必须与主库一致。若重建的备库仍和主库在同一个集群中,则还原后备库的 OGUID 值与主库是一致的,sp_set_oguid()步骤可省略。
启动备库的守护进程
dmwatcher /dmdata/dmdb/dmwatcher.ini
执行以上步骤后,恢复备库的准备过程已经完成。接下来,数据守护系统会将备库重加入数据守护系统,主库的守护进程会自动通知同步数据到备库,最终恢复主备库数据到一致状态。
如果数据规模比较大、联机备份耗时较长、应用压力比较大的情况下,主库联机备份、备库脱机还原过程中,主库可能又新产生了大量归档日志。使用上述步骤重建备库后,主库向备库同步历史数据的时间会比较久,主备库数据会在比较长的一段时间内处于不一致状态。对这种情况,用户可以通过归档备份、还原和归档恢复功能,将备库数据恢复到更加接近主库的最新状态,有效减少备库加入主备系统后的历史数据同步时间。执行步骤如下:
关闭备库守护进程、实例
$DM_HOME/bin/DmWatcherServicedw stop
$DM_HOME/bin/DmServicedw stop
启动 DIsql 登录主库,执行联机备份
disql SYSDBA/'"xxxxxx"'@192.168.20.70:5236
SQL> BACKUP DATABASE FULL BACKUPSET '/dmdata/BACKUP_FILE_02' WITHOUT LOG;
注意,如果主库 dm.ini 中的 USE_AP 设置为 1,则需要先启动 dmap 服务。
ps -ef|grep dmap
若未启动,则先启动 DMAP 服务,dmdba 到安装目录的 bin 下执行以下命令:
DmAPService start
启动 DIsql 登录主库,查看备份集的 BEGIN_LSN,并从 BEGIN_LSN 开始备份主库的归档日志。(这里假设查询到的备份集 BEGIN_LSN 是 45620)
如果备份集不是在默认备份路径下,则需要先将备份集所在目录添加进来,否则会查询不到备份集信息:
SQL> SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK','/dmdata');
查询备份集信息并执行备份:
SQL> SELECT BACKUP_NAME,BEGIN_LSN FROM V$BACKUPSET;
SQL> BACKUP ARCHIVE LOG FROM LSN 45620 BACKUPSET '/dmdata/ARCH_BAK_02';
将归档备份集拷贝至备库所在的机器,还原归档后、利用这些归档日志进行数据库恢复
dmrman CTLSTMT="RESTORE ARCHIVE LOG FROM BACKUPSET '/dmdata/ARCH_BAK_02' TO ARCHIVEDIR '/dmdata/arch'"
dmrman CTLSTMT="RECOVER DATABASE '/dmdata/dmdb/dm.ini' WITH ARCHIVEDIR '/dmdata/arch'"
dmrman CTLSTMT="RECOVER DATABASE '/dmdata/dmdb/dm.ini' UPDATE DB_MAGIC"
重新配置备库的dm.ini、dmmal.ini、dmarch.ini 和 dmwatcher.ini 配置文件
以Mount方式启动备库
dmserver /dmdata/dmdb/dm.ini mount
新建终端使用disql登录备库,设置OGUID(若备库仍在同集群则忽略),修改备库模式
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>sp_set_oguid(453331);
SQL>alter database standby;
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
上述语句中,sp_set_oguid()设置的 OGUID 值必须与主库一致。若重建的备库仍和主库在同一个集群中,则还原后备库的 OGUID 值与主库是一致的,sp_set_oguid()步骤可省略。
启动备库的守护进程
dmwatcher /dmdata/dmdb/dmwatcher.ini
关闭确认监视器、守护、数据库,确认已终止;
使用dmdba用户登入确认监视器服务,查看确认监视器服务进程
su - dmdba
ps -ef |grep dmm
进入bin目录下停止确认监视器服务,查看确认监视器服务进程已经停止
$DM_HOME/bin/DmMonitorServiceDW stop
ps -ef |grep dmm
使用dmdba用户登入主备库服务器,确认服务进程以及集群状态
su - dmdba
ps -ef |grep -E "dms|dmw|dma"
$DM_HOME/bin/dmmonitor /dmdata/dmdb/dmmonitor.ini
进入后输入show查看集群状态
WSTATUS 显示为 open 表示守护进程处于开启状态,INST_OK 为 OK 表示数据库处于正常运行状态,ISTATUS 为 open 表示数据库处于开启状态
按照主库守护-备库守护-主库实例服务-备库实例服务的顺序依次停止服务,停止后查看服务进程确认已停止
su - dmdba
关闭主库守护进程:$DM_HOME/bin/DmWatcherServicedw stop
关闭备库守护进程:$DM_HOME/bin/DmWatcherServicedw stop
关闭主库实例:$DM_HOME/bin/DmServicedw stop
关闭备库实例:$DM_HOME/bin/DmServicedw stop
ps -ef |grep -E "dms|dmw|dma"
主备库修改dm.ini内容
备份dm.ini
cp /dmdata/dmdb/dm.ini /dmdata/dmbak/dm.ini_bak$(date +%Y%m%d)
修改dm.ini参数
vi /dmdata/dmdb/dm.ini
将以下参数修改为
MAL_INI=0
ALTER_MODE_STATUS=1
主备库修改dmarch.ini,修改前备份,删除远程归档内容;
备份dmarch.ini文件
cp /dmdata/dmdb/dmarch.ini /dmdata/dmbak/dmarch.ini_bak$(date +%Y%m%d)
修改dmarch.ini内容
vi /dmdata/dmdb/dmarch.ini
将内容修改为
[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL
ARCH_DEST =/dmdata/arch
ARCH_FILE_SIZE = 512
ARCH_SPACE_LIMIT = 81920
主备库前台启动,登录数据库,修改数据库状态;
前台启动数据库
dmserver /dmdata/dmdb/dm.ini
出现SYSTEM IS READY.后,另起一个窗口登陆数据库
su - dmdba
cd $DM_HOME/bin
./disql SYSDBA/'"密码"'
SQL>alter database normal;
SQL>alter database open;
查看实例状态确定实例为STATUS$为OPEN,MODE$为NORMAL后退出数据库以及停止前台数据库服务
SQL>select STATUS$,MODE$ from v$instance;
SQL>exit
前台启动窗口执行exit退出前台启动
主备库修改服务脚本;
修改数据库实例服务,将启动模式调整为open
cd $DM_HOME/bin
vi DmServicedw
将START_MODE修改为open
START_MODE=open
主备库通过服务正常启动数据库;
使用dmdba用户正常启动数据库实例服务
su - dmdba
$DM_HOME/bin/DmServicedw start
查看服务进程正常启动
ps -ef |grep -E "dms"
文章
阅读量
获赞