总结oracle常见的错误

738 阅读4分钟

前言

  • oracle大型复杂的数据库,一旦操作不当,便会入坑,所以打算持续记录自己踩过的坑跟大家一起分享


三个方面

1. ORA-12638: 身份证明检索失败的解决方法

  • 本地oracle客户端用PLSQL Developer连接远程数据库,每次登录都会在很久之后,
    出现 ORA-12638: 身份证明检索失败,tnsping 表明TNS配置没有问题。
  • 解决方案:
  • D:\app\sabre\product\11.2.0\client_1\NETWORK\ADMIN
    (这是我本地的,位置根据自身安装的目录)
  • 此目录下找到sqlnet.ora文件
  • 如果存在SQLNET.AUTHENTICATION_SERVICES= (NTS)设置,
    则修改为:SQLNET.AUTHENTICATION_SERVICES= (NONE)
  • 如果不存在,则直接添加SQLNET.AUTHENTICATION_SERVICES= (NONE),
    我的问题得以解决。
  • SQLNET.AUTHENTICATION_SERVICES 表示oracle使用哪种验证方式,
    NTS表示采用本地操作系统认证,NONE表示将采用口令文件方式认证。
    设定了none后,本地的操作系统认证将不被许可,
  • oracle将采用口令文件认证(此时 remote_login_passwordfile=exclusive)
    如connect /as sysdba 登录,后报错RA-01031: insufficient privileges,
    实际上是要求你输入sysdba的用户名和密码

2. java.sql.SQLException: ORA-28040: 没有匹配的验证协议

  •  一直以来用的都是服务器上的Oracle数据库,今天改成连接本地Oracle 12c数据库是出问题了。hibernate连接Oracle12c时出现
  • java.sql.SQLException: ORA-28040: 没有匹配的验证协议。
  • 通过查找资料找到了好的解决方案。不需要像网友所说的到官网上下载新的驱动来解决问题。
  • 解决方案:
  • 在Oracle的安装路径下找到sqlnet.ora文件。
    (我的安装路径F:\app\root\root\product\12.1.0\dbhome_1\NETWORK\ADMIN)
  • 在文件的最后添加
  • SQLNET.ALLOWED_LOGON_VERSION=8
  • 就完美解决了

3. java.sql.SQLException: ORA-28000: the account is locked

  • 现象:项目启动时报了“the account is locked”–用户账号被锁
  • 查询oracle相关文档,用户账户被锁可能的产生原因如下:
  • 1. 尝试多次登录未成功(可能密码不正确);
    2. 此用户被管理员手工锁定;
    3. 用户密码到期、未按时修改密码,等等。 根据自己的情况,第一感觉是因为用户密码到期,然后自己进行的验证过程,如下:
  • 第一步:查询用户的proifle 

  • 第二步:查看指定概要文件(如default)的密码有效期: 


  • 第三步:将密码有效期由默认的180天修改成“无限制”(修改之后不需要重启动数据库,会立即生效) 


  • 修改成功之后,还是发现还是不能登录!
    以上用到的sql:

  • –查看用户的proifle是哪个,一般是default 

  • SELECT username,PROFILE FROM dba_users;

  • –查看指定概要文件(如default)的密码有效期设置 
  • SELECT * FROM dba_profiles s WHERE s.profile=’DEFAULT’ AND resource_name=’PASSWORD_LIFE_TIME’;

  • –将密码有效期由默认的180天修改成“无限制”: 修改之后不需要重启动数据库,会立即生效。 
  • ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED; 

  • –执行成功后,再次查询用户密码有效期 
  • SELECT * FROM dba_profiles s WHERE s.profile=’DEFAULT’ AND resource_name=’PASSWORD_LIFE_TIME’;

  • 3、解决方法:遇到这个账号被锁,淡定的通过超级管理员来解锁 

  • 语法:alter user username account unlock;

  • alter user zhengzemin account unlock;
    commit;

  • 解锁后,账户就可以正常登录了!!
  • 4、思考:实际项目中,通过用户模块进行创建的新用户,是否存在有效期的问题!
  • 实际项目有有效期的需求:一个账户只能使用30天,之后必须修改密码
  • 实际项目中没有这个需求:那么在界面新建账户,应该考虑设置新账户的有效期为“UNLIMITED”
  • 可能还会报错,那就是java的错误,安装的oracle的jar包与本地的oracle不匹配
  • 首先,先查一下我们本地oracle版本
  • select version from v$instance;

  • 查找之后去官网对应一下,看看自己本地的oracle需要对应哪个版本的oracle - jar包


  • 在配置文件pom.xml中下载对应的jar包

  • 还有数据库链接要对应上,若tnsnanes.ora文件写的是localhost,那java链接就要是localhost


原文地址

juejin.cn/post/684490…

参考

ORA-12638: 身份证明检索失败的解决方法:www.cnblogs.com/Sabre/p/672…

java.sql.SQLException: ORA-28040: 没有匹配的验证协议:www.cnblogs.com/zhangyonghe…

java.sql.SQLException: ORA-28000: the account is locked:blog.csdn.net/java2805803…