Oracle 知识篇+会话级全局临时表在不同连接模式中的表现
- 标签:会话级临时表、全局临时表、幻读
- 释义:Oracle 全局临时表又叫GTT
★ 结论
✔ 专用服务器模式:不同应用会话只能访问自己的数据
✔ 共享服务器模式:不同应用会话只能访问自己的数据
✔ 数据库驻留连接池模式:不同应用会话可能访问到前一个应用会话的数据(当他们连接到同一个数据库会话时),直到应用连接池释放数据库会话(但不像应用连接池,数据库驻留连接池产生的数据库会话由Oracle维护,应用层无法控制其释放)
✔ 数据库连接池方式(HikariCP等):不同应用会话可能访问到前一个应用会话的数据(当他们连接到同一个数据库会话时),直到应用连接池释放数据库会话
★ 实验环境
※ 数据库:19c
※ 会话模式└专用服务器模式└共享服务器模式└数据库驻留连接池模式└数据库连接池方式(HikariCP)
★ 实验结果
✔ 专用服务器模式:gtt表的count(*)数值始终为“1”
✔ 共享服务器模式:gtt表的count(*)数值始终为“1”
✔ 数据库驻留连接池模式:gtt表的count(*)数值会在新会话重复访问时累加,并不总是“1”,由于数据库会话的释放由Oracle管理,因此应用下次执行时可能从上次的值开始累加
✔ 数据库连接池方式(HikariCP):gtt表的count(*)数值会在新会话重复访问时累加,并不总是“1”,直到应用连接池释放数据库会话后下次执行重新从“1”计数
★ 配置数据库(需要重启数据库)
✔ 配置共享服务器模式
alter system set shared_server_sessions=1 scope=spfile;
alter system set max_shared_servers=1 scope=spfile;
alter system set shared_servers=1 scope=spfile;
alter system set max_dispatchers=1 scope=spfile;
alter system set dispatchers='(PROTOCOL=TCP)(DISPATCHERS=1)' scope=spfile;✔ 配置数据库驻留连接池模式
execute dbms_connection_pool.start_pool();
execute dbms_connection_pool.alter_param('','minsize','1');
execute dbms_connection_pool.alter_param('','maxsize','1');✔ 创建会话级全局临时表
drop table zzt.gtt;
create global temporary table zzt.gtt(id number) on commit preserve rows;
★ Java案例
✔ 专用服务器模式
package PAC_001;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.SQLException;
import oracle.jdbc.pool.OracleDataSource;
public class CLA_oracle {public static void main(String args[]) throws SQLException {OracleDataSource ods = null;Connection conn = null;Statement stmt = null;ResultSet rset = null;ods = new OracleDataSource();ods.setURL("jdbc:oracle:thin:@1.1.1.9:1521/prodpdb1:dedicated");ods.setUser("zzt");ods.setPassword("zzt");for (int i = 0; i <= 5; i++) {conn = ods.getConnection();try {stmt = conn.createStatement();int rset1 = stmt.executeUpdate("insert into zzt.gtt values(1)");int rset2 = stmt.executeUpdate("commit"); // 默认自动提交,可写可不写rset = stmt.executeQuery("SELECT count(*) FROM zzt.gtt");while (rset.next())System.out.println(i + " : " + rset.getString(1));System.out.println("#########");}finally {if (rset != null)rset.close();if (stmt != null)stmt.close();if (conn != null)conn.close();}}}
}✔ 共享服务器模式
package PAC_001;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.SQLException;
import oracle.jdbc.pool.OracleDataSource;
public class CLA_oracle {public static void main(String args[]) throws SQLException {OracleDataSource ods = null;Connection conn = null;Statement stmt = null;ResultSet rset = null;ods = new OracleDataSource();ods.setURL("jdbc:oracle:thin:@1.1.1.9:1521/prodpdb1:shared");ods.setUser("zzt");ods.setPassword("zzt");for (int i = 0; i <= 5; i++) {conn = ods.getConnection();try {stmt = conn.createStatement();int rset1 = stmt.executeUpdate("insert into zzt.gtt values(1)");int rset2 = stmt.executeUpdate("commit"); // 默认自动提交,可写可不写rset = stmt.executeQuery("SELECT count(*) FROM zzt.gtt");while (rset.next())System.out.println(i + " : " + rset.getString(1));System.out.println("#########");}finally {if (rset != null)rset.close();if (stmt != null)stmt.close();if (conn != null)conn.close();}}}
}✔ 数据库驻留连接池模式
package PAC_001;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.SQLException;
import oracle.jdbc.pool.OracleDataSource;
public class CLA_oracle {public static void main(String args[]) throws SQLException {OracleDataSource ods = null;Connection conn = null;Statement stmt = null;ResultSet rset = null;ods = new OracleDataSource();ods.setURL("jdbc:oracle:thin:@1.1.1.9:1521/prodpdb1:pooled");ods.setUser("zzt");ods.setPassword("zzt");for (int i = 0; i <= 5; i++) {conn = ods.getConnection();try {stmt = conn.createStatement();int rset1 = stmt.executeUpdate("insert into zzt.gtt values(1)");int rset2 = stmt.executeUpdate("commit"); // 默认自动提交,可写可不写rset = stmt.executeQuery("SELECT count(*) FROM zzt.gtt");while (rset.next())System.out.println(i + " : " + rset.getString(1));System.out.println("#########");}finally {if (rset != null)rset.close();if (stmt != null)stmt.close();if (conn != null)conn.close();}}}
}✔ 应用连接池方式(HikariCP)
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import java.sql.Statement;
public class C_O {// main函数public static void main(String[] args) {executeQuery();}public static void executeQuery() {HikariConfig hikariConfig = new HikariConfig();hikariConfig.setPoolName("HikariCP 连接池");hikariConfig.setDataSourceClassName("oracle.jdbc.pool.OracleDataSource");hikariConfig.addDataSourceProperty("user", "zzt");hikariConfig.addDataSourceProperty("password", "zzt");hikariConfig.addDataSourceProperty("url", "jdbc:oracle:thin:@1.1.1.9:1521/prodpdb1:dedicated");hikariConfig.setMaximumPoolSize(1); // 设置数据库层的session数hikariConfig.setAutoCommit(false); // 默认自动提交为开启状态hikariConfig.setConnectionTimeout(5000);HikariDataSource hikariDataSource = new HikariDataSource(hikariConfig);Connection connection = null;for (int i = 0; i < 5; i++) {System.out.println("#############");try {connection = hikariDataSource.getConnection();Statement st1 = connection.createStatement();st1.executeUpdate("insert into zzt.gtt values(1)");Statement st2 = connection.createStatement();st2.executeUpdate("commit");Statement st = connection.createStatement();ResultSet rs = st.executeQuery("select count(*) cn from zzt.gtt");while (rs.next()) {System.out.println("【count is:】" + rs.getString("cn"));}} catch (SQLException e) {e.printStackTrace();} finally {if (connection != null) {try {connection.close(); // 断开的是Java和hikari应用池的连接,而非HikariCP和数据库的连接} catch (SQLException e) {e.printStackTrace();}}}}hikariDataSource.close(); // 断开HikariCP和数据库之间的连接System.out.println("【ALL END】");}
}
※ 如果您觉得文章写的还不错, 别忘了在文末给作者点个赞哦 ~
相关文章:

Oracle 知识篇+会话级全局临时表在不同连接模式中的表现
标签:会话级临时表、全局临时表、幻读释义:Oracle 全局临时表又叫GTT ★ 结论 ✔ 专用服务器模式:不同应用会话只能访问自己的数据 ✔ 共享服务器模式:不同应用会话只能访问自己的数据 ✔ 数据库驻留连接池模式:不同应…...

MySQL 数据库文件的导入导出
目录 数据库的导出 导出整个数据库 导出数据库中的数据表 导出数据库结构 导出数据库中表的表结构 导出多个数据库 导出所有数据库 数据库的导入 数据库的导出 mysqldump -h IP地址 -P 端口 -u 用户名 -p 数据库名 > 导出的文件名 用管理员权限打开cmd进入MySQL的bi…...

找不到资产文件project.assets.json
NuGet 在“obj”文件夹中写入名为 project.assets.json 的文件,.NET SDK 使用该文件来获取有关要传递到编译器的包的信息 。 如果在生成过程中找不到资产文件 project.assets.json,则会发生此错误。 1.执行命令的方式解决 点击工具,分别展开命…...

【python】python将json字符串导出excel | pandas处理json字符串保存为csv
如何将json转为csv 1、通过json直接转为csv 在Python中,你可以使用pandas库来处理DataFrame(数据帧)和将JSON数据转换为CSV格式。下面是一个简单的示例代码,展示了如何使用pandas库将JSON数据转换为CSV文件: import p…...

opencv 基础54-利用形状场景算法比较轮廓-cv2.createShapeContextDistanceExtractor()
注意:新版本的opencv 4 已经没有这个函数 cv2.createShapeContextDistanceExtractor() 形状场景算法是一种用于比较轮廓或形状的方法。这种算法通常用于计算两个形状之间的相似性或差异性,以及找到最佳的匹配方式。 下面是一种基本的比较轮廓的流程&…...

分布式系统理论
以前的架构...

Gartner发布2023年的存储技术成熟曲线
技术路线说明 Gartner自1995年起开始采用技术成熟度曲线,它描述创新的典型发展过程,即从过热期发展到幻灭低谷期,再到人们最终理解创新在市场或领域内的意义和角色。 一项技术 (或相关创新)在发展到最终成熟期的过程中经历多个阶段࿱…...

c++ 有元
友元分为两部分内容 友元函数友元类 友元函数 问题:当我们尝试去重载operator<<,然后发现没办法将operator<<重载成成员函数。因为cout的输出流对象和隐含的this指针在抢占第一个参数的位置。this指针默认是第一个参数也就是左操作 数了。…...

安卓:网络框架okhttp
目录 一、okhttp介绍 1. OkHttpClient类: 常用方法: 2. Request类: 常用方法: 3. Response类: 常用方法: 4. Call类: 常用方法: 5. Interceptor接口: 常用方法&…...

Python爬虫 爬取图片
在我们日常上网浏览网页的时候,经常会看到一些好看的图片,我们就希望把这些图片保存下载,或者用户用来做桌面壁纸,或者用来做设计的素材。 我们最常规的做法就是通过鼠标右键,选择另存为。但有些图片鼠标右键的时候并没…...
【云原生】Pod详讲
目录 一、Pod基础概念1.1//在Kubrenetes集群中Pod有如下两种使用方式:1.2pause容器使得Pod中的所有容器可以共享两种资源:网络和存储。1.3kubernetes中的pause容器主要为每个容器提供以下功能:1.4Kubernetes设计这样的Pod概念和特殊组成结构有…...
先进先出的队
文章目录 队列特点队列实现 队列特点 先进先出,后进后出 队列实现 queue.c#define _CRT_SECURE_NO_WARNINGS 1 #include"Queue.h" //初始化 void QueInit(Queue* pq) {assert(pq);pq->head NULL;pq->tail NULL;pq->size 0; } //入队&#…...

怎样学会单片机
0、学单片机首先要明白,一个单片机啥也干不了,学单片机的目的是学习怎么用单片机驱动外部设备,比如数码管,电机,液晶屏等,这个需要外围电路的配合,所以学习单片机在这个层面上可以等同为学习单片…...
数据结构笔记--常见二叉树分类及判断实现
目录 1--搜索二叉树 2--完全二叉树 3--平衡二叉树 4--满二叉树 1--搜索二叉树 搜索二叉树的性质:左子树的节点值都比根节点小,右子树的节点值都比根节点大; 如何判断一颗二叉树是搜索二叉树? 主要思路: 递归自底向…...

docker小白第二天
centos上安装docker docker官网,docker官网,找到下图中的doc文档。 进入如下页面 选中manuals,安装docker引擎。 最终centos下的docker安装文档链接:安装文档链接. 具体安装步骤: 1、打开Centos,输入命…...

【变形金刚03】使用 Pytorch 开始构建transformer
一、说明 在本教程中,我们将使用 PyTorch 从头开始构建一个基本的转换器模型。Vaswani等人在论文“注意力是你所需要的一切”中引入的Transformer模型是一种深度学习架构,专为序列到序列任务而设计,例如机器翻译和文本摘要。它基于自我注意机…...

「Web3大厂」价值70亿美元的核心竞争力
经过近 5 年的研发和酝酿,Linea 团队在 7 月的巴黎 ETHCC 大会期间宣布了主网 Alpha 的上线,引起了社区的广泛关注。截止 8 月 4 日,据 Dune 数据信息显示,其主网在一周内就涌入了 100 多个生态项目,跨入了超 2 万枚 E…...
前端发送请求和后端springboot接受参数
0.xhr、 ajax、axios、promise和async/await 和http基本方法 xhr、 ajax、axios、promise和async/await都是异步编程和网络请求相关的概念和技术! xhr:XMLHttpRequest是浏览器提供的js对象(API),用于请求服务器资源。…...
程序一直在阿里云服务器运行
保持阿里云服务器开机程序保持运行. 1.下载Screen CentOS 系列系统: yum install screen Ubuntu 系列系统: sudo apt-get install screen 2、运行screen,创建一个screen screen -S name:name是标记进程, 给进程备注…...
Linux 文件与目录管理
nvLinux 文件与目录管理 我们知道 Linux 的目录结构为树状结构,最顶级的目录为根目录 /。 其他目录通过挂载可以将它们添加到树中,通过解除挂载可以移除它们。 在开始本教程前我们需要先知道什么是绝对路径与相对路径。 绝对路径: 路径的写…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...

Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...