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 多平台发布

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

selenium发展史

Selenium Core 2004 年,Thoughtworks 的工程师 Jason Huggins 正在负责一个 Web 应用的测试工作,由于这个项目需要频繁回归,这导致他不得不每天做着重复且低效的工作。为了解决这个困境,Jason 开发了一个运行在 JavaScript 沙箱中…

Python的for循环

for循环 Python中的for循环是一种迭代循环,可以迭代容器中的每一个元素。 for循环结构 示例: users ["汤姆", "艾米", "李华"] for i in users:print(i) 其中i为临时变量,仅在循环中有效;users…

使用可接受gitlab参数的插件配置webhook

jenkins配置 安装Generic Webhook Trigger 配置远程触发令牌 勾选Print post content和Print contributed variables用于打印值 配置gitlab 选择新增webhook 配置webhook http://JENKINS_URL/generic-webhook-trigger/invoke,将JENKINS_URL修改成自己的jenkins地址 先保存…

mysql 查询---多表设计

部分数据 1distinct去重 select distinct job from tb_emp;select * from tb_emp where id in (1,2,3); select * from tb_emp where id between 1 and 5; select * from tb_emp where name like __; #下划线匹配单个字符, %匹配任意多个字符select min(entrydate) from tb_e…

第9章.Keil5-MDK软件简介

目录 0. 《STM32单片机自学教程》专栏 9.1 主界面 9.2 文本格式编辑 9.3 代码提示&语法检测&代码模版 9.4 其他小技巧 9.4.1 TAB 键的妙用 9.4.2 快速定位函数/变量被定义的地方 9.4.3 快速注释与快速消注释 9.4.4 快速打开头文件 9.4.5 查找替换…

C++基础——继承(下)

一、继承与静态成员 基类定义了static 静态成员,则整个继承体系里面只有一个这样的成员。无论派生出多少个子 类,都只有一个 static 成员实例 。 class person { public:person(const char* name "lisi"):_name(name){} public:string _name;…

Trieve实践:好用功的开源RAG

目录 RAG概述 RAG架构 Trieve Trieve介绍 Trieve使用 初始化 自行搭建RAG Trieve是什么,RAG是什么,本文来带你了解。其实在很多产品应用里面都会有RAG,比如ai客服,针对性的智能问答,都是基于RAG实现的 RAG概述 RAG 是一种…

Electron学习笔记(五)

文章目录 相关笔记笔记说明 七、系统1、系统对话框2、自定义窗口菜单3、系统右键菜单4、快捷键(1)、监听网页按键事件 (窗口需处于激活状态)(2)、监听全局按键事件 (窗口无需处于激活状态)(3)、补充:自定义窗口菜单快捷…

力扣刷题 day2

快乐数 202. 快乐数 - 力扣(LeetCode)   图: java // 快乐数 --> 19 > 1^2 9 ^2 82 > 82 > 8 ^ 2 2 ^ 2 ......public boolean isHappy(int n) {// 使用快慢指针int slow n, fast getSum(n);while (slow ! fast) {slow getSum(slo…

十大排序算法之->归并排序

一、归并排序简介 归并排序是一种基于分治策略的有效且稳定的排序算法。归并排序由约翰冯诺伊曼提出,是计算机科学中一个非常基础且历史悠久的算法。 归并排序利用分治法的策略,将一个大的数组拆分成几个小的子数组,这些子数组各自独立地排…

2024中国应急(消防)品牌巡展西安站成功召开!惊喜不断

消防品牌巡展西安站 5月10日,由中国安全产业协会指导,中国安全产业协会应急创新分会、应急救援产业网联合主办,陕西消防协会协办的“一切为了安全”2024年中国应急(消防)品牌巡展-西安站成功举办。该巡展旨在展示中国应急(消防&am…

免费体验GPT-4o这5大功能,非常好用!

这几天,OpenAI发布了新的GPT版本,GPT-4o,比GPT4更加智能也更快。 据说,GPT-4o在文本、推理和编码智能方面实现了GPT-4 Turbo级别的性能,在多语言、文本、音频和视觉功能方面甚至超过了市面上所有同类产品。 有几个亮点…

树链剖分详解,看这一篇就够了

前置知识: 树形结构链式前向星(熟练)线段树(熟练)DFS序(熟练)LCA(了解定义) 什么是树链剖分 树链剖分其实有两种:重链剖分和长链剖分。重链剖分就是把儿子节点最重的儿子称为重儿子,把树分成若干条重链(如图一)&#…

雍禾植发张东宏:以诚相待毛发患者

医学道路上的奋斗往往需要坚定的信念和不懈的努力。对于张东宏医生来说,医学并非止步于书本知识,而是一次次与患者对话、一次次实操中的历练和积累。在他的成长历程中,医学之路如同一棵参天大树,每一步都是扎实的打磨,…

2024年CSPM考试时间线梳理!

最近后台有朋友在问今年CSPM的考试安排,给大家整理一下,需要的朋友认真查看,不要错过考试。2024年5月12日举行了本年度第二次CSPM3级考试~接下来的考试安排如下: 1)2024年CSPM考试安排 本次考试出成绩时间——2024年6…

【RSGIS数据资源】2001-2021 年亚洲季风区主要国家作物种植制度数据集

文章目录 1. 数据集概况2. 数据格式3. 文件名命名规则4. 数据生产服务单位5. 元数据6. 数据引用与参考文献引用 1. 数据集概况 2001-2021 年亚洲季风区主要国家作物种植制度数据集(ACIA500)是结合MODIS 影像和现有的土地利用等多源数据,基于…

QT状态机1-三态循环状态机

#include "MainWindow.h" #include "ui_MainWindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)

【半夜学习MySQL】复合查询(含多表查询、自连接、单行/多行子查询、多列子查询、合并查询等详解)

🏠关于专栏:半夜学习MySQL专栏用于记录MySQL数据相关内容。 🎯每天努力一点点,技术变化看得见 文章目录 回顾基本查询多表查询自连接子查询单行子查询多行子查询多列子查询在from子句中使用子查询合并查询 回顾基本查询 下面使用…

使用python给图片加上文字水印

使用python给图片加上文字水印 作用效果代码 作用 给图片加上文字水印文字水印的字体,颜色,位置可自定义 效果 原图: 加水印后的图: 代码 from PIL import Image, ImageDraw, ImageFontdef add_text_watermark(input_image…

Linux 无名信号量(Semaphore)的使用

目录 一、无名信号量的概念二、无名信号量相关函数三、信号量的使用步骤四、应用场景五、测试代码 一、无名信号量的概念 Linux无名信号量(Semaphore)   在Linux操作系统中,信号量(Semaphore)是一种用于进程间或线程…