方法文档:使用 JRuby 脚本通过 SCAN 验证 Oracle RAC 设置

作者:Pas Apicella    

2011 年 4 月发布

Oracle Universal Connection Pool (UCP) for JDBC 是用于管理数据库连接的功能完备的连接池,不仅用 于 Oracle 数据库,还可用于其他非 Oracle 数据库。结合使用 UCP 和 Oracle 的好处在于 UCP JDBC 连接池可提供与各种 Oracle Real Application Clusters (RAC) 特性的紧密集成。这些特性 包括快速连接故障切换 (FCF)、实时连接负载平衡以及连接亲和性。

下面的演示可用 于验证通过 JRuby 脚本使用 Oracle RAC 11g 第 2 版 (11.2.0.2) 集群实现的故障切换 。对于此示例,我们将通过 Oracle UCP 池设置来使用 FCF 接收 FAN 事件/通知。

软件要求

以下演示假定安装以下软件;该演示已使用软件的这些版本进行了测试。可以使用以下链接获得 更多信息(包括下载页面),不过当您尚未安装所需软件时,程序会自动指示您需要下载软件。

演示

安装

  1. 验证是否已安装了 JRuby 1.5.6,如下所示。
    
    [pas@papicell-au]/export/home/pas/scripting/demos/jruby/ucp-fcf-scan> jruby   -v
    jruby 1.5.6 (ruby 1.8.7 patchlevel 249) (2010-12-03 9cf97c3) 
      (Java HotSpot(TM) Client VM 1.6.0_22) [x86-java]
    

    可以从这里下载 JRuby。
  2. 从以下链接下载 ucp.jar 和 ojdbc6.jar。

    ojdbc6.jar (11.2.0.2)
    ucp.jar (11.2.0.1)
  3. 将 ojdbc6.jar、ucp.jar 和 ons.jar 复制到 $JRUBY_HOME/lib 目录下,如下所示。对于 ons.jar,可从 CRS_HOME 或 RAC 节点 获取,位置为 $ORACLE_HOME/opmn/lib/ons.jar。
    
    [pas@papicell-au]/export/home/pas/scripting/jruby-1.5.6/lib> ls
    jruby.jar   native      ojdbc6.jar    ons.jar     ruby        
    
    ucp.jar
    
  4. 验证是否已安装了 JDK 1.6,如下所示。也可以使用 JDK 1.5,但本演示基于 JDK 1.6 且为演 示提供的 Oracle JDBC 驱动程序是与 JDK 1.6 兼容的 JAR 文件,因此要想使用 JDK 1.5,必须下 载 ojdbc5.jar。
    
    [pas@papicell-au]/export/home/pas/scripting/demos/jruby/ucp-fcf-scan> java -  version
    java version "1.6.0_22"
    Java(TM) SE Runtime Environment (build 1.6.0_22-b04)
    Java HotSpot(TM) Client VM (build 17.1-b03, mixed mode, sharing)
    

    可从这里下 载 JDK 1.6。

运行演示

  1. 这里下载本演示的源代码并解压缩。

    注: 解压缩之后,文件系统应如下所示。
    
    [pas@papicell-au]/export/home/pas/scripting/demos/jruby/ucp-fcf-scan> d
    total 10
    -rw-r--r--   1 pas      
    
    usergrp     1699 Feb  3 14:45 ucp_fcf_test.rb
    drwxr-xr-x   2 pas      
    
    usergrp      512 Feb  3 21:12 lib/
    drwxr-xr-x   3 pas      
    
    usergrp      512 Feb  9 07:48 ./
    drwxr-xr-x   4 pas      
    
    usergrp      512 Feb  9 07:50 ../
    
  2. 编辑 lib/ucp.properties 为 11g R2 RAC 集群设置连接属性,如下所示。
    
    user=scott
    password=tiger
    url=jdbc:oracle:thin:@apctcsol1.au.oracle.com:1521/pas_srv
    connectionfactory=oracle.jdbc.pool.OracleDataSource
    initialpoolsize=5
    minpoolsize=5
    maxpoolsize=20
    onsconfig=nodes=auw2k3.au.oracle.com:6200,auw2k4.au.oracle.com:6200
    
  3. 连接到一个 RAC 节点实例,准备执行非正常实例崩溃。
    
    [oradb1@auw2k3 ~]$ sqlplus / as sysdba
    
    SQL*Plus: Release 11.2.0.2.0 Production on Thu Feb 3 21:27:13 2011
    
    Copyright (c) 1982, 2010, Oracle.  All rights reserved.
    
    Connected to:
    Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - Production
    With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
    Data Mining and Real Application Testing options
    
    SQL>
    
  4. 运行 JRuby 脚本 ucp_fcf_test.rb,如下所示。此脚本将创建一个使用 FCF 的 UCP 池设置,获取 5 个连接,然后休眠 20 秒再继续获取另外 5 个连接,如此循环不断,直到 使用 CNTRL-C 结束程序。
    
    C:\temp\notes\ucp-fcf-scan>jruby ucp_fcf_test.rb
    Run at Thu Feb 03 21:30:58 +1100 2011
    MyOracleUcpPool [user=scott, passwd=tiger, 
    url=jdbc:oracle:thin:@apctcsol1.au.oracle.com:1521/pas_srv, 
    minsize=5, maxsize=20, initialsize=5], 
    factoryclassname=oracle.jdbc.pool.OracleDataSource
    
    --> Connection 1 : instance [A11], host[auw2k3], service[pas_srv]
    --> Connection 2 : instance [A11], host[auw2k3], service[pas_srv]
    --> Connection 3 : instance [A12], host[auw2k4], service[pas_srv]
    --> Connection 4 : instance [A12], host[auw2k4], service[pas_srv]
    --> Connection 5 : instance [A11], host[auw2k3], service[pas_srv]
    
    ** FCF Enabled UCP Pool Details **
    NumberOfAvailableConnections: 0
    BorrowedConnectionsCount: 5
    
    Sleeping for 20 seconds....
    
  5. 一旦程序输出显示它已获取 5 个连接且正在休眠,请返回 SQL*Plus 会话的第 7 步,使用 shutdown abort 执行非正常关闭,如下所示。
    
    SQL>shutdown abort;
    
    ORACLE instance shut down.
    
  6. 返回 JRuby 脚本,等待该脚本被唤醒,验证发生崩溃的节点是否不再出现在已连接实例列表中 。
    Run at Thu Feb 03 21:30:58 +1100 2011
    MyOracleUcpPool [user=scott, passwd=tiger, 
    
    url=jdbc:oracle:thin:@apctcsol1.au.oracle.com:1521/pas_srv, 
    minsize=5, maxsize=20, initialsize=5], 
    
    factoryclassname=oracle.jdbc.pool.OracleDataSource
    
    --> Connection 1 : instance [A11], host[auw2k3], service[pas_srv]
    --> Connection 2 : instance [A11], host[auw2k3], service[pas_srv]
    --> Connection 3 : instance [A12], host[auw2k4], service[pas_srv]
    --> Connection 4 : instance [A12], host[auw2k4], service[pas_srv]
    --> Connection 5 : instance [A11], host[auw2k3], service[pas_srv]
    
    ** FCF Enabled UCP Pool Details **
    NumberOfAvailableConnections: 0
    BorrowedConnectionsCount: 5
    
    Sleeping for 20 seconds....
    
    *** RAC instance on auw2k3 shutdown at this point **
    
    --> Connection 1 : instance [A12], host[auw2k4], service[pas_srv]
    --> Connection 2 : instance [A12], host[auw2k4], service[pas_srv]
    --> Connection 3 : instance [A12], host[auw2k4], service[pas_srv]
    --> Connection 4 : instance [A12], host[auw2k4], service[pas_srv]
    --> Connection 5 : instance [A12], host[auw2k4], service[pas_srv]
    
    ** FCF Enabled UCP Pool Details **
    NumberOfAvailableConnections: 0
    BorrowedConnectionsCount: 5
    
    Sleeping for 20 seconds....
    
  7. 返回 SQL*Plus 会话的第 9 步,使用 startup 重启该实例。
    
    SQL> startup;
    ORACLE instance started.
    
    Total System Global Area  790941696 bytes
    Fixed Size 1347084 bytes
    Variable Size 587203060 bytes
    Database Buffers 197132288 bytes
    Redo Buffers 5259264 bytes
    Database mounted.
    Database opened.
    
  8. 从运行中的 JRuby 脚本验证来自刚才返回的实例的连接是否重新出现在列表中,如下所示。
    
    .....
    
    Sleeping for 20 seconds....
    
    *** RAC instance on auw2k3 started at this point **       
    
    --> Connection 1 : instance [A11], host[auw2k3], service[pas_srv] 
    --> Connection 2 : instance [A11], host[auw2k3], service[pas_srv] 
    --> Connection 3 : instance [A12], host[auw2k4], service[pas_srv] 
    --> Connection 4 : instance [A12], host[auw2k4], service[pas_srv] 
    --> Connection 5 : instance [A11], host[auw2k3], service[pas_srv]
    
    ** FCF Enabled UCP Pool Details ** 
    NumberOfAvailableConnections: 5 
    BorrowedConnectionsCount: 5  
    
    Sleeping for 20 seconds.... 
    


有关如何结合使用 Oracle RAC 11g R2 和 SCAN 的详细信息,请参阅此 白皮书

更多信息