11.2.0.4rac service_name参数修改
环境介绍
)客户环境11.2.0. 两节点 rac,集群重启后,集群资源一切正常,应用cs架构,连接数据库报错,提示连接对象不存在 )分析报错原因,连接数据库方式:ip:Port/service_name方式连接数据库 IP地址是scan_ip(客户未使用dns服务器,scan ip正常在节点一,实际情况在节点二,这个不影响scan的使用,本地节点二,使用scan ip可以连接) 端口号是默认1521,且测试本地可以连接 service_name,节点一 xx,节点二xx2,不一致,存在问题(默认rac搭建后,service_name参数两节点保存一致,人为调整可能不一致) )分析结论,应用连接只连接service_name=xx,只连接rac节点一,客户通过service_name实现,业务分割。
(当节点一主机 or 实例一 shutdown后,scan ip and service_name均飘逸至节点二,可以继续为应用提供服务)
本次集群重启后,优先启动节点二,scan ip挂载在节点二,然而节点一未shutdown,service_name 节点一服务名未飘逸,造成应用无法连接。 )恢复操作,节点二,关闭scan ip服务,使其资源飘逸至节点一,至此操作结束
一、案例环境构建
1.1 环境介绍,linux5.,database 11.2.0.3 release
1.2 测试流程
rac安装初始化后,service_name名称,及每个节点监听的service_name名称
数据库参数修改service_name,造成节点1,2使用不同的service_name进行监听,让scan ip依附在节点二的Public Network card
模拟应用连接报错,使用scan_ip + port+ service_name_node1 进行连接 1.3 rac安装初始化后,service_name
1)数据库参数,两个实例参数均为jx
SQL> show parameter "service_names"
NAME TYPE VALUE
------------------------------------
service_names string jx
2)节点监听的service_name
节点一:jx1:/u01/app/oracle$ lsnrctl status
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.60.100)(PORT=1521))) --public ip
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.60.152)(PORT=1521))) --vip
Service "jx" has 1 instance(s).
Instance "jx1", status READY
节点二:jx2:/u01/app/oracle$ lsnrctl status
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.60.101)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.60.153)(PORT=1521)))
Service "jx" has 1 instance(s).
Instance "jx2", status READY
1.4 数据库参数修改service_name
1)节点一,数据库参数service_name=jx不改变
2)如果使用一个错误的sid进行修改参数会如何?
参数提示修改成功,但其实并未生效,rac sid=instance_name,如下错误操作
SQL> alter system set service_names='jx2' sid='2';
System altered.
3)节点二,数据库参数service_name=jx2
SQL> show parameter instance_name
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
instance_name string jx2
SQL> alter system set service_names='jx2' sid='jx2';
System altered.
再次查询验证
SQL> show parameter service_name
NAME TYPE VALUE
------------------------------------ ----------------------
service_names string jx2
4)service_name修改后,什么时候生效
jx2:/u01/app/oracle$ lsnrctl status
Service "jx" has 1 instance(s).
Instance "jx2", status READY, has 1 handler(s) for this service...
Service "jx2" has 1 instance(s).
Instance "jx2", status READY, has 1 handler(s) for this service...
立即生效,并且历史的service_name服务还可以使用jx,不符合本次测试场景,节点二,关闭service_name=jx
5)集群命令,关闭监听注册监听的service资源,failed测试环境无法操作
由于集群资源历史原因未注册,因此无法通过集群命令关闭节点二中的,service "jx"资源
jx2:/u01/app/grid$ srvctl status service -d jx -s jx
PRCR-1001 : 资源 ora.jx.jx.svc 不存在
手工重新rac集群层面注册service name
srvctl add service
-d <db_unique_name> 数据库的唯一名称
-s <service> 服务名
-r "<preferred_list>" 逗号分隔的首选实例列表
-a "<available_list>" 逗号分隔的备用实例列表
-P {NONE | BASIC | PRECONNECT} TAF 策略规范
BASIC: 是指在感知到节点故障时才创建到其他实例的连接。
PRECONNECT:是在最初建立连接时就同时建立到所有实例的连接,当发生故障时,立刻就可以切换到其他链路上。
jx2:/u01/app/oracle$ srvctl add service -d jx -s jx -r "jx1,jx2" -P BASIC
PRCD-1210 : 服务名jx不能与数据库默认服务名jx相同
6)节点2监听资源重启
#错误示范,如下命令关闭集群所有监听资源
jx2:/u01/app/grid$ srvctl stop listener
jx2:/u01/app/grid$ srvctl status listener
监听程序 LISTENER 已启用
监听程序 LISTENER 未运行
jx2:/u01/app/grid$ srvctl start listener
jx2:/u01/app/grid$ crsctl stat res -t
ora.LISTENER.lsnr
ONLINE ONLINE jx1
ONLINE ONLINE jx2
#正确方式,关闭一个节点监听资源
jx2:/u01/app/grid$ srvctl stop listener -help ,只关闭一个节点
jx2:/u01/app/grid$ srvctl stop listener -n jx2
jx2:/u01/app/grid$ crsctl stat res -t
ora.LISTENER.lsnr
ONLINE ONLINE jx1
OFFLINE OFFLINE jx2
再次启动节点2 监听资源
jx2:/u01/app/grid$ srvctl start listener -n jx2
jx2:/u01/app/grid$ srvctl status listener
监听程序 LISTENER 已启用
监听程序 LISTENER 正在节点上运行: jx1,jx2
监听节点2,重启监听程序,本以为节点2 service_name=jx2,节点2的监听程序无法监听jx服务名称
Service "jx" has 1 instance(s).
Instance "jx2", status READY, has 1 handler(s) for this service...
Service "jx2" has 1 instance(s).
Instance "jx2", status READY, has 1 handler(s) for this service...
7)修改默认的jx这服务名,让其不在节点2出现呢?
修改jx服务名,配置主备模式,平时只在节点一注册,失败,原因资源不存在
jx2:/u01/app/grid$ srvctl modify service -d jx -s jx -i jx1 -a jx2 -P basic
PRCR-1001 : 资源 ora.jx.jx.svc 不存在
jx2:/u01/app/grid$ srvctl remove service -d jx -s jx
PRCR-1001 : 资源 ora.jx.jx.svc 不存在
将节点一,也修改service_name,使用节点一的service_name 测试模拟实际报错,不使用数据库默认的Jx进行测试
8)通过集群命令增加一个service
让jx这个服务名,正常情况下只在节点1,节点一shutdown,飘逸至备用节点2,实现实验环境
jx2:/u01/app/oracle$ srvctl add service -d jx -s jx1 -r jx1 -a jx2 -P BASIC
jx2:/u01/app/oracle$ srvctl start service -d jx -s jx1
node1: listener status 资源状态
Service "jx1" has 1 instance(s).
Instance "jx1", status READY, has 1 handler(s) for this service...
实验环境确认
service_name node1=jx1 node2=jx2
监听服务名 node1=jx,jx1 node2=jx,jx2
9)确认scan ip 在节点呢2上
jx2:/u01/app/11.2.0/grid/network/admin$ cat /etc/hosts
192.168.60.154 jx-scan
jx2:/u01/app/oracle$ /sbin/ifconfig -a
eth0:1 Link encap:Ethernet HWaddr 00:0C:29:8F:B5:EA
inet addr:192.168.60.154 Bcast:192.168.60.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
应用测试连接:无报错,本次实验还原失败
jx2:/u01/app/oracle$ sqlplus sys/oracle@192.168.60.154:1521/jx1 as sysdba
jx1:/u01/app/oracle$ ps -ef|grep LOCAL
oracle 24139 1 0 17:55 ? 00:00:00 oraclejx1 (LOCAL=NO)
jx2:/u01/app/11.2.0/grid/network/admin$ ps -ef|grep LOCAL
失败原因,猜测一,数据库版本问题11.2.0.3 与11.2.0.4 版本存在差异
猜测二,service_name配置问题,本次测试使用的service_name是手工添加,与客户生产环境service_name存在差异
10)集群关闭scan资源,启动scan 资源再节点一提供服务
jx1:/u01/app/grid$ srvctl status scan
SCAN VIP scan1 已启用
SCAN VIP scan1 正在节点 jx2 上运行
jx1:/u01/app/grid$ srvctl status scan_listener
SCAN 监听程序 LISTENER_SCAN1 已启用
SCAN 监听程序 LISTENER_SCAN1 正在节点 jx2 上运行
jx1:/u01/app/grid$ crsctl stat res -t
ora.LISTENER_SCAN1.lsnr
1 ONLINE ONLINE jx2
jx1:/u01/app/grid$ srvctl relocate scan -i 1 -n jx1
jx1:/u01/app/grid$ srvctl status scan
SCAN VIP scan1 已启用
SCAN VIP scan1 正在节点 jx1 上运行
jx1:/u01/app/grid$ srvctl status scan_listener
SCAN 监听程序 LISTENER_SCAN1 已启用
SCAN 监听程序 LISTENER_SCAN1 正在节点 jx1 上运行
二、测试service_name 飘逸
数据库默认service_name
测试db层,修改参数 sid 一个实例,数据库shutdown,能否自动漂移
测试db层,修改所有实例都注册相同service_name
修改集群service,主某个节点,主节点shutdown,service_name自动飘逸备用节点
)数据库默认service_name jx2:/u01/app/oracle$ sqlplus sys/oracle@192.168.60.154:/jx as sysdba SQL> )测试db层,修改参数 sid 一个实例,数据库shutdown,能否自动漂移
测试jx2,使用的是数据库参数修改命令,测试数据库shutdown,节点一能否监听注册这个资源 节点2::关闭数据库 测试连接节点2,失败 jx2:/u01/app/oracle$ sqlplus sys/oracle@192.168.60.154:/jx2 as sysdba 服务名并没有飘逸至节点一,因此节点一监听程序无法注册这个服务,带来应用无法通过这个服务名称进行访问 )测试db层,修改整个集群都存在service_name,则均被注册,与数据库默认service_name,同理无需注册 )测试集群编辑的service,能否切换 节点2:启动数据库 节点1:关闭数据库
节点2集群alert日志记录如下
-- ::33.714:
[crsd()]CRS-:Resource state recovery not attempted for 'ora.jx.db' as its target state is OFFLINE
-- ::19.865:
[crsd()]CRS-:Resource 'ora.jx.jx1.svc' has failed on server 'jx1'.
-- ::19.865:
[crsd()]CRS-:Maximum restart attempts reached for resource 'ora.jx.jx1.svc'; will not restart. jx2:/u01/app/oracle$ lsnrctl status Service "jx1" has instance(s).
Instance "jx2", status READY, has handler(s) for this service... jx2:/u01/app/oracle$ sqlplus sys/oracle@192.168.60.154:/jx1 as sysdba SQL> select spid from v$process where addr=(select paddr from v$session where sid=(select sid from v$mystat group by sid)
and username='SYS' and STATUS='ACTIVE'); SPID
------------------------------------------------ SQL> host ps -ef|grep
oracle : ? :: oraclejx2 (LOCAL=NO)
三、测试集群管理service部分用法
查询资源状态
jx1:/u01/app/oracle$ srvctl status service -d jx -s jx1
服务 jx1 正在实例 jx1 上运行
添加service资源
手工重新rac集群层面注册service name srvctl add service -d <db_unique_name> 数据库的唯一名称 -s <service> 服务名 -r "<preferred_list>" 逗号分隔的首选实例列表 -a "<available_list>" 逗号分隔的备用实例列表 -P {NONE | BASIC | PRECONNECT} TAF 策略规范 BASIC: 是指在感知到节点故障时才创建到其他实例的连接。
PRECONNECT:是在最初建立连接时就同时建立到所有实例的连接,当发生故障时,立刻就可以切换到其他链路上。 jx2:/u01/app/oracle$ srvctl add service -d jx -s jx3 -r "jx1,jx2" -P BASIC
启动添加的集群服务
srvctl start service -d jx -s jx3
--对应数据库alert,最终还是修改service_name参数,但是集群层面可以实现,主备模式,手工修改数据库参数无法实现主备
Sun Dec 23 19:27:52 2018
ALTER SYSTEM SET service_names='jx1','jx3' SCOPE=MEMORY SID='jx1';
关闭服务
jx1:/u01/app/oracle$ srvctl stop service -d jx -s jx3 -i jx1
jx1:/u01/app/oracle$ srvctl stop service -d jx -s jx3 -i jx2
删除服务
jx1:/u01/app/oracle$ srvctl remove service -d jx -s jx3
让jx这个服务名,正常情况下只在节点1,节点一shutdown,飘逸至备用节点2,实现实验环境
jx2:/u01/app/oracle$ srvctl add service -d jx -s jx4 -r jx1 -a jx2 -P BASIC
jx2:/u01/app/oracle$ srvctl start service -d jx -s jx4
资源回切
jx1:/u01/app/oracle$ srvctl relocate service -d jx -s jx4 -i jx1 -t jx2
jx1:/u01/app/oracle$ srvctl relocate service -d jx -s jx4 -i jx2 -t jx1
修正,添加SCAN启动方式
srvctl start scan_listener 启动方式:
默认启动节点1,使用-i 指定第几个scan_listener默认scan_listener1,使用-n 指定节点名称,可以在指定节点启动scn
srvctl start scan 启动方式:
默认启动节点1,使用-i 指定第几个scan_listener默认scan_listener1,使用-n 指定节点名称,可以在指定节点启动scn
关闭scan_listener方式:
可以在scan_listener注册的节点使用lsnrctl stop scan_listener1
or srvctl stop scan_listener -i (->scan_listener1)
or srvctl stop scan -i -f
将另一个节点(节点二jx2)的scan_listener1漂移到本地jx1进行注册
srvctl relocate scan -i -n jx1
11.2.0.4rac service_name参数修改的更多相关文章
- 转 AIX7.2+11.2.0.4RAC实施
参考 https://blog.csdn.net/alangmei/article/details/18310381 https://blog.csdn.net/smasegain/article/d ...
- 11.2.0.4 RAC测试环境修改时区
当前问题: 系统时区修改后,集群数据库各个日志发现显示的还是之前时区的时间. 依据Linux (RHEL)修改时区更改了系统的时区后,集群数据库的各个日志还是显示之前的时区时间. 查找MOS资料 Ho ...
- HPDL380G8平台11.2.0.3 RAC实施手册
HPDL380G8平台11.2.0.3 RAC实施手册 1 前言 此文档详细描述了Oracle 11gR2 数据库在HPDL380G上的安装RAC的检查及安装步骤.文档中#表示root用户执行,$ ...
- centos6.8 静默安装 oracle 11.2.0.4
安装环境及系统要求 (下文具体参数值与路径根据自己的环境调整)操作系统:Red Hat Enterprise Linux 6 (x86) 或者CentOS 6 (x64) 数据库:Oracle ...
- 模拟生产搭建Standby RAC实验环境(11.2.0.4 DG)
模拟生产搭建Standby RAC实验环境(11.2.0.4 DG) 环境:RHEL 6.5 + Oracle 11.2.0.4 GI.DB 1.需求背景介绍 2.准备工作 3.主库配置 4.备库配置 ...
- Oracle 11.2.0.4.0 Dataguard部署和日常维护(2)-Datauard部署篇
1. primary库设置dataguard相关参数 1.1. 强制primay库在任何状态下必须记录日志 SYS@userdata>select FORCE_LOGGING from v$ ...
- ORACLE 11.2.0.4 Single To Single Data Guard 安装 physical standby
[root@ORACLE ~]# su - oracle [oracle@ORACLE ~]$ sqlplus / as sysdba . 查看主库归档模式: SQL> select log_m ...
- OEL7.2下Oracle11.2.0.4RAC部署
OEL7.2下Oracle11.2.0.4RAC部署 一. 安装步骤简述 u OEL7.2操作系统安装 u RAC 安装环境配置 u ORACLE CRS安装 u ORACLE DB软件安装 u OR ...
- DG:11.2.0.4 RAC在线duplicate恢复DG
1.环境介绍 测试环境, 在一个双节点的RAC上使用duplicate搭建DG,使用在线的方式搭建 主机 IP 操作系统 实例 db_name db_unique_name db_version 配置 ...
随机推荐
- Java中关键字this、super的含义及使用
Java语言中this的含义及作用: 关键字this用来指向当前实例对象(内存里正在运行的哪个实例对象),它的另一作用是用来区分对象的成员变量与方法的形参. 关键字super指的是当前对象里边的父对象 ...
- weblogic补丁安装失败(Patch B25A is mutually exclusive and cannot coexist with patch(es): UIAL)
由于曝出漏洞(CVE-2017-3248)需要将weblogic补丁更新至B25A,但是出现报错.如下: Conflict(s) detected - resolve conflict conditi ...
- vsftpd更新和修改版本号教程
1.rpm包更新 类似以下更新即可 rpm -Uvh vsftpd--.el6.x86_64.rpm 2.源码更新 不懂为什么对于新版本可能只有源码包而没有rpm等包,如此只能以源码更新了. .tar ...
- 使用JdbcTemplate操作数据库(二十九)
使用JdbcTemplate操作数据库 Spring的JdbcTemplate是自动配置的,你可以直接使用@Autowired来注入到你自己的bean中来使用. 举例:我们在创建User表,包含属性n ...
- corePoolSize和maxPoolSize的区别
受限于硬件.内存和性能,我们不可能无限制的创建任意数量的线程,每一台机器允许的最大线程是一个有界值.因此ThreadPoolExecutor管理的线程数量是有界的.线程池就是用这些有限个数的线程,去执 ...
- char和varchar、浮点数和定点数
cmd连接mysql数据库:找到mysql目录,进入到bin目录,然后在命令行中输入 mysql -hlocalhost -uroot -ppass ,连接mysql数据库成功. 1.char和var ...
- vue2.x 父组件监听子组件事件并传回信息
利用vm.$emit 1.在父组件中引用子组件 <child @from-child-msg="listenChildMsg"></child > 2.子组 ...
- day05_python_1124
---恢复内容开始--- 改l1[1:4:2]=[1:32] 对于增加个数 列表按切片取就是列表 ---恢复内容结束--- 01 昨日内容回顾 list: 增: append insert(ind ...
- unity中导入插件时报错处理办法
错误如下: Unhandled Exception: System.TypeLoadException: Could not load type 'System.ComponentModel.Init ...
- 每天CSS学习之transform-origin
在上一篇中,我们学习了如何使用transform来进行2D变形.今天要讲述的transform-origin与这个变形有关. origin翻译过来的意思是原点.开端.transform-origin寓 ...