您好,登錄后才能下訂單哦!
【故障處理】ORA-28040: No matching authentication protocol
各位技術愛好者,看完本文后,你可以掌握如下的技能,也可以學到一些其它你所不知道的知識,~O(∩_∩)O~:
① 告警日志中頻繁出現Using deprecated SQLNET.ALLOWED_LOGON_VERSION parameter、ORA-28040: No matching authentication protocol錯誤,9i的客戶端連接到12c高版本的解決方案
② Windows下使用oerr命令
Tips:
① 本文在itpub(http://blog.itpub.net/26736162)、博客園(http://www.cnblogs.com/lhrbest)和微信公眾號(xiaomaimiaolhr)上有同步更新。
② 文章中用到的所有代碼、相關軟件、相關資料及本文的pdf版本都請前往小麥苗的云盤下載,小麥苗的云盤地址見:http://blog.itpub.net/26736162/viewspace-1624453/。
③ 若網頁文章代碼格式有錯亂,請下載pdf格式的文檔來閱讀。
④ 在本篇BLOG中,代碼輸出部分一般放在一行一列的表格中。
本文如有錯誤或不完善的地方請大家多多指正,ITPUB留言或QQ皆可,您的批評指正是我寫作的最大動力。
項目 | source db |
db 類型 | RAC |
db version | 12.1.0.2.0 |
db 存儲 | ASM |
OS版本及kernel版本 | SuSE Linux Enterprise Server(SLES 11) 64位 |
告警日志中頻繁出現Using deprecated SQLNET.ALLOWED_LOGON_VERSION parameter。
或JDBC連接Oracle12c報如下錯誤:
Caused by: java.sql.SQLException: ORA-28040: No matching authentication protocol at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112) at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331) at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:283) at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:278) at oracle.jdbc.driver.T4CTTIoauthenticate.receiveOsesskey(T4CTTIoauthenticate.java:294) at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:357) at oracle.jdbc.driver.PhysicalConnection.(PhysicalConnection.java:441) at oracle.jdbc.driver.T4CConnection.(T4CConnection.java:165) at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35) at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:801) at java.sql.DriverManager.getConnection(DriverManager.java:582) at java.sql.DriverManager.getConnection(DriverManager.java:154)
|
或者使用9i的客戶端去連接12c的數據庫就會報ORA-28040: No matching authentication protocol這個錯誤。
使用oerr命令來查看,在Oracle 11g下:
[oracle@orcltest ~]$ oerr ora 28040 28040, 0000, "No matching authentication protocol" // *Cause: No acceptible authentication protocol for both client and server // *Action: Administrator should set SQLNET_ALLOWED_LOGON_VERSION parameter // on both client and servers to values that matches the minimum // version supported in the system. [oracle@orcltest ~]$
|
12c下:
oracle@HQsPSL-PSCV-R02:/oracle/app/oracle> oerr ora 28040 28040, 0000, "No matching authentication protocol" // *Cause: There was no acceptable authentication protocol for // either client or server. // *Action: The administrator should set the values of the // SQLNET.ALLOWED_LOGON_VERSION_SERVER and // SQLNET.ALLOWED_LOGON_VERSION_CLIENT parameters, on both the // client and on the server, to values that match the minimum // version software supported in the system. // This error is also raised when the client is authenticating to // a user account which was created without a verifier suitable for // the client software version. In this situation, that account's // password must be reset, in order for the required verifier to
|
可以看到,該參數在11g和12c下的解決方案是不同的。
查詢了一下參數SQLNET.ALLOWED_LOGON_VERSION,發現該參數在12c中以廢棄,而是采用SQLNET.ALLOWED_LOGON_VERSION_CLIENT和SQLNET.ALLOWED_LOGON_VERSION_SERVER代替。
客戶說是之前碰到了ORA-28040: No matching authentication protocol的錯誤才加上該參數的。
解決:在Oracle用戶(不是grid用戶)下,將$ORACLE_HOME/network/admin/sqlnet.ora文件原來的SQLNET.ALLOWED_LOGON_VERSION=8注釋掉(如果沒有sqlnet.ora文件,那么就創建一個),修改為如下的行:
SQLNET.ALLOWED_LOGON_VERSION_SERVER=8 SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8 |
不用重啟數據庫或者監聽,也不用重啟應用。
區別如下:
SQLNET.ALLOWED_LOGON_VERSION_SERVER:控制可以連接到12c數據庫的客戶端版本(client --->orace 12c db )
SQLNET.ALLOWED_LOGON_VERSION_CLIENT:控制12c數據庫可以連到哪些版本的數據庫(orace 12c db --->其它版本的oracle db),例如:控制通過DB LINK可連接到哪些版本的oracle庫。
所以,該案例中主要起作用的是需要配置SQLNET.ALLOWED_LOGON_VERSION_SERVER。
特別需要注意:
(1)如果是RAC,因為RAC是使用grid的監聽器,因此很多人以為是在“/u02/app/12.1.0/grid/network/admin/sqlnet.ora” 加“SQLNET.ALLOWED_LOGON_VERSION_SERVER=8”,其實這是錯的,而是仍然在$ORACLE_HOME/network/admin/sqlnet.ora加“SQLNET.ALLOWED_LOGON_VERSION_SERVER=8”
(2)上面所說的版本,是指dba_users.password_versions的版本。
在Oracle 12c中,雖然在sqlnet.ora加SQLNET.ALLOWED_LOGON_VERSION=8可以解決問題,但由于這個參數在12c已經廢棄了,而是用SQLNET.ALLOWED_LOGON_VERSION_CLIENT和SQLNET.ALLOWED_LOGON_VERSION_SERVER代替。如果繼續使用該參數,會在告警日志中無窮無盡的報“Using deprecated SQLNET.ALLOWED_LOGON_VERSION parameter.”,如下所示:
另外,對于JDBC的報錯也可以下載支持oracle12c的jdbc驅動jar包。鏈接:http://www.oracle.com/technetwork/database/features/jdbc/jdbc-drivers-12c-download-1958347.html
注:本地jdk版本為1.6,則下載ojdbc6.jar;jdk版本為1.7,則下載ojdbc7.jar
如下圖所示:
也可以在在ORACLE安裝目錄lib庫目錄下載ojdbc7.jar包,然后把這個ojdbc7.jar加載到開發環境中。
[oracle@orcltest dbhome_1]$ ll $ORACLE_HOME/jdbc/lib/ojdbc* -rw-r--r-- 1 oracle oinstall 3447295 Aug 23 2011 /u02/app/oracle/product/11.2.0/dbhome_1/jdbc/lib/ojdbc5dms_g.jar -rw-r--r-- 1 oracle oinstall 2617019 Aug 23 2011 /u02/app/oracle/product/11.2.0/dbhome_1/jdbc/lib/ojdbc5dms.jar -rw-r--r-- 1 oracle oinstall 3425922 Aug 23 2011 /u02/app/oracle/product/11.2.0/dbhome_1/jdbc/lib/ojdbc5_g.jar -rw-r--r-- 1 oracle oinstall 2095661 Aug 23 2011 /u02/app/oracle/product/11.2.0/dbhome_1/jdbc/lib/ojdbc5.jar -rw-r--r-- 1 oracle oinstall 4486070 Aug 23 2011 /u02/app/oracle/product/11.2.0/dbhome_1/jdbc/lib/ojdbc6dms_g.jar -rw-r--r-- 1 oracle oinstall 3327656 Aug 23 2011 /u02/app/oracle/product/11.2.0/dbhome_1/jdbc/lib/ojdbc6dms.jar -rw-r--r-- 1 oracle oinstall 4462913 Aug 23 2011 /u02/app/oracle/product/11.2.0/dbhome_1/jdbc/lib/ojdbc6_g.jar -rw-r--r-- 1 oracle oinstall 2714016 Aug 23 2011 /u02/app/oracle/product/11.2.0/dbhome_1/jdbc/lib/ojdbc6.jar [oracle@orcltest dbhome_1]$
|
有關該問題,MOS上有很多文檔可以供參考。
http://docs.oracle.com/database/121/UPGRD/deprecated.htm#UPGRD60010
https://docs.oracle.com/database/121/UPGRD/deprecated.htm#BABEDDGA
小麥苗有7、8、9、10、11、12c的數據庫,所以順便模擬一下這個錯誤。
服務端為12c的數據庫,客戶端為9i,我們在客戶端嘗試連接12c的數據庫:
Microsoft Windows [版本 10.0.10240] (c) 2015 Microsoft Corporation. All rights reserved.
D:\Users\xiaomaimiao>set ORACLE_HOME=D:\Program_files\u01\app\oracle\product\ora92
D:\Users\xiaomaimiao>set ora ORACLE10G=D:\Program files\app\oracle\product\10.2.0\db_1 ORACLE11G=D:\Program_files\u01\app\oracle\product\11.2.0.1\dbhome_1 ORACLE8I=D:\Program files\app\oracle\product\ora8i ORACLE_HOME=D:\Program_files\u01\app\oracle\product\ora92
D:\Users\xiaomaimiao>cd %ORACLE_HOME%/bin
D:\Program_files\u01\app\oracle\product\ora92\bin>sqlplus -v
SQL*Plus: Release 9.2.0.1.0 - Production
D:\Program_files\u01\app\oracle\product\ora92\bin>tnsping ora12c
TNS Ping Utility for 32-bit Windows: Version 9.2.0.1.0 - Production on 19-DEC-2016 17:44:59
Copyright (c) 1997 Oracle Corporation. All rights reserved.
Used parameter files: D:\Program_files\u01\app\oracle\product\ora92\network\admin\sqlnet.ora
Used TNSNAMES adapter to resolve the alias Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.59.128)(PORT = 1521))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = lhrdb12c))) OK (10 msec)
D:\Program_files\u01\app\oracle\product\ora92\bin>sqlplus lhr/lhr@ora12c
SQL*Plus: Release 9.2.0.1.0 - Production on Mon Dec 19 17:45:07 2016
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
ERROR: ORA-28040: No matching authentication protocol
Enter user-name:
|
可以看到報ORA-28040: No matching authentication protocol的錯誤。
我們在服務端的$ORACLE_HOME/network/admin/sqlnet.ora添加如下的行:
SQLNET.ALLOWED_LOGON_VERSION_SERVER=8 SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8 |
重新嘗試連接:
D:\Program_files\u01\app\oracle\product\ora92\bin>sqlplus lhr/lhr@ora12c
SQL*Plus: Release 9.2.0.1.0 - Production on Mon Dec 19 17:51:54 2016
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
SQL>
|
可以看到已經正常連接了。
如果將服務端的$ORACLE_HOME/network/admin/sqlnet.ora中的SQLNET.ALLOWED_LOGON_VERSION_SERVER=8和SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8注釋掉,而換成SQLNET.ALLOWED_LOGON_VERSION=8,如下:
SQLNET.ALLOWED_LOGON_VERSION=8 # SQLNET.ALLOWED_LOGON_VERSION_SERVER=8 # SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8 |
嘗試連接數據庫:
D:\Program_files\u01\app\oracle\product\ora92\bin>sqlplus lhr/lhr@ora12c
SQL*Plus: Release 9.2.0.1.0 - Production on Mon Dec 19 17:56:29 2016
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
SQL>
|
可以正常連接,但是查看告警日志的時候有如下的輸出:Using deprecated SQLNET.ALLOWED_LOGON_VERSION parameter. 而且,每連接一次數據庫就輸出一行該數據,和我們之前分析的問題是一致的。
由于客戶的環境是12c Linux的,而自己沒有12c的Linux環境,安裝較為麻煩,索性就安裝了一個Windows版本的。結果執行oerr ora 的時候報錯了:
C:\Users\xiaomaimiao>oerr ora 10041 oerr: Cannot access the message file E:\app\oracle\product\12.1.0\dbhome_1\rdbms\mesg\oraus.msg No such file or directory
C:\Users\xiaomaimiao>oerr ora 01555 oerr: Cannot access the message file E:\app\oracle\product\12.1.0\dbhome_1\rdbms\mesg\oraus.msg No such file or directory
|
經查看報錯的文件(E:\app\oracle\product\12.1.0\dbhome_1\rdbms\mesg\oraus.msg)的確沒有,而且任何*.msg文件都不存在,那就從12c的Linux下把相關的$ORACLE_HOME/rdbms/mesg/*.msg文件都拷貝到Windows的環境下:
[oracle@orcltest mesg]$ pwd /u02/app/oracle/product/11.2.0/dbhome_1/rdbms/mesg [oracle@orcltest mesg]$ ll *.msg -rw-r--r-- 1 oracle oinstall 4070 Jul 25 2008 amduus.msg -rw-r--r-- 1 oracle oinstall 6298 Apr 14 2011 asmcmdus.msg -rw-r--r-- 1 oracle oinstall 5886 Aug 3 2007 dbvus.msg -rw-r--r-- 1 oracle oinstall 23309 Jan 28 2010 dgmus.msg -rw-r--r-- 1 oracle oinstall 175881 May 11 2011 diaus.msg -rw-r--r-- 1 oracle oinstall 49483 Jan 28 2010 expus.msg -rw-r--r-- 1 oracle oinstall 15148 Nov 8 2009 gimus.msg -rw-r--r-- 1 oracle oinstall 47609 Feb 18 2009 impus.msg -rw-r--r-- 1 oracle oinstall 3585 Nov 3 2009 kfedus.msg -rw-r--r-- 1 oracle oinstall 3457 Nov 6 2008 kfodus.msg -rw-r--r-- 1 oracle oinstall 1792 Mar 1 2009 kfsgus.msg -rw-r--r-- 1 oracle oinstall 26775 Nov 1 1999 kgpus.msg -rw-r--r-- 1 oracle oinstall 3113 Sep 3 1997 kopus.msg -rw-r--r-- 1 oracle oinstall 72528 Sep 17 2011 kupus.msg -rw-r--r-- 1 oracle oinstall 4651 Sep 3 1997 lcdus.msg -rw-r--r-- 1 oracle oinstall 22043 Nov 27 2006 nidus.msg -rw-r--r-- 1 oracle oinstall 129827 May 5 2011 ocius.msg -rw-r--r-- 1 oracle oinstall 734 Mar 8 2010 opwus.msg -rw-r--r-- 1 oracle oinstall 4922454 Sep 17 2011 oraus.msg -rw-r--r-- 1 oracle oinstall 178311 Aug 25 2009 qsmus.msg -rw-r--r-- 1 oracle oinstall 391272 Sep 17 2011 rmanus.msg -rw-r--r-- 1 oracle oinstall 40078 Jul 30 2001 sbtus.msg -rw-r--r-- 1 oracle oinstall 123863 May 22 2010 smgus.msg -rw-r--r-- 1 oracle oinstall 20433 Jan 13 2010 udeus.msg -rw-r--r-- 1 oracle oinstall 20572 Jan 13 2010 udius.msg -rw-r--r-- 1 oracle oinstall 143025 Jul 27 2009 ulus.msg [oracle@orcltest mesg]$
|
然后執行就OK了。
C:\Users\xiaomaimiao>oerr ora 01555 01555, 00000, "snapshot too old: rollback segment number %s with name \"%s\" too small" // *Cause: rollback records needed by a reader for consistent read are // overwritten by other writers // *Action: If in Automatic Undo Management mode, increase undo_retention // setting. Otherwise, use larger rollback segments
|
About Me
...............................................................................................................................
● 本文作者:小麥苗,只專注于數據庫的技術,更注重技術的運用
● 本文在itpub(http://blog.itpub.net/26736162)、博客園(http://www.cnblogs.com/lhrbest)和個人微信公眾號(xiaomaimiaolhr)上有同步更新
● 本文itpub地址:http://blog.itpub.net/26736162/viewspace-2131338/
● 本文博客園地址:http://www.cnblogs.com/lhrbest/p/6219687.html
● 本文pdf版及小麥苗云盤地址:http://blog.itpub.net/26736162/viewspace-1624453/
● QQ群:230161599 微信群:私聊
● 聯系我請加QQ好友(642808185),注明添加緣由
● 于 2016-12-19 15:00 ~ 2016-12-25 19:00 在農行完成
● 文章內容來源于小麥苗的學習筆記,部分整理自網絡,若有侵權或不當之處還請諒解
● 版權所有,歡迎分享本文,轉載請保留出處
...............................................................................................................................
手機長按下圖識別二維碼或微信客戶端掃描下邊的二維碼來關注小麥苗的微信公眾號:xiaomaimiaolhr,免費學習最實用的數據庫技術。
cdn.qqmail.com/zh_CN/htmledition/p_w_picpaths/function/qm_open/ico_mailme_02.png">
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。