ORA-28040: No matching authencation protocol
创新互联是一家专业提供大连企业网站建设,专注与做网站、成都网站设计、H5高端网站建设、小程序制作等业务。10年已为大连众多企业、政府机构等服务。创新互联专业网站建设公司优惠进行中。
1、问题复现:Spring boot 应用启动时候正常,但是页面访问后台接口,程序再访问数据库时,控制台报错如下:没有匹配的身份验证协议
Caused by: java. sql. SQLExceptiona ORA-28040: No matching authentication protocol
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java 112)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java: 331)
....
2、产生原因:当时环境是:Java jdk 1.8 + Spring boot ,在开发环境时是 Oracle 11g,此时运行正常,后面到测试环境换成 Oracle 12C,就发生上面的错误,经过检查发现原来是 .jar 文件里面打了两个不同版本的 Oracle 驱动。
3、解决方式:直接用压缩工具打开 .jar 文件,然后手动删除多余的 ojdbc14-x.x.x.jar 文件,只留下 ojdbc8 版本的驱动即可。
OracleOraDb11g_home1TNSListener服务启动后停止
1、问题复现:有时候连接 Oralce 的时候发现连接不上,然后打开 "services.msc" 服务面板发现 xxxxTNSListener 监听服务没有启动,当手动启动监听服务的时候,它弹框提示:“本地计算机上的OracleOraDb11g_home1TNSListener服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止。”
2、产生原因:Oracle 数据库通常都会提供远程访问,比如小张电脑上安装了 Oralce 数据库,小李、小刘就可以直接访问小张的Oracle。Oracle 开启远程访问,需要在配置文件中设置本机 ip 地址,这样其它人才能通过 IP 访问,然而当 IP 在某些情况下发生变化时,比如切换了网络,或者是动态 IP 等情况,Oracle 监听器监听的 IP 与计算机实际 IP 就会不一致,然后就会发生上面的错误。
3、解决方式:找到 Oracle 数据库安装目录下的 listener.ora 文件,比如 C:appThinkproduct11.2.0dbhome_1NETWORKADMINlistener.ora。然后修改其中监听的 IP 为 Oralce 安装的计算机 IP 地址,比如下面的 192.168.3.195。最后再次启动监听服务即可正常。
1. 服务器指定字符集与客户字符集不同,而与加载数据字符集一致。
解决方法:对于这种情况,只需要设置客户端字符集与服务器端字符集一致就可以了,具体操作如下:
* 查看当前字符集:
SQL select * from sys.props$
2 WHERE NAME=‘NLS_CHARACTERSET’;
NAME value$
NLS_CHARACTERSET ZHS16GBK
可以看出,现在服务器端Oracle数据库的字符集为‘ZHS16GBK’
* 根据服务器的字符集在客户端作相应的配置或者安装Oracle的客户端软件时指定:
如果还没安装客户端,那么在安装客户端时,指定与服务器相吻合的字符集即可;如果已经安装好了客户端,并且客户端为 sql*net 2.0 以下版本,进入Windows的系统目录,编辑oracle.ini文件,用US7ASCII替换原字符集,重新启动计算机,设置生效;否则,如果,客户端为 sql*net 2.0 以上版本,在Win98 下 运 行REGEDIT,第一步选HKEY_LOCAL_MACHINE,第二步选择SOFTWARE, 第三步选择 Oracle, 第四步选择 NLS_LANG, 键 入 与服 务 器 端 相 同 的 字 符 集
(本例为:HKEY_LOCAL_MACHINE/
SOFTWARE/ORACLE/NLS_LANG :AMERICAN _ AMERICA. ZHS16GBK)。
如果是UNIX客户端,则:
SQL conn / as sysdba
Connected.
SQL SQL UPDATE sys.PROPS$ SET value$=‘SIMPLIFIED CHINESE’
2 WHERE NAME=‘NLS_LANGUAGE’;
2. 服务器指定字符集与客户字符集相同,与加载数据字符集不一致。
解决方法:强制加载数据字符集与服务器端字符集一致。要做到这一点,可以通过重新创建数据库,并选择与原卸出数据一致的字符集,然后IMP数据,这种情况仅仅适用于空库和具有同一种字符集的数据。
解决这类问题,也可以先将数据加载到具有相同字符集的服务器上,然后用转换工具卸出为foxbase 格式或access格式数据库,再用转换工具转入到不同字符集的Oracle数据库中,这样就避免了Oracle字符集的困扰。目前数据库格式转换的工具很多,像power builder5.0以上版本提供的pipeline及Microsoft Access数据库提供的数据导入/导出功能等。
3. 服务器指定字符集与客户字符集不同,与输入数据字符集不一致。
对于这种情况,目前为止都还没有太好的解决方法。
通过上面的了解,我们知道,导致在后期使用数据库时出现种种关于字符集的问题,多半是由于在数据库设计、安装之初没有很好地考虑到以后的需要,所以,我们完全可以通过在服务器上和客户端使用相同的字符集来避免由此类问题引出的麻烦
怎样修改查看Oracle字符集
a.数据库服务器字符集select * from nls_database_parameters,其来源于props$,是表示数据库的字符集。
b.客户端字符集环境select * from nls_instance_parameters,其来源于v$parameter,
表示客户端的字符集的设置,可能是参数文件,环境变量或者是注册表
c.会话字符集环境 select * from nls_session_parameters,其来源于v$nls_parameters,表示会话自己的设置,可能是会话的环境变量或者是alter session完成,如果会话没有特殊的设置,将与nls_instance_parameters一致。
客户端的字符集要求与服务器一致,才能正确显示数据库的非Ascii字符。如果多个设置存在的时候,alter session环境变量注册表参数文件
实际情况
我用select * from nls_database_parameters
PARAMETER VALUE
------------------------------ ------------------------------
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CHARACTERSET ZHS16GBK
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_SORT BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM
PARAMETER VALUE
------------------------------ ------------------------------
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY $
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_RDBMS_VERSION 10.2.0.1.0
说明我在创建数据库时指定的字符集是ZHS16GBK,我用
update sys.props$ set value$='AL32UTF8' where name='NLS_CHARACTERSET';
修改了字符集,但插入中文时仍然有问题,这或许就如上面资料所说的通过修改SYS.PROPS$来修改主要是对应客户端的显示,与存储无关,
所以仍旧是乱码。
然后我重新创建了个数据库,指定字符集为AL32UTF8,插入中文就没问题了。
可见我们如果要在数据库中显示中文,在创建数据库时一定哟指定好所用的字符集。
oracle 关闭之后启动报错ora-00205是设置错误造成的,解决方法为:
1、工作中遇到在启动数据库实例的时候报错ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance。
2、先用静态参数文件pfile启动数据库,发现使用静态参数文件启动时没有报错。
3、利用静态参数文件重建动态参数文件spfile并重启数据库,发现问题已经解决,不再有失效参数错误。
4、查看警报日志 alert_bianxueqing.log 下面是警报的位置。
5、打开文件把文件中的log_archive_start 把这一行直接删除 然后再重启动就可以了。
造成ORA-12560:
TNS:
协议适配器错误的问题的原因有三个:
1.监听服务没有起起来。windows平台个一如下操作:开始---
程序
---
管理工具
---服务,打开服务面板,
启动oraclehome92TNSlistener服务。
2.database
instance没有起起来。windows平台如下操作:开始---程序---管理工具---服务,打开服务
面板,启动oracleserviceXXXX,XXXX就是你的database
SID.
3.
注册表
问题。regedit,然后进入HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0将该
环境变量
ORACLE_SI
D设置为XXXX,XXXX就是你的database
SID.或者右几
我的电脑
,属性--高级--环境变量---
系统变量
--新建
,
变量
名=oracle_sid,
变量值
=XXXX,XXXX就是你的database
SID.或者进入sqlplus前,在command
line下
输set
oracle_sid=XXXX,XXXX就是你的database
SID.