回忆起来也是有些年没亲自动手搭建ADG了,今天正好有个机会重温,客户环境是19.16,恍惚记得上一次搭ADG还是在11.2.0.4的时代,时光荏苒啊。

正好看下19c的ADG和11g的ADG在部署方面有啥不同?

主备库都是RAC架构,数据库是CDB架构,包含有4个PDB,整个搭建过程还是遇到很多小问题,但基本也都知道原因并能快速解决,也有个别折腾了很久的,蛮有意思,所以记录下本次遇到的问题供日后参考,客户信息已脱敏。

注意:这不是一篇安装手册指引,如果想要安装手册的指引还是参考之前的文章:

新的版本有细微差异(密码文件位置等)影响到部署的部分也会在本文提到。

1.主备库ASM磁盘组名称问题

主备库的ASM磁盘组名称有差异,实际上这也不影响搭建,反正配DG时有convert参数可以指定转换规则。
但为了规矩,不给后人挖坑,还是修正成一样的了,反正备库还没东西,直接使用asmca删除重建一样名字的磁盘组。
这样convert参数只需指定db_unique_name即可。

2.主备库的环境变量不一致

同样不影响,但还是为了规范还是修正为一样了。
主要指ORACLE_BASE、ORACLE_HOME这些,而ORACLE_SID为了区分可以规划成不一样。

3.使用scp拷贝文件时发现权限问题

主库因为已纳入堡垒机,有安全设置,无法输入密码登陆,所以scp拷贝也不成;
而备库尚未纳入可以密码登陆,所以可以都通过备库来进行scp拷贝;
比如:主库需要备库的tnsnames.ora文件,无法在备库scp到主库,那么就反向来操作,去主库scp备库的这个文件:

scp 10.xx.16.1:/dba/oracle/product/19.16.0.0/db_1/network/admin/tnsnames.ora ./

4.评估duplicate方式快速创建备库

首先评估这套环境是CDB架构,下面有4个PDB,查询cdb_data_files显示总大小有875GB,而实际cdb_segments只有50GB的样子,说明实际库还比较小,所以即便不开并行,15分钟也搞定了整个duplicate过程。
该备库平均每秒1GB写入速率的样子。

5.duplicate方式只需要创建参数文件

如果选用duplicate方式,其实无需手工创建备库的控制文件,因为会在duplicate过程中自动创建;
而参数文件的修改,还是选择vi批量修改的方式,注意增加db_unique_name的设置;

6.duplicate方式是需要静态监听的

使用duplicate复制,可以写好脚本,在备库执行,连接到比较清闲的生产节点2,然后辅助实例是备库本机:

rman target sys/oracle@jydb_p2 auxiliary /
DUPLICATE TARGET DATABASE FOR STANDBY from active database NOFILENAMECHECK;

发现会报错

RMAN-06217: not connected to auxiliary database with a net service name

需要静态监听来解决,使用 “/” 本地方式连接不上的。静态监听的配置:

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = jydb_s)
(ORACLE_HOME = /dba/oracle/product/19.16.0.0/db_1)
(SID_NAME = jydbs1)
)
)

7.duplicate方式也需要密码文件

rman target sys/oracle@jydb_p2 auxiliary sys/oracle@jydb_s1
DUPLICATE TARGET DATABASE FOR STANDBY from active database NOFILENAMECHECK;

会报错:

ERROR:
ORA-01017: invalid username/password; logon denied

因为备库还是nomount状态,所以需要密码文件登陆,但19c的密码文件默认不在$ORACLE_HOME/dbs下面了,而是在ASM磁盘组中。

所以需要pwcopy命令从ASM磁盘组中拷贝到文件系统上,再拷贝到备库$ORACLE_HOME/dbs下面。

ASMCMD> pwcopy +DATA_DG/jydb_P/PASSWORD/pwdjydb_p.xxx.xxxxxxxxxx /tmp/orapwjydb_s
scp /tmp/orapwjydb_s standby_server:$ORACLE_HOME/dbs/orapwjydbs1

备库实例2也可参考。或者干脆放到ASM磁盘组共享。

另外注意文件系统上的密码文件的命名是orapw,这个SID指的是实例的名字,且区分大小写,比如这里就需要orapwjydbs1这样才可以(Linux平台区分大小写),之前大写和实际实例名字不一致,就登录不上。

8.只有参数文件没在ASM磁盘组上,需要调整

SQL> create pfile='/tmp/newpfile.ora' from spfile;

为了不再修改控制文件的名字,就选择依据它生成的spfile(但是在文件系统上)生成pfile,然后依据这个pfile创建spfile到ASM磁盘组组中;

期间需要重启几次实例。

但是可能因为我期间没有启动备库实例2,所以遇到一个问题ORA-304 ,就是参数文件中没有instance_number区分,而实际上,我最初修改的是有这个区分的。。

也就是说不管如何都得修改下喽。那还是趋向于之前的修改方案(只修正参数文件中指定的控制文件位置)

*.control_files='+DATA_DG/jydb_S/CONTROLFILE/current.257.1121430431','+FRA_DG/jydb_S/CONTROLFILE/current.257.1121430431'#Restore Controlfile

create spfile='+DATA_DG' from pfile='/tmp/pfile_jydb_s.ora';

然后两个地方设置指定这个新生成的spfile位置。确保下次启动能读取这个位置的spfile。

9.开启ADG实时同步时,主库节点1传输一直有问题

SRL的thread# 1总是有问题:

ORA-12154: TNS:Could not resolve the connect identifier specified

这个问题折腾了好久。。最终解决方案不重要,重要的是尝试过程:

a.尝试修改了备库的 local_listener,为正确的vip串;

开始发现local_listener未设置,监听也未注册,所以手工设置。但问题依旧。。

b.尝试修改tnsnames.ora文件,统一主库/备库。共4个节点。

因为ORA-12154最可能的还是这个配置,重新统一确认配置完成一致(copy方式确保),然后主备各节点互相验证远程连接,均OK;但问题依旧。。

c.尝试多次切换日志和归档current日志,均无果:

alter system switch logfile;

alter system archive log current;

但问题依旧。。

d.尝试defer后再enable链路log_archive_dest_state_2

因为有时这样反复激活下可以解决一些问题,但问题依旧。。

e.步骤8中的控制文件,后来折腾后又要重新设置listener相关参数

local_listener

remote_listener

但问题依旧。。

f.去掉静态监听设置;

检查监听状态时发现UNKONW的状态,其实不影响,但为了看起来规范,去掉已经不再需要的静态监听。

但问题依旧。。

g.尝试重建SRLs。 thread 1 2

有些怀疑是不是SRLs有异常,为了排除这个干扰项,SRLs全部删除重建。

但问题依旧。。

h.添加资源到集群

这个是后面也要做的,也先做了排除影响:

--oracle user:
srvctl add database -db jydb_s -dbname jydb_p -oraclehome /dba/oracle/product/19.16.0.0/db_1 -dbtype RAC -spfile +DATA_DG/....spfile.xxx.xxxxx -role physical_standby -diskgroup DATA_DG,FRA_DG
srvctl add instance -db jydb_s -instance jydbs1 -node jystdrac1
srvctl add instance -db jydb_s -instance jydbs1 -node jystdrac2
srvctl start database -d jydb_s

但问题依旧。。

b2.再次尝试修改tnsnames.ora文件,统一主库/备库。共4个节点。

主备库tnsnames.ora中都修改为scanip。

但问题依旧。。

i.查询DG相关信息和进程状态

--1.
SELECT * FROM (SELECT INST_ID, SEVERITY, ERROR_CODE,TO_CHAR(TIMESTAMP,'MON-DD HH24:MI') time_stamp, MESSAGE
FROM GV$DATAGUARD_STATUS
ORDER BY MESSAGE_NUM DESC)
WHERE ROWNUM < 11;

severity列中的Error都是12154,这个Error和之前诊断(直接查看gv$archive_dest的error信息)一致。另外severity列中的Warning类型对应的message列都是网络重连有问题。看起来就是网络问题?

是防火墙的锅?但是有一点很奇怪,就是主库节点2到备库目前看是OK的,那防火墙的可能性比较小,因为不太可能同一套环境的两个节点网络策略还不一样。

而且毕竟tnsping和sqlplus互联测试都OK。此时其实也更加坚定了节点1进程有问题的推论。

--2.
ALTER DATABASE SWITCHOVER TO jydb_s VERIFY;

提示ORA-16467: switchover target is not synchronized 。

--3.
set lines 1000
col value for a15
col name for a22
SELECT * FROM V$DATAGUARD_STATS;

延迟几十分钟,不断增长。

--4.
SELECT INST_ID, PROCESS, STATUS, CLIENT_PROCESS, THREAD#, SEQUENCE#, BLOCK# FROM GV$MANAGED_STANDBY WHERE CLIENT_PROCESS='LGWR' OR PROCESS='MRP0';

这个是比较关键的结果,MRP0进程的状态是“WAIT_FOR_LOG”,RFS进程的状态是“IDLE”,但是THREAD#只有2的一行;

也跟最初观察到的现象一致,就是主库节点1的日志无法连接到备库。

j.怀疑主库进程存在异常

因为能检查的都查了很多遍,确实是没问题,最终找窗口重启下主库。。也顺便让之前在主库设置的convert参数生效,两个节点都需要重启。

重启主库后,自动恢复正常。。

再次查询验证上一步的查询:

  1. severity列全是Control的类型,message列也都是正常开始归档和完成归档的信息。
  2. 返回“Database altered.”
  3. 传输和应用延迟全部显示为0;
  4. 多了一行RFS进程,对应THREAD#=1的情况;也就是之前两行(一个MRP0,一个RFS),现在三行(一个MRP0,两个RFS,每个RFS对应一个thread#)

问题解决。

最后检查下基础配置,尤其是检查有没有删除归档日志的策略(确定有定时任务定期删除)。

最后小结一下:

1.duplicate方式备库需要静态监听,搭建完成后可以删除掉;

2.新版本的主库密码文件已经存放在ASM磁盘组中,需要pwcopy命令进行拷贝;

3.配置一切正常,主库的相关进程TTxx等异常也可能影响到ADG正常传输同步。

好了,收工!

部署19c ADG过程中的问题处理的更多相关文章

  1. .NetCore 使用k8s部署服务的过程中需要注意的地方以及遇到的问题

    这里开始我准备了3台测试服务器,这里我使用了JumpServer管理起来了,这里我们来看下: Master :192.168.0.236 Node1:192.168.0.237 Node2:192.1 ...

  2. Tomcat部署SSL证书过程中遇到的问题

    在CentOS7中Tomcat部署SSL证书时遇到的问题 1.配置servlet.xml 配置tomcat/conf/server.xml 加入以下代码 <Connector port=&quo ...

  3. [Docker-2]排查基于docker部署mysql主从过程中遇到“Slave_IO_Running: Connecting”这个疑难杂症

    关于"Slave_IO_Running: Connecting"的排查方法,已经有很多博客写得清清楚楚了(很多都是复制粘贴..真浪费时间),那么如果已有的常规排查方法都不能解决你的 ...

  4. 如何在Eclipse和Tomcat的Debug过程中启用热部署

    参考的地址是 http://blog.redfin.com/devblog/2009/09/how_to_set_up_hot_code_replacement_with_tomcat_and_ecl ...

  5. ADFS部署过程中设置network service对证书的读取权限

    今儿在部署客户正式环境的ADFS时候遇到一问题,在配置完基于声明的身份验证后通过url访问居然报错了,这干过N回的事怎么会出错了呢,百思不得其解 网页报错如下 系统日志报错如下, 回想过程中的每一步, ...

  6. RabbitMQ镜像模式双节点部署时故障转移过程中队列中消息的状态

    场景 现有节点Node1和Node2,建立Exchange:yu.exchange,创建队列yu1.queue镜像队列master位于Node1,yu2.queue镜像队列位于Node2,使用topi ...

  7. 问题:部署到iis上后Chart图片不显示;结果:使用webchart过程中遇到的一些问题

    使用webchart过程中遇到的一些问题 2013年04月30日 ⁄ 综合 ⁄ 共 4874字 ⁄ 字号 小 中 大 ⁄ 评论关闭   安装条件:1.操作系统如果是2003的,那么需要到sp2补丁2. ...

  8. office web apps安装部署,配置https,负载均衡(七)配置过程中遇到的问题详细解答

    该篇文章,是这个系列文章的最后一篇文章,该篇文章将详细解答owa在安装过程中常见的问题. 如果您没有搭建好office web apps,您可以查看前面的一系列文章,查看具体步骤: office we ...

  9. 将html代码部署到阿里云服务器,并进行域名解析,以及在部署过程中遇到的问题和解决方法

    本博客主要是说一下,,如何将html代码部署到阿里云服务器,并进行域名解析,以及在部署过程中遇到的问题和解决方法. 1.先在阿里云上购买一台阿里云服务器(ECS云服务器): 2.远程连接上该服务器,在 ...

  10. centos6.6安装hadoop-2.5.0(五、部署过程中的问题解决)

    操作系统:centos6.6 环境:selinux disabled:iptables off:java 1.8.0_131 安装包:hadoop-2.5.0.tar.gz 一.安装过程中会出现WAR ...

随机推荐

  1. SpringCloud学习 系列五、创建生产者和消费者验证微服务中心 Eureka的作用

    系列导航 SpringCloud学习 系列一. 前言-为什么要学习微服务 SpringCloud学习 系列二. 简介 SpringCloud学习 系列三. 创建一个没有使用springCloud的服务 ...

  2. 【驱动】SPI驱动分析(六)-RK SPI驱动分析

    前言 Linux的spi接口驱动实现目录在kernel\drivers\spi下.这个目录和一些层次比较明显的驱动目录布局不同,全放在这个文件夹下,因此还是只好通过看Kconfig 和 Makefil ...

  3. VUE里使用iframe在更改了src之后对应的网页并未刷新解决方案

    在vue 里使用iframe,在更新src后页面并未刷新, 在更改iframe src属性值之前加上这一句即可 document.getElementById(iframe的id).contentWi ...

  4. 小白学正则表达式之 regexp

    1. 正则表达式介绍 正则表达式是程序文本处理常用的模板模式,按照解析正则表达式的引擎可将正则表达式分为 POSIX 基础正则表达式(Basic regular expression,BRE) 引擎和 ...

  5. springboot启动流程 (3) 自动装配

    在SpringBoot中,EnableAutoConfiguration注解用于开启自动装配功能. 本文将详细分析该注解的工作流程. EnableAutoConfiguration注解 启用Sprin ...

  6. 【MCU】单片机如何检测市电通断?(应用甚广~)

    [来源]https://mp.weixin.qq.com/s/TQKtEbxS8WSo3D1MecdMIw

  7. 媒体查询常用 - 移动端和PC端尺寸

    /* 移动端 */ @media all and (max-width: 768px) { } /* PC端 */ @media all and (min-width: 769px) { }

  8. Laravel - 配置 数据库

  9. MySQL-多表查询练习

    首先创建练习所需要的数据表 储备:建表操作: CREATE TABLE `t_dept` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `deptName` VARC ...

  10. 今天是个好日子,TaxCore(POS软件)备案指北

    POS软件是什么?你好意思吗,还在用老掉牙的Winform. 关于POS 销售终端--POS(point of sale)是一种多功能终端,把它安装在信用卡的特约商户和受理网点中与计算机联成网络,就能 ...