OCI 连接池测试

本文演示了一个使用OCI库进行连接池测试的C++程序,通过创建多个线程来展示OCI连接池的工作原理。程序展示了如何获取连接池中的连接,并执行SQL查询。在总结中提到,OCI连接池在资源不足时会创建新连接,同时支持ORACLE RAC模式,能自动测试并选择可用的服务器IP。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


#include "stdafx.h"
#include "ocilib.h"
#include<string>
#include<string.h>
#include<stdlib.h>
#include <iostream>
#include <fstream>
#include <time.h>
#include <sstream>
using namespace std;

#pragma comment(lib,"ociliba.lib")
#pragma comment(lib,"ocilibm.lib")
#pragma comment(lib,"ocilibw.lib")

#define MAX_THREADS 10
#define MAX_CONN    10
#define SIZE_STR   260

void worker(OCI_Thread *thread, void *data)
{
 OCI_Connection *cn = (OCI_Connection *)OCI_PoolGetConnection((OCI_ConnPool*)data, NULL);
 char str[SIZE_STR+1];
 std::cout<<"#######"<<cn<<std::endl;
 /* application work here */

 str[0] = 0;

 OCI_Immediate(cn, "select to_char(sysdate, 'YYYYMMDD HH24:MI:SS') from dual", OCI_ARG_TEXT, str);

 printf("%s\n", str);

 /* ... */

 OCI_ConnectionFree(cn);
}

int main(void)
{
 OCI_Thread *th[MAX_THREADS];
 OCI_ConnPool *pool;
 if (!OCI_Initialize(NULL, NULL, OCI_ENV_DEFAULT | OCI_ENV_THREADED))
  return EXIT_FAILURE;

 /* create pool */
 pool = OCI_PoolCreate("T1", "chf", "chf", OCI_POOL_CONNECTION, OCI_SESSION_DEFAULT, 0, MAX_CONN, 1);

 /* create threads */
 for (int i = 0; i < MAX_THREADS; i++)
 {
  OCI_Connection *cn = (OCI_Connection *)OCI_PoolGetConnection((OCI_ConnPool*)pool, NULL);
  if(cn)
  {
   std::cout<<" the current busy cnt : "<<cn<<"  "<<OCI_PoolGetBusyCount(pool)<<"  "<<OCI_PoolGetOpenedCount(pool)<<"  "<<
    OCI_PoolGetMax(pool)<<"---"<<OCI_GetDatabase(cn)<<std::endl
    <<OCI_GetInstanceName(cn)<<std::endl
    <<OCI_GetServiceName(cn)<<std::endl
    <<OCI_GetServerName(cn)<<std::endl;

   OCI_ConnectionFree(cn);
  }
 }

 std::cout<<"-------------------------------------"<<std::endl;
 OCI_PoolFree(pool);
 OCI_Cleanup();
 getchar();

 return EXIT_SUCCESS;
}

 

小结如下:

1.oci连接池,总是反复利用已经创建的连接,除非连接不够用才会创建新连接

2.OCI连接池支持ORACLE RAC模式,并且连接的时候,会从rac的配置文件中,依次读取配置ip等信息,进行连接测试,直到找到可用的IP/域名等信息为止

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值