Oracle UCP-FCF计划停机支持



我正在测试Oracle通用连接池(UCP)11.2.0.1.0版本的快速连接故障切换(FCF)支持。正在尝试的场景是一个计划中断事件。Oracle Database 11g Release 11.2.0.2.0标准版是正在使用的数据库版本。以下是我在测试中遵循的步骤

  1. 获取连接并打印连接到的实例
  2. 在其中一个节点上执行"srvctl stop instance-d-n"
  3. 对第一步中检索到的连接执行查询

第三步失败,出现错误(ORA-03113:通信通道上的文件结束),但由于这是一个计划中断事件,因此不应该执行。通过分析ucp日志,我可以看到jdbc客户端接收到FAN事件,并通过将连接状态标记为"status_CLOSE_ON_RETURN"进行处理,但使用借用的连接执行查询仍然失败。

预期的结果是,在借用的连接上执行的任何查询都会成功,并且该连接在返回到池之前仍然有效。在那之后,它应该被游泳池关闭。在完成此操作之前,停止实例命令不应成功。

配置中缺少什么吗?上面的srvctl命令是否正确?

Oracle池配置如下


PoolDataSourceImpl pds = new PoolDataSourceImpl();
        try {
            pds.setConnectionPoolName("Connection Pool");
            pds.setConnectionFactoryClassName("oracle.jdbc.pool.OracleDataSource");
            pds.setConnectionFactoryProperties(getOracleDataSourceProperties());
            pds.setDataSourceName("DataSource");
            pds.setServerName(SERVER_NAME);
            pds.setUser("system");
            pds.setPassword("pass");
            pds.setPortNumber(1521);
            pds.setMinPoolSize(0);
            pds.setMaxPoolSize(25);
            pds.setMaxIdleTime(1800);
            pds.setValidateConnectionOnBorrow(true);
            pds.setONSConfiguration("nodes=v-ind-db-11g-01:6200,v-ind-db-11g-02:6200");
            pds.setFastConnectionFailoverEnabled(true);
            pds.setInactiveConnectionTimeout(20);
            pds.setConnectionWaitTimeout(20);
            pds.setPropertyCycle(60);
            pds.startPool();
        } catch (SQLException e) {
            throw new RuntimeException("Cannot create project datasource", e);
        }
        .......
        Properties getOracleDataSourceProperties() {
            Properties p = new Properties();
            p.put("driverType", "oci");
            p.put("networkProtocol", "tcp");
            p.put("serviceName", SERVICE_NAME);
            return p;
        }

如果您执行SHUTDOWN NORMAL,然后完成交易,您的应用程序会正常运行吗?

看起来srvctl stop instance -d XXX -n YYY -o normal应该这样做。

这个线程建议srvctl的默认关闭方法是"立即",这可以解释您所看到的情况。

我能够通过的两个更改来测试UCP对FCF的支持

  1. 正在创建新服务。最初尝试中使用的服务是默认服务,FCF功能不适用于此处注释中所述的默认服务。

  2. 正在停止服务而不是实例。停止实例将模拟计划外停机,而不是计划内停机。

相关内容

  • 没有找到相关文章

最新更新