SOP for Oracle 23ai:Python 连接 Oracle 的两种方法

前情回顾

前文介绍了如何使用 python-oracledb 连接 Oracle 23ai 数据库,并演示了如何使用独立连接方式。

其中提到了支持两种连接池: DRCP 和 PRCP。

本文将对这两种连接池做具体演示。

DRCP 和 PRCP 连接池

连接池技术的优点不言而喻:

  1. 缩短连接时间和次数
  2. 复用连接和减小开销
  3. 简化应用开发

在 Oracle 数据库中,提供了两种主要的连接池技术:

  1. DRCP (Database Resident Connection Pooling)

DRCP 为整个 CDB 配置一个连接池,或者为每个 PDB 配置一个隔离的连接池。

这一行为由参数 ENABLE_PER_PDB_DRCP 控制,该参数默认为 false。^1

默认情况下,DRCP 为整个 CDB 创建一个连接池。该连接池由所有 PDB 共享。

修改参数为 true 后, 整个 CDB 没有连接池,DRCP 为每个 PDB 创建一个隔离的连接池。你可以连接到特定的 PDB,并根据该 PDB 的特定要求配置、管理和监视其连接池。

SQL> show parameter enable_per_pdb_drcp
NAME                TYPE    VALUE 
------------------- ------- ----- 
enable_per_pdb_drcp boolean TRUE  

在 PDB 中启用 DRCP。

EXECUTE DBMS_CONNECTION_POOL.START_POOL();

查看 DRCP 状态。

SQL> SELECT connection_pool, status, minsize, maxsize, INACTIVITY_TIMEOUT, CON_ID FROM dba_cpool_info;

CONNECTION_POOL                STATUS       MINSIZE    MAXSIZE    INACTIVITY_TIMEOUT    CON_ID 
______________________________ _________ __________ __________ _____________________ _________ 
SYS_DEFAULT_CONNECTION_POOL    ACTIVE             0         40                   300         3
  1. PRCP (Proxy Resident Connection Pooling)

在 Oracle 23ai 中,引入隐式连接池特性,不使用应用程序连接池的客户端应用程序可以利用 CMAN-TDM 代理驻留连接池 (PRCP),而无需进行任何应用程序更改。

当应用程序启动和完成数据库操作时,即使应用程序没有显式关闭连接,新功能也可以在运行时自动将 PRCP 服务器分配给应用程序连接或从应用程序连接分配 PRCP 服务器。

在自治数据库中,可以启用每个 PDB PRCP 池,允许您整合每个 PDB 的连接池,并在属于同一 PDB 的多个服务之间共享这些会话。^2

23ai 新视图: V$TDM_STATS

23ai 新引入一个动态性能视图: V$TDM_STATS

用于描述 Oracle 连接管理 Traffic Director 模式 (CMAN-TDM) 的统计信息。

SQL> desc V$TDM_STATS;

Name                             Null?    Type
________________________________ ________ ______________________________ 
CMAN_ID                                   VARCHAR2(1024)
GATEWAY_ID                                NUMBER
SERVICE_NAME                              VARCHAR2(1024)
PRCP_NUM_REQUESTS                         NUMBER
PRCP_NUM_BUSY_CONNECTIONS                 NUMBER
PRCP_NUM_OPEN_CONNECTIONS                 NUMBER
PRCP_HISTORIC_MAX_CONNECTIONS             NUMBER
PRCP_NUM_WAITS                            NUMBER
PRCP_NUM_WAITS_ACTIVE                     NUMBER
PRCP_NUM_HITS                             NUMBER
PRCP_NUM_INBOUND_CONNECTIONS              NUMBER
EDITION                                   VARCHAR2(1024)
UPDATED_TIME                              TIMESTAMP(6) WITH TIME ZONE
CON_ID                                    NUMBER

代码示例: DRCP

python-oracledb 2.1.0 中新增参数 pool_boundary 来配合 Oracle Database 23ai 中的 DRCP 或 PRCP 特性。

当参数值为 statement 时,则当连接为无状态(即,没有活动游标、活动事务、临时表或临时 LOB)时,池中的连接将隐式释放回 DRCP 或 PRCP 池。

当参数值为 transaction 时,则当调用 Connection.commit()Connection.rollback() 方法之一时,池中的连接将隐式释放回 DRCP 或 PRCP 池。^3

完整示例代码如下:

import oracledb

pool = oracledb.create_pool(
    user="SYS", password="1",
    dsn="127.1:1521/FREEPDB1:pooled?pool_boundary=transaction",
    mode=oracledb.AUTH_MODE_SYSDBA,
    cclass="ShawnAPP")

with pool.acquire() as conn:
    cursor = conn.cursor()
    cursor.execute("select to_char(current_date)")
    (result,) = cursor.fetchone()
    print("NOW: ", repr(result))
 
print("See U.")

输出:

NOW:  '09-MAY-24'
See U.

V$CPOOL_CC_STATS

从 Oracle 11g 引入动态性能视图: V$CPOOL_CC_STATS

该视图显示有关每个实例的数据库驻留连接池的连接类级别统计信息。

通过查询该视图,可以看到,上面代码已经发出 15 次请求。

select cclass_name, num_requests, num_hits, num_misses 
from v$cpool_cc_stats;
CCLASS_NAME        NUM_REQUESTS    NUM_HITS    NUM_MISSES 
_______________ _______________ ___________ _____________
SYS.ShawnAPP                 15           0            15

其他视图

与 连接池 相关的动态性能视图,还有:

  • V$CPOOL_CC_INFO: 显示有关每个实例的数据库驻留连接池的池到连接类映射的信息。
  • V$CPOOL_CONN_INFO: 显示有关连接代理的每个连接的连接信息。
  • V$CPOOL_STATS: 显示有关实例的数据库驻留连接池统计信息。
  • V$AUTHPOOL_STATS: 显示身份验证池的统计信息。 当客户端应用程序连接到数据库驻留连接池 (DRCP) 时,此池将对用户连接进行身份验证。

以及,静态数据字典视图:

  • DBA_CPOOL_INFO: 显示有关数据库中所有 DRCP 的配置信息。

小结

本文介绍了 Oracle 中的 DRCP 和 PRCP 两种连接池,并以 Python 代码为例做演示。

下期,我们一起来学习如何使用 Java 连接 Oracle 23ai 数据库。

往期精彩

  • Oracle 数据库全面升级为 23ai
  • 哪种JDK才是程序猿/媛心中最好的呢?
  • python-oracledb 已率先支持 Oracle 23ai
  • 一文带你了解 Oracle 23ai 新特性 Vector 的基础用法
  • MySQL 8.4.0 LTS 发布 (MySQL 第一个长期支持版本)
  • 喜大普奔!VMware Workstation Pro 17.5 官宣免费!

-- END --

alt

如果这篇文章为你带来了灵感或启发,就请帮忙点『赞』or『在看』or『转发』吧,感谢!(๑˃̵ᴗ˂̵)

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/705403.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P8805 [蓝桥杯 2022 国 B] 机房

P8805 [蓝桥杯 2022 国 B] 机房 分析 是一道lca题目,可以直接套模板 前缀和处理点权 具体思路: 1.n台电脑用n-1条网线相连,任意两个节点之间有且仅有一条路径(拆分成各自到公共祖先节点的路径——lca);…

Docker三剑客从0到1

一、docker三剑客介绍 使用"三剑客"可以帮助我们解决docker host维护,多容器编排部署,多个docker host集群的各个难题。 docker-machine 创建虚拟机 我们知道docker使用了linux的内核技术(namespace 资源隔离,cgroup资源限制等),那么如果我想在windows或Mac系统上…

JavaScript 进阶(二)

一、深入对象 1. 创建对象的三种方式 利用 new Object 创建对象 2. 构造函数 【注意事项】 【例】 这样子写好之后,想要添加一个新的结构类似的对象,直接照着红圈中写,最后改相应的数据就好了 注意:红色是第一步,黄…

centos7下使用docker安装fastdfs服务

先查看容器是否已经存在 docker ps -a 删除掉之前的tracker及storage服务 docker rm tracker docker rm storage 1、没有镜像先下载镜像 docker pull morunchang/fastdfs 2、运行服务 a、不指定物理服务器路径 docker run -d --name tracker --nethost morunchang/fastdfs sh…

c++20---std::erase----std::erase_if

问题&#xff1a;如何删除满足条件的所有元素。 erase #include <iostream> #include <algorithm> #include <vector>int main(){std::vector<int> vec{1,2,3,1,1,1,1,1};std::erase(vec,1);for(int v:vec) std::cout<<v<<" "…

函数递归练习

目录 1.分析下面选择题 2.实现求第n个斐波那契数 3.编写一个函数实现n的k次方&#xff0c;使用递归实现。 4.写一个递归函数DigitSum(n)&#xff0c;输入一个非负整数&#xff0c;返回组成它的数字之和 5.递归方式实现打印一个整数的每一位 6.实现求n的阶乘 1.分析下面选择…

什么是TCP的粘包、拆包问题?

一、问题解析 TCP粘包和拆包问题是指在进行TCP通信时&#xff0c;因为TCP是面向流的&#xff0c;所以发送方在传输数据时可能会将多个小的数据包粘合在一起发送&#xff0c;而接收方则可能将这些数据包拆分成多个小的数据包进行接收&#xff0c;从而导致数据接收出现错误或者数…

万物皆可监控(shell脚本监控TIDB-DM和DSG同步状态)

监控的方式有很多&#xff0c;常用的有zabbix和prometheus平台&#xff0c;理论上都可以做到对有状态服务的监控&#xff0c;因为我个人对这两个监控平台不是很熟悉&#xff0c;所以一般喜欢使用shell脚本来做监控&#xff1b; 纯oracle 数据库的监控推荐使用EMCC&#xff0c;…

荣耀MagicBook X 14 Pro锐龙版 2023 集显(FRI-H76)笔记本电脑原装出厂Windows11系统工厂模式安装包下载,带F10智能还原

恢复开箱状态预装OEM系统&#xff0c;适用型号&#xff1a;HONOR荣耀FRI-H76、FRI-H56 链接&#xff1a;https://pan.baidu.com/s/1Lcg45byotu5kDDSBs3FStA?pwdl30r 提取码&#xff1a;l30r 华为荣耀原装WIN11系统工厂安装包&#xff0c;含F10一键恢复功能、系统自带所有驱…

项目管理-案例重点知识(成本管理)

项目管理&#xff1a;每天进步一点点~ 活到老&#xff0c;学到老 ヾ(◍∇◍)&#xff89;&#xff9e; 何时学习都不晚&#xff0c;加油 三、成本管理 案例重点 成本管理 案例重点内容&#xff1a; &#xff08;1&#xff09;成本管理计划内容 &#xff08;2&#xff09;估算…

随笔:棋友们

我是在小学二年级学会中国象棋的&#xff0c;准确说&#xff0c;是学会象棋的下棋规则的&#xff0c;师傅是二舅。我最早的对手就是同学波仔。波仔比我略早学会象棋&#xff0c;总用连珠炮欺负我&#xff0c;开局几步棋就把我将死。我不知道怎么破解。轮到我先走时&#xff0c;…

手机怎么制作搞笑gif?来看看这一个方法

动态图片是现在网络中很流行的一种图片格式&#xff0c;可以把多个jpg、png格式静图变成一张gif格式的动图。在各大社交媒体中非常的受欢迎&#xff0c;用简单快速的方法传递信息。当我们想要通过手机制作gif动画的时候&#xff0c;要如何操作呢&#xff1f;这时候&#xff0c;…