复盘RAC-DG实战切换中遇到的问题

整体切换流程概述

本周末给客户做了一次HIS核心库RAC的ADG切换迁移,太久不干数据库的活,有点手生了,复盘了一下操作中遇到的问题。
通过ADG做RAC切换的主要操作内容参考以下这两篇就行,环境是一样的。
实战-RAC迁移项目(1/3):RAC-RAC的DG搭建
实战-RAC迁移项目(2/3):RAC-RAC主备切换/IP更换/DG恢复
整个切换的流程为:
1、开工前,做好RMAN全备份、参数文件内容比对、做好其它应用系统的备份、配置好防火墙策略禁止客户端访问(先不启用)。
2、启用防火墙策略,RAC主库关闭一个节点,检查DG状态
3、记录主库当前SCN号,备份一下归档。以备恢复使用。
4、修改好CONVERT参数。
5、和客户约定好,记录几个主要生产表的数据情况。
6、主备切换。
7、关闭主、备所有RAC节点,对调主备库的IP地址。
8、调整RAC参数适配新IP地址。
9、恢复DG,重新调整DG归档相关参数。
10、测试业务。
11、恢复生产。
说说我在这次实际项目中遇到的几个坑!总结一下就其实还是不够细心,发现问题的原因就是不仔细。

错误1-密码延迟认证特性+密码大小写敏感性=大量libary cache lock

先说密码延迟认证特性
在 Oracle 11g 中,为了提升安全性,Oracle 引入了『密码延迟验证』的新特性。这个特性的作用是,如果用户输入了错误的密码尝试登录,那么随着登录错误次数的增加,每次登录前验证的时间也会增加,以此减缓可能对于数据库重复的口令尝试攻击。
但是对于正常的系统,由于口令的更改,可能存在某些被遗漏的客户端,不断重复尝试,从而引起数据库内部长时间的 Library Cache Lock的等待,这种情形非常常见。
如果遇到这一类问题,可以通过Event 28401关闭这个特性,从而消除此类影响,以下命令将修改设置在参数文件中:

ALTER SYSTEM SET EVENT ='28401 TRACE NAME CONTEXT FOREVER, LEVEL 1' SCOPE = SPFILE;

再说密码大小写敏感的问题
在Oracle的11g之前的版本中密码是不区分大小写的(使用双引号强制除外)。在Oracle的11g版本中对此有所增强。从此密码有了大小写的区分,这个大小写敏感特性是通过SEC_CASE_SENSITIVE_LOGON参数来控制的,当值为false时,大小写不敏感。
这个问题普遍发生在数据库由10G升到11G之后。

alter system set sec_case_sensitive_logon = FALSE;

正题-我遇到的故障现象
上面这两个概念说完之后,再说说我遇到的问题。
第1个问题是:切换之后,有的业务系统报错,应用段日志反映用户名密码错误,当时不知道什么原因就重新修改了一下密码,让应用那段也改了一下。
第2个问题是:有些终端反映查询有些卡顿,我这边在sqldeveloper监控数据库看起来也不太正常,administrative显示较高
 

451bdd0a81cc18f836f7335835b789e.png


再就是抓了下这其间两个RAC节点的AWR报告,查看libray cache lock比较多
 

image.png


 

image.png


ASH报告中显示也是如此
 

image.png


和群里的小伙伴也沟通探讨了一下,一致的认为是密码这块导致的问题,于是尝试分析一下
参照Library cache lock 案例分析
打开 1017 errorstack,观察日志。

alter system set events '1017 trace name errorstack level 3';

用完记得关闭

alter system set events '1017 trace name errorstack off';

期间结果如下

image.png

image.png

确实是密码失败!
检查一下我这边新RAC库的参数sec_case_sensitive_logon

image.png

结合上述现象,于是选择修改
alter system set sec_case_sensitive_logon=false scope=both;
修改完后,立竿见影,监控指标一下就下来了。。。。

afce599a2a4f559e74550f181ab7be6.png

错误2-切换后备库RAC的SCAN-IP无法连接TNS-12541

测试TNSPING服务名都没有问题,使用vip连接数据库也没有问题,便是用SCAN-IP连就不行,仔细检查了一下,备库修改IP之后,在库要修改如下参数

alter system set local_listener='(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.56.203)(PORT=1521))))' scope=both sid='orcl1';
alter system set local_listener='(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.56.204)(PORT=1521))))' scope=both sid='orcl2';

问题就出在这里,IP我写错了,实际IP应该是192.168.50.XX,粗心大意导致。

错误3-切换后发现单机备库无法接收日志

检查发现实际生产中standby为db_unique_name我写成了tns-name了orcldg

alter system set log_archive_config='DG_CONFIG=(orcl,standby,primary)'  scope=both;

所以导致备库RFS进程没有启动,不接收日志,于是重新修改一下配置

错误4-immediate关闭一个主库节点卡住

这个纯是操作失误,应该先把这RAC2节点crsctl stop crs,然后再启停数据库,正常immediate关才比较好弄。
我直接immediate去关闭RAC2节点的实例,结果停了15分钟都没停下来,即使杀了LOCAL=NO,或者直接crsctl stop crs -f都卡在这了。最后杀了PMON进程,才进行下去。
这个注意一下就行,可以提前杀会话,或者crsctl stop crs默认就是shutdown abort,之后再干净关库吧。(纯个人习惯)。

补充一些ADG切换前的检查SQL

1、可在主库、备库执行查看

select INST_ID,NAME,open_mode,LOG_MODE,DATABASE_ROLE,PROTECTION_MODE,DB_UNIQUE_NAME from gv$database;

如果是主库:
OPEN_MODE正常状态为READ WRITE
LOG_MODE正常状态为ARCHIVELOG
DATABASE_ROLE正常状态为PRIMARY
如果是备库:
OPEN_MODE正常状态为READ ONLY WITH APPLY(ADG模式)
LOG_MODE正常状态为ARCHIVELOG
DATABASE_ROLE正常状态为PHYSICAL STANDBY
2、在主备库检查数据库坏块

Select * from v$database_block_corruption;
Select * from v$nonlogged_block;

3、检查主备库创建的最后一个归档日志

select   thread#, max(sequence#) "Last Primary Seq Generated"  
             from     gv$archived_log val, gv$database vdb
             where    val.resetlogs_change# = vdb.resetlogs_change#
             group by thread# order by 1;

4、备库检查日志应用情况,同步的情况下,3、4返回的结果一致

select    thread#, max(sequence#) "Last Standby Seq Applied"
              from     gv$archived_log val, gv$database vdb
              where    val.resetlogs_change# = vdb.resetlogs_change#
              and      val.applied in ('YES','IN-MEMORY')
              group by thread# order by 1;

5、在主库检查备库的日志路径是否正常

col DEST_NAME for a30
select DEST_ID,DEST_NAME,STATUS,RECOVERY_MODE from V$ARCHIVE_DEST_STATUS where DEST_NAME='LOG_ARCHIVE_DEST_2';

status正常状态为VALID ,如果备库停止日志传输,设置defer则status为BAD PARAM。更多详细可以参考这篇:https://blog.csdn.net/cuiyan1982/article/details/79832800
RECOVERY_MODE正常状态为 MANAGED REAL TIME APPLY
6、禁用或启用归档路径

alter system set log_archive_dest_state_2='defer' scope=both;
alter system set log_archive_dest_state_2='enable' scope=both;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

徐sir(徐慧阳)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值