Oracle:错误码ORA-28040 的坑

2023-11-11

一、背景

因项目要求,第一次部署了Oracle 12 C的Server,Linux CentOS版,数据库装好之后部署一个Java Web项目(A项目)去连接数据库,该Java项目之前用的Oracle是11 g版本,这次换成了12 C的版本,日志显示的错误信息如下:

ORA-28040: No matching authentication protocol

二、原因分析与修改测试

1、按照错误码在网上找了一下解决的案例,不外乎都是修改 $ORACLE_HOME\NETWORK\ADMIN\sqlnet.ora 文件,网上提供了两种版本的修改:

a、增加一行配置如下

 SQLNET.ALLOWED_LOGON_VERSION=8

b、增加两行配置如下“

 SQLNET.ALLOWED_LOGON_SERVER=8

 SQLNET.ALLOWED_LOGON_CLIENT=8

按照这两种改法,分别进行了修改和测试,修改之后,重启了数据库监听、数据库服务和Tomcat,结果依然报 ORA-28040 错误。

2、使用PL/SQL去连接数据库,也能正常连接使用。

3、检查连接数据库的配置文件,检查结果OK。

4、考虑到Oracle不同的版本驱动jar包可能不一样,在网上看了一下Oracle 12C依赖的jar包,发现用的是 ojdbc6,A项目中依赖的也是 ojdbc6,因此版本驱动也认为OK了。

5、经项目组导师提示,使用原始的Java代码连接Oracle 12 C,使用的jar包从Oracle安装目录中获取,版本依然是 ojdbc6,测试结果发现能连上数据库。

Connection con = null;// 创建一个数据库连接
	    PreparedStatement pre = null;// 创建预编译语句对象,一般都是用这个而不用Statement
	    ResultSet result = null;// 创建一个结果集对象
	    try
	    {
	        Class.forName("oracle.jdbc.driver.OracleDriver");// 加载Oracle驱动程序
	        System.out.println("开始尝试连接数据库!");
	        String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";// 127.0.0.1是本机地址,orcl是Oracle的示例
	        String user = "c##abc";// Oracle用户名
	        String password = "1111111";// Oracle用户名的密码
	        con = DriverManager.getConnection(url, user, password);// 获取连接
	        System.out.println("连接成功!");
	        String sql = "select user from dual";// 预编译语句
	        pre = con.prepareStatement(sql);// 实例化预编译语句
	        result = pre.executeQuery();// 执行查询,注意括号中不需要再加参数
	        while (result.next())
	            // 当结果集不为空时
	            System.out.println("用户名:" + result.getString("user"));
	    }
	    catch (Exception e)
	    {
	        e.printStackTrace();
	    }
	    finally
	    {
	        try
	        {
	            // 逐一将上面的几个对象关闭,因为不关闭的话会影响性能、并且占用资源
	            // 注意关闭的顺序,最后使用的最先关闭
	            if (result != null)
	                result.close();
	            if (pre != null)
	                pre.close();
	            if (con != null)
	                con.close();
	            System.out.println("数据库连接已关闭!");
	        }
	        catch (Exception e)
	        {
	            e.printStackTrace();
	        }
	    }	

代码参考:https://www.cnblogs.com/zhwl/p/3736114.html

6、使用Oracle 12C 自带的ojdbc6.jar替换A项目中依赖的ojdbc6的jar包,替换之后发现终于正常连上数据库了!

三、经验教训总结

1、Oracle的 ojdbc 6竟然还有不同的版本,而且支持的协议还不一样!

我在oracle官网上看到ojdbc6只有一个jar包,不分版本!这个ojdbc6-11.1.0.7.0.jar可以支持Oracle 11g,但是支持不了Oracle 12C,从文件大小也可以看出,ojdbc6-11.1.0.7.0.jar应该是老版本,根据版本向下兼容的原则,ojdbc6应该是兼容ojdbc6-11.1.0.7.0.jar的。

2、由于A项目之前使用的Oracle版本是 11g,替换到Oracle 12C的时候,考虑不周,虽然考虑到了驱动jar包的版本问题,却没仔细查看jar包的不同。当然,更规范的做法应该是在Oracle的版本发生更换的时候,对应的驱动jar包也一并更换,且更换的jar包从Oracle的安装目录中获取

3、从想到驱动的问题到略过该问题,暴露了自己解决问题的思路不够细致。

4、排查该问题的思路整理:

服务器本机使用用户登录、操作数据库 排查用户的账号密码、权限等问题
PL/SQL连接Oracle 排查网络问题
sqlnet.ora文件修改 排查ora-28040问题
Java连接Oracle的配置文件 排查连接参数
ojdbc驱动jar包检查与替换 排查驱动jar包问题和协议不匹配的问题

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Oracle:错误码ORA-28040 的坑 的相关文章

  • 高负载应用程序的数据库可扩展性?

    我见过一些应用程序拥有集群 Web 服务器 例如 10 到 20 个服务器 以具有可扩展性 可以在其中分发 在网络服务器之间加载 但我总是看到所有网络服务器都使用单个数据库 现在考虑任何电子商务或铁路 Web 应用程序 其中有数百万用户在任
  • 直接从表中选择和视图之间的区别

    直接从表中选择数据或从视图中选择数据有什么区别 每一种的最佳用途是什么 根据微软的说法 如果你使用的话会有性能优势indexedSQL Server 2000 2005 2008 中的视图 索引视图可以通过以下方式提高查询性能1 可以预先计
  • oracle嵌套表的最大行数是多少

    CREATE TYPE nums list AS TABLE OF NUMBER Oracle 嵌套表中最大可能的行数是多少 UPDATE CREATE TYPE nums list AS TABLE OF NUMBER CREATE OR
  • 是否可以在MySQL UDF中的IF条件中声明游标

    我可以在 if 语句中声明游标吗 如果可能的话我怎样才能做到 因为我刚刚做了这样的光标 CREATE FUNCTION fn test ProductID BIGINT 20 RETURNS DECIMAL 10 2 BEGIN DECLA
  • 节点 PostgreSQL 客户端查询超时

    我正在使用节点包pg对于 postgres here https github com brianc node postgres npm i pg var pg require pg 我正在查询一个不属于我的大型集群 在某些条件下可能会失败
  • Google BigQuery 底层架构

    所以我大约 10 分钟前才开始摆弄 Google BigQuery 我想知道是否有人知道他们用来存储数据的底层架构 例如 这只是他们自己的下一代 BigTable 基础设施吗 另外 他们在索引 索引重建等方面使用什么样的策略是否清楚 我只是
  • Delphi XE5 FireDAC 错误:无法加载供应商库 [libmysql.dll 或 libmysqld.dll]

    我在 Windows 7 64 位上使用 Delphi XE5 只是尝试 FireDAC 组件 我正在使用一个 TFDConnection 组件连接到本地 MySQL 数据库 v5 6 15 我已经将 libmysql dll 32位 v5
  • mysql 中 INSERT 语句的计算列

    假设我想要一个表来记录其他表中的日期和列数 或者任何类型的数学 字符串连接等 CREATE TABLE log id INTEGER NOT NULL AUTO INCREMENT date DATETIME NOT NULL count
  • 如何从连接字符串中提取数据库名称,而不考虑 RDBMS?

    我正在研究一个不知道正在使用的 RDBMS 的课程 当然 应用程序的其余部分都清楚这一点 连接字符串是此类的输入 我需要数据库名称 无论 RDBMS 如何 如何从连接字符串中提取数据库名称 我读到以下问题 如何使用 SqlConnectio
  • Sql批量复制截断小数

    当我使用批量复制将十进制值从 C DataTable 插入 Sql Server 2005 时 值会被截断而不是四舍五入 DataTable 中的数据类型为 Decimal 数据库中的数据类型为Decimal 19 3 数据表中的值为 1
  • 调整 Oracle 数据库以加快启动速度(闪回)

    我正在使用 Oracle 数据库 11 2 我有一个场景 我发出FLASHBACK DATABASE经常 似乎有一个FLASHBACK DATABASECycle 会重新启动数据库实例 大约需要 1 分钟 我的设置花了 7 秒 数据库很小
  • Hector 和 Cassandra 问题 NoSuchFieldError:DEFAULT_MEMTABLE_THROUGHPUT_IN_MB

    我正在通过 Hector 测试与 Cassandra 数据库的连接 但是当我运行 Junit 测试时 我不断收到以下消息 java lang NoSuchFieldError DEFAULT MEMTABLE THROUGHPUT IN M
  • 如何在数据库中找到实际的联系表7结构?

    我想找到我所有表单的实际代码 有很多 例如 cf7 代码如下所示
  • CAP 定理 - 可用性和分区容错性

    当我尝试理解CAP中的 可用性 A 和 分区容错性 P 时 我发现很难理解各种文章的解释 我感觉A和P可以在一起 我知道事实并非如此 这就是为什么我无法理解 简单解释一下 A和P是什么以及它们之间的区别 一致性意味着整个集群中的数据是相同的
  • 从数据库而不是配置文件中读取 CodeIgniter 配置值

    您可能知道 当您使用 CI 创建新项目时 您必须手动输入基本网址 加密密钥在config config php中 我正在努力克服这个问题 因此正在寻找一种方法read那些价值观而是从数据库中 为客户进行安装并设置时间作为一个整体decrea
  • WooCommerce:在数据库中查找产品

    我正在使用 WooCommerce 创建一个网站 我想根据用户在主页搜索表单中输入的邮政编码来限制用户可用的产品 为了能够实现这一目标 我必须在 phpMyAdmin 的数据库中指定每个产品的条件 但我似乎找不到它 有谁知道 phpmyAd
  • PHP 5 的 SQLite 编译设置是什么?

    SQLite 3 7 附带了新的预写日志记录 WAL http www sqlite org wal html并且有很多设置可以被配置 http www sqlite org compile html 但是 似乎没有任何方法可以改变任何事情
  • 如何查看Pocketsphinx词典中是否存在该单词?

    我只是想看看字典文件中是否存在字符串 字典文件位于问题底部 我想检查语音识别器是否可以识别单词 例如 识别器将无法识别字符串ahdfojakdlfafiop 因为字典中没有定义 所以 我可以检查某个单词是否在 pocktsphinx 词典中
  • 在 PHP 中将十进制/双精度/浮点值与 PDO 绑定的最佳方法是什么?

    看来类常量只涵盖PDO PARAM BOOL PDO PARAM INT and PDO PARAM STR用于绑定 您只是将十进制 浮点 双精度值绑定为字符串还是有更好的方法来处理它们 MySQLi 允许使用 d 类型表示 double
  • 如果我的应用程序安装在 SD 卡上,私人数据也在那里吗?

    我假设应用程序的私有数据 例如 SharedPreferences 和 SQLite 数据库 位于手机的内部存储而不是 SD 卡上 即使应用程序本身安装在 SD 卡上 我在任何地方都找不到对此的简单明确的确认 有人可以确认一下吗 是的 私有

随机推荐

  • 刷脸支付成为全球科技巨头们主攻研发方向

    相对于已经熟悉的二维码支付 一些民众对于刷脸支付是否安全表示担忧 蚂蚁金服资深算法专家李亮表示 通过软硬件的结合 智能算法与风控体系综合保证准确性和安全性 目前识别的准确率为99 99 而扫码极易植入木马和钓鱼软件 反而存在更大的安全隐患
  • [人工智能-深度学习-78]:开发环境 - pip install cv2下载失败的解决办法

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 122320433 目录 1 出错现象
  • TypeScript 枚举使用整理

    一 定义 enum 使用枚举我们可以定义一些有名字的数字常量 枚举通过enum关键字定义 枚举的定义和C 中有些类似 enum Direction Up 1 Down Left Right console info Direction co
  • java.lang.StackOverflowError出现的原因

    严重 Exception initializing page context java lang StackOverflowError at javax servlet http HttpServletRequestWrapper getS
  • sys.argv和argparse和os.environ/python命令行中键入参数的三种方式

    参考 命令行运行Python脚本时传入参数 3种方法 https blog csdn net helloasimo article details 124210144 x 1 sys argv sys argv类似于c中main函数中的ar
  • 区块链技术发展面临七大关键挑战以及未来的五大展望

    经过十多年的发展 区块链技术逐渐走入大众视野 并融入各行各业的建设中 今年国家也首次将区块链技术纳入新基建的范畴 近日 梳理了区块链技术的基础架构 扩展技术 挑战 并对未来区块链技术的发展进行展望 随着对区块链技术价值的发掘 区块链技术逐渐
  • 【玩转数据系列十六】机器学习PAI通过声音分辨男女(含语音特征提取相关数据和代码)...

    背景 随着人工智能的算法发展 对于非结构化数据的处理能力越来越受到重视 这里面的关键一环就是语音数据的处理 目前 许多关于语音识别的应用案例已经影响着我们的生活 例如一些智能音箱中利用语音发送指令 一些搜索工具利用语音输出文本代替键盘录入
  • Java基础——语法

    1 变量与数据类型 1 1 标识符 命名规范参考Java开发手册 嵩山版 Java对包 类 方法 参数和变量等要素命名时使用的字符序列称为标识符 命名规则如下 由字母 数字 下划线 和美元符号 组成 不能以数字开头 区分大小 长度无限制 不
  • PHP基础巩固【PHP导入导出EXCEl,TP实用封装函数,可定义表格样式】

    这个方法是自己封装了 方法确实也好用 自己也用了好几年了 但是最近发现好多小年轻用到都是PhpOffice 咱也应该与时俱进 就先把这方法分享出来 等熟悉下phpoffice再贴出更新后的版本 把以下代码写入公共函数 导入EXCEL par
  • Spigot插件开发, 使用IDEA初始化maven项目并完成简单的世界保护功能 (Spigot开发笔记-1)

    文章目录 笔记提要 开发环境 初始化项目 1 安装 IDEA 中 MineCraft 开发辅助插件 2 利用插件创建 Spigot 项目 3 填写 Spigot 项目初始化选项 4 填写 bukkit yml 选项 5 完成创建 初始化插件
  • 使用阿里云和PicGo搭建个人图床

    使用阿里云和PicGo搭建个人图床 图床 顾名思义 就是一个存储图片的云盘 可以用于作为写笔记和博客的工具 平时做笔记时直接通过截图保存的图片一般都存储在本地 一当本地图片受不可抗力被删除或者是希望把文档分享给他人或上传到自己的博客的时候
  • jquery-migrate.min.js兼容jQuery版本

    一 情形描述 已知live 方法在 jQuery 版本 1 7 中被废弃 在版本 1 9 中被移除 特殊原因下 你需要在已引用jquery 2 1 1 js的页面中使用live 那么肯定是无效的 1 代码
  • 先记录一下转化json特殊处理

    JsonProperty n private String name JsonProperty u private String url JsonProperty i 先记录一下转化json特殊处理
  • mongodb shell中显示更多数量的结果

    DBQuery shellBatchSize 300 url http stackoverflow com questions 3705517 how to print out more than 20 items documents in
  • AngularJs、RequireJs、AngularAMD、ui-router搭建的JS文件动态加载

    如今页面的复杂度极高 需要加载的脚本文件极多 降低了用户体验 所以写了这个动态加载脚本的demo 欢迎交流 1 主页 requireJs 入口 data main mian js 如下 b b
  • 递归和循环的区别

    针对需要重复地多次计算相同的问题 通常可以选择递归或者循环两种不同的方法 递归是在一个函数的内部调用这个函数本身 循环是通过设置计算的初始值及终止条件 在一个范围内重复计算 我们以计算1 2 3 n为例 我们可以采用递归和循环两种方式求出结
  • 三菱plc pwm指令_【三菱PLC指令教程】步进指令STL和RET(单序列状态转移图编程)

    戳上方 蓝字 PLC课程 关注我们哦 一 状态继电器 状态继电器 S 是PLC内部软继电器的一种 它和输入继电器 X 和输出继电器 Y 一样 有无数对常开触点和常闭触点 如不作步进状态软元件 可作一般的辅助继电器 M 使用 FX2N系列PL
  • CSS的盒模型

    盒子模型 Box Modle 可以用来对元素进行布局 包括内边距 边框 外边距 和实际内容这几个部分 盒子模型分为两种 第一种是W3C标准的盒子模型 标准盒模型 第二种IE标准的盒子模型 怪异盒模型 标准盒模型与怪异盒模型的表现效果的区别之
  • IPD流程介绍

    IPD体系中最重要的三大流程是市场管理流程 需求管理流程和集成产品开发流程 关系如图 图来自网上 尽量把三个流程的活动讲清楚 包括每个流程的活动的细节 运用的工具或方法等 1 MM流程 2 需求管理流程 3 集成产品开发流程
  • Oracle:错误码ORA-28040 的坑

    一 背景 因项目要求 第一次部署了Oracle 12 C的Server Linux CentOS版 数据库装好之后部署一个Java Web项目 A项目 去连接数据库 该Java项目之前用的Oracle是11 g版本 这次换成了12 C的版本