环境介绍

)客户环境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参数修改的更多相关文章

  1. 转 AIX7.2+11.2.0.4RAC实施

    参考 https://blog.csdn.net/alangmei/article/details/18310381 https://blog.csdn.net/smasegain/article/d ...

  2. 11.2.0.4 RAC测试环境修改时区

    当前问题: 系统时区修改后,集群数据库各个日志发现显示的还是之前时区的时间. 依据Linux (RHEL)修改时区更改了系统的时区后,集群数据库的各个日志还是显示之前的时区时间. 查找MOS资料 Ho ...

  3. HPDL380G8平台11.2.0.3 RAC实施手册

    HPDL380G8平台11.2.0.3 RAC实施手册   1 前言 此文档详细描述了Oracle 11gR2 数据库在HPDL380G上的安装RAC的检查及安装步骤.文档中#表示root用户执行,$ ...

  4. centos6.8 静默安装 oracle 11.2.0.4

    安装环境及系统要求    (下文具体参数值与路径根据自己的环境调整)操作系统:Red Hat Enterprise Linux 6 (x86) 或者CentOS 6 (x64) 数据库:Oracle ...

  5. 模拟生产搭建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.备库配置 ...

  6. Oracle 11.2.0.4.0 Dataguard部署和日常维护(2)-Datauard部署篇

    1. primary库设置dataguard相关参数   1.1. 强制primay库在任何状态下必须记录日志 SYS@userdata>select FORCE_LOGGING from v$ ...

  7. 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 ...

  8. 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 ...

  9. DG:11.2.0.4 RAC在线duplicate恢复DG

    1.环境介绍 测试环境, 在一个双节点的RAC上使用duplicate搭建DG,使用在线的方式搭建 主机 IP 操作系统 实例 db_name db_unique_name db_version 配置 ...

随机推荐

  1. springboot activiti 配置项详解

    asyncExecutorEnabled属性设置设置true后将代替那些老的Job executorspring.activiti.async-executor-enabled=false sprin ...

  2. Oracle Log Block Size

    Although the size of redo entries is measured in bytes, LGWR writes the redo to the log files on dis ...

  3. Python3组播通信编程实现教程(发送者+接收者)

    一.说明 1.1 标准组播解释 通信分为单播.多播(即组播).广播三种方式 单播指发送者发送之后,IP数据包被路由器发往目的IP指定的唯一一台设备的通信形式,比如你现在与web服务器通信就是单播形式 ...

  4. JBoss/WildFly 初步安装配置教程

    1.下载 Redhat的JBoss与Oracle的Weblogic.IBM的WebSphere并称三大JAVA EE中间件. JBoss AS是JBoss的开源版本,JBoss EAP是JBoss的企 ...

  5. 统计一行文本的单词个数 (15 分) 本题目要求编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。 输入格式: 输入给出一行字符。 输出格式: 在一行中输出单词个数。 输入样例: Let's go to room 209. 输出样例: 5

    MD,一开始就想着怎么 用空格和结尾前判断字母 来计算写的头的爆了, 反过来判断空格后面是否有 =‘ ’就尼玛容易多了 #include<stdio.h> #include<stdl ...

  6. mysql 如何在访问某张数据表按照某个字段分类输出

    也许大家有时候会遇到需要将把数据库中的某张表的数据按照该表的某个字段分类输出,比如一张数据表area如下 我们需要将里面的area按照serialize字段进行分类输出,比如这种形式: areas   ...

  7. Java Web(二) Servlet详解

    什么是Servlet? Servlet是运行在Web服务器中的Java程序.Servlet通常通过HTTP(超文本传输协议)接收和响应来自Web客户端的请求.Java Web应用程序中所有的请求-响应 ...

  8. react之传递数据的几种方式props传值、路由传值、状态提升、redux、context

    react之传递数据的几种方式 1.父子传值 父传值:<子的标签 value={'aaa'} index={'bbb'}></子的标签> 子接值:<li key={thi ...

  9. Oracle数据库备份策略:全备与增量备份

    一.RMAN全备份 在数据量比较小.或者数据库服务器性能很强大的情况下,可以每天进行一次全备份. 全被策略如下 1.crontab定时任务,避开业务繁忙时段 ##################### ...

  10. Spring Boot + thymeleaf 后台与页面(二)

    Spring Boot推荐使用thymeleaf模板完成与页面的交互(已不支持JSP某些特性,不推荐JSP) 步骤 在一个Spring Boot Web项目基础上,也可以参考我前一篇文章建立的项目 1 ...