现在的位置: 首页 > 综合 > 正文

RAC中通过设置服务名实现业务分割

2013年02月16日 ⁄ 综合 ⁄ 共 8822字 ⁄ 字号 评论关闭

说明:通过在RAC中新增四个监听服务,来实现通过不同服务名连接到不同的实例。
注意:不配置DNS而使用SCAN IP时,通过客户机连接RAC服务器时,需要在客户机的hosts文件中配置一下SCAN IP以及VIP的条目。
如果只配置SCAN IP未配置VIP的条目,会报错:ORA-12545: Connect failed because target host or object does not exist

客户机通过SCAN连接RAC数据库的步骤是:SCAN IP LISTENER接收到连接请求时,会根据 LBA 算法将该客户端的连接请求,转发给对应的instance上的VIP LISTENER。
client -> scan listener -> local listener<VIPLISTENER > -> local instance
SCAN IP的介绍,详见:http://blog.csdn.net/q947817003/article/details/11558709

1.查看并使用srvctl来增加服务名

[oracle@bysrac1 ~]$ crs_stat -t
-bash: crs_stat: command not found

[oracle@bysrac1 ~]$ su - grid
Password:   
[grid@bysrac1 ~]$ lsnrctl status
LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 24-OCT-2013 09:41:36
Copyright (c) 1991, 2009, Oracle.  All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date                24-OCT-2013 09:24:34
Uptime                    0 days 0 hr. 17 min. 2 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /g01/app/11.2.0/grid/network/admin/listener.ora
Listener Log File         /g01/app/grid/diag/tnslsnr/bysrac1/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.221)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.226)(PORT=1521)))
Services Summary...
Service "+ASM" has 1 instance(s).
  Instance "+ASM1",
status READY, has 1 handler(s) for this service...
Service "bysrac" has 1 instance(s).
  Instance "bysrac1",
status READY, has 1 handler(s) for this service...
The command completed successfully

使用srvctl向监听中增加 jiaoyi ,fengkong,caiwu,jiesuan四个服务--要用ORACLE用户

[grid@bysrac1 ~]$ srvctl add service -d bysrac -s jiaoyi -r "bysrac1"
PRCD-1026 : Failed to create service jiaoyi for database bysrac
PRKH-1014 : Current user grid is not the same as oracle owner oracle of oracle home /u01/app/oracle/product/11.2.0/dbhome_1.
[grid@bysrac1 ~]$ exit
logout
[oracle@bysrac1 ~]$ srvctl add service -d bysrac -s jiaoyi -r "bysrac1"
[oracle@bysrac1 ~]$ srvctl add service -d bysrac -s fengkong -r "bysrac2"
[oracle@bysrac1 ~]$ srvctl add service -d bysrac -s caiwu -r "bysrac1"
[oracle@bysrac1 ~]$ srvctl add service -d bysrac -s jiesuan -r "bysrac2"
[oracle@bysrac1 ~]$ su - grid
Password:
[grid@bysrac1 ~]$ crs_stat -t      可以看到新增的四个服务已经存在,但还是OFFLINE状态。
Name           Type           Target    State     Host        
------------------------------------------------------------
ora....MBAK.dg ora....up.type OFFLINE   OFFLINE               
ora....DATA.dg ora....up.type ONLINE    ONLINE    bysrac1     
ora....SMDG.dg ora....up.type ONLINE    ONLINE    bysrac1     
ora....ER.lsnr ora....er.type ONLINE    ONLINE    bysrac1     
ora....N1.lsnr ora....er.type ONLINE    ONLINE    bysrac2     
ora.asm        ora.asm.type   ONLINE    ONLINE    bysrac1     
ora....iwu.svc ora....ce.type OFFLINE   OFFLINE               
ora.bysrac.db  ora....se.type ONLINE    ONLINE    bysrac1     
ora....ong.svc ora....ce.type OFFLINE   OFFLINE               
ora....oyi.svc ora....ce.type OFFLINE   OFFLINE               
ora....uan.svc ora....ce.type OFFLINE   OFFLINE               
ora....SM1.asm application    ONLINE    ONLINE    bysrac1     
ora....C1.lsnr application    ONLINE    ONLINE    bysrac1     
ora....ac1.gsd application    OFFLINE   OFFLINE               
ora....ac1.ons application    ONLINE    ONLINE    bysrac1     
ora....ac1.vip ora....t1.type ONLINE    ONLINE    bysrac1     
ora....SM2.asm application    ONLINE    ONLINE    bysrac2     
ora....C2.lsnr application    ONLINE    ONLINE    bysrac2     
ora....ac2.gsd application    OFFLINE   OFFLINE               
ora....ac2.ons application    ONLINE    ONLINE    bysrac2     
ora....ac2.vip ora....t1.type ONLINE    ONLINE    bysrac2     
ora.eons       ora.eons.type  ONLINE    ONLINE    bysrac1     
ora.gsd        ora.gsd.type   OFFLINE   OFFLINE               
ora....network ora....rk.type ONLINE    ONLINE    bysrac1     
ora.oc4j       ora.oc4j.type  OFFLINE   OFFLINE               
ora.ons        ora.ons.type   ONLINE    ONLINE    bysrac1     

ora.scan1.vip  ora....ip.type ONLINE    ONLINE    bysrac2    

启动新增的四个监听的服务

[grid@bysrac1 ~]$ crs_start ora.bysrac.jiaoyi.svc

Attempting to start `ora.bysrac.jiaoyi.svc` on member `bysrac1`
Start of `ora.bysrac.jiaoyi.svc` on member `bysrac1` succeeded.
[grid@bysrac1 ~]$ crs_start ora.bysrac.fengkong.svc
Attempting to stop `ora.bysrac.db` on member `bysrac2`
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux Error: 2: No such file or directory
Process ID: 0
Session ID: 0 Serial number: 0

Stop of `ora.bysrac.db` on member `bysrac2` succeeded.
Attempting to start `ora.bysrac.db` on member `bysrac2`
Start of `ora.bysrac.db` on member `bysrac2` succeeded.
Attempting to start `ora.bysrac.jiesuan.svc` on member `bysrac2`
Start of `ora.bysrac.jiesuan.svc` on member `bysrac2` succeeded.
Attempting to start `ora.bysrac.fengkong.svc` on member `bysrac2`
Start of `ora.bysrac.fengkong.svc` on member `bysrac2` succeeded.
[grid@bysrac1 ~]$ crs_start ora.bysrac.caiwu.svc
Attempting to start `ora.bysrac.caiwu.svc` on member `bysrac1`
Start of `ora.bysrac.caiwu.svc` on member `bysrac1` succeeded.
[grid@bysrac1 ~]$ crs_start ora.bysrac.jiesuan.svc
CRS-5702: Resource 'ora.bysrac.jiesuan.svc' is already running on 'bysrac2'
CRS-0223: Resource 'ora.bysrac.jiesuan.svc' has placement error.

再来查询各资源和服务状态

[grid@bysrac1 ~]$ crs_stat -t
Name           Type           Target    State     Host        
------------------------------------------------------------
ora....MBAK.dg ora....up.type OFFLINE   OFFLINE               
ora....DATA.dg ora....up.type ONLINE    ONLINE    bysrac1     
ora....SMDG.dg ora....up.type ONLINE    ONLINE    bysrac1     
ora....ER.lsnr ora....er.type ONLINE    ONLINE    bysrac1     
ora....N1.lsnr ora....er.type ONLINE    ONLINE    bysrac2     
ora.asm        ora.asm.type   ONLINE    ONLINE    bysrac1     
ora....iwu.svc ora....ce.type ONLINE    ONLINE    bysrac1     
ora.bysrac.db  ora....se.type ONLINE    ONLINE    bysrac1     
ora....ong.svc ora....ce.type ONLINE    ONLINE    bysrac2     
ora....oyi.svc ora....ce.type ONLINE    ONLINE    bysrac1     
ora....uan.svc ora....ce.type ONLINE    ONLINE    bysrac2     
ora....SM1.asm application    ONLINE    ONLINE    bysrac1     
ora....C1.lsnr application    ONLINE    ONLINE    bysrac1     
ora....ac1.gsd application    OFFLINE   OFFLINE               
ora....ac1.ons application    ONLINE    ONLINE    bysrac1     
ora....ac1.vip ora....t1.type ONLINE    ONLINE    bysrac1     
ora....SM2.asm application    ONLINE    ONLINE    bysrac2     
ora....C2.lsnr application    ONLINE    ONLINE    bysrac2     
ora....ac2.gsd application    OFFLINE   OFFLINE               
ora....ac2.ons application    ONLINE    ONLINE    bysrac2     
ora....ac2.vip ora....t1.type ONLINE    ONLINE    bysrac2     
ora.eons       ora.eons.type  ONLINE    ONLINE    bysrac1     
ora.gsd        ora.gsd.type   OFFLINE   OFFLINE               
ora....network ora....rk.type ONLINE    ONLINE    bysrac1     
ora.oc4j       ora.oc4j.type  OFFLINE   OFFLINE               
ora.ons        ora.ons.type   ONLINE    ONLINE    bysrac1     

ora.scan1.vip  ora....ip.type ONLINE    ONLINE    bysrac2

至此在RAC配置服务并启动的操作完成。

#########################################################################

2.下面需要在tnsnames.ora文件中进行配置

[oracle@bysrac1 ~]$ cd $ORACLE_HOME/network/
[oracle@bysrac1 network]$ ls
admin  doc  install  jlib  lib  log  mesg  tools  trace
[oracle@bysrac1 network]$ cd admin/
[oracle@bysrac1 admin]$ ls
samples  shrept.lst  tnsnames.ora
[oracle@bysrac1 admin]$ vi tnsnames.ora
编辑结果如下:--主要增加了新增的四个服务的连接串
借助RAC的SCAN,可以只指定服务名而不显式指定实例,由SCAN来根据配置的服务名指定的实例,最终通过监听的服务名定位到具体的实例。

BYSRAC =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = bysrac-cluster-scan)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = bysrac)
    )
  )

caiwu =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = bysrac-cluster-scan)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = caiwu)
    )
  )
jiaoyi =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = bysrac-cluster-scan)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = jiaoyi)
    )
  )
fengkong =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = bysrac-cluster-scan)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = fengkong)
    )
  )
jiesuan =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = bysrac-cluster-scan)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = jiesuan)
    )
  )

"tnsnames.ora" 53L, 1266C written

这里未在RAC的另一节点上修改,可以直接把此tnsnames.ora文件SSH传送过去即可。

#######################################################

3.登陆测试,可以实现通过不同服务登陆不同实例

[oracle@bysrac1 admin]$ sqlplus bys/bys@caiwu
BYS@ caiwu>select instance_name from v$instance;
INSTANCE_NAME
----------------
bysrac1

###############################################
[oracle@bysrac1 admin]$ sqlplus bys/bys@jiaoyi
BYS@ jiaoyi>select instance_name from v$instance;
INSTANCE_NAME
----------------
bysrac1

############################################
[oracle@bysrac1 admin]$ sqlplus bys/bys@jiesuan
BYS@ jiesuan>select instance_name from v$instance;
INSTANCE_NAME
----------------
bysrac2

##############################################
[oracle@bysrac1 admin]$ sqlplus bys/bys@fengkong
BYS@ fengkong>select instance_name from v$instance;
INSTANCE_NAME
----------------
bysrac2

抱歉!评论已关闭.