remote_os_authent引數引起的系統無法連線故障

super_sky發表於2014-01-01
今天早上接到主機工程師的電話,機房空調壞了,好多主機down了,請求重啟資料庫。

資料庫重啟完成後,業務人員報告說無法連線資料庫,錯誤資訊如下:
4 ETW000  [     dev trc,00000]  charset='UTF16', ncharset='AL16UTF16', UNI_ASC=FALSE                      30  0.052404
4 ETW000  [     dev trc,00000]  Logon as OPS$-user to get SAPBWP's password                               46  0.052450
4 ETW000  [     dev trc,00000]  Connecting as /@BWP on connection 0 (nls 0) ... (dbsl 720 090112, UNICODE[2])
4 ETW000                                                                                                  58  0.052508
4 ETW000  [     dev trc,00000]     OCIHandleAlloc(OCI_HTYPE_SVCCTX, con=0, svchp=6000000002321268)       151  0.052659
4 ETW000  [     dev trc,00000]  Allocating server context handle                                          30  0.052689
4 ETW000  [     dev trc,00000]  Attaching to database server BWP (con=0, svchp=6000000002321268, srvhp=6000000002324810)
4 ETW000                                                                                                  56  0.052745
4 ETW000  [     dev trc,00000]  Assigning server context 6000000002324810 to service context 6000000002321268
4 ETW000                                                                                               68495  0.121240
4 ETW000  [     dev trc,00000]     OCIHandleAlloc(OCI_HTYPE_SESSION, con=0, usrhp=600000000239fd60)      292  0.121532
4 ETW000  [     dev trc,00000]  Starting user session: OCISessionBegin(con=0, usr='/', svc=6000000002321268, srv=6000000002324810, usr=600000000239fd60)
4 ETW000                                                                                                  53  0.121585
4 ETW000  [     dev trc,00000]     OCISessionBegin(OCI_DEFAULT) failed with -1=OCI_ERROR                7657  0.129242
4 ETW000  [     dev trc,00000]     OCISessionBegin(OCI_DEFAULT) failed with SQL error 1017:              243  0.129485
4 ETW000  [     dev trc,00000]     ORA-01017: invalid username/password; logon denied                                                                        
4 ETW000                                                                                                  49  0.129534
4 ETW000  [    dbsloci.,00000]  *** ERROR => CONNECT failed with sql error '1017'                        122  0.129656
4 ETW000  [     dev trc,00000]     set_ocica() -> SQL error code 1017                                     45  0.129701
4 ETW000  [     dev trc,00000]  --&gtoci_get_errmsg (con=0, rc=1017)                                       101  0.129802
4 ETW000  [     dev trc,00000]     OCIErrorGet -> SQL error code: 1017                                   110  0.129912
4 ETW000  [     dev trc,00000]     ORA-01017: invalid username/password; logon denied                                   
上面資訊來源於SAP,從錯誤資訊看看使用者密碼錯誤了。檢查了使用者狀態沒有被鎖定,詢問了業務,最近密碼沒有修改過。重新修改密碼後,問題依舊。
登入到sap管理賬戶,無法登入到sqlplus 報如下錯誤:
bfbwdbci:bwpadm> sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Wed Jan 1 10:40:19 2014
Copyright (c) 1982, 2011, Oracle.  All rights reserved.
ERROR:
ORA-12547: TNS:lost contact
Enter user-name: 
檢查$ORACLE_HOME/bin/oracle許可權
bfbwdbci:bwpadm> ls -l $ORACLE_HOME/bin/oracle
-rwxrwxr-x   1 orabwp     dba        553652296 Sep 15  2012 /oracle/BWP/11203/bin/oracle
許可權應該是如下值
bfbwapp3:orabwd 1> ls -l $ORACLE_HOME/bin/oracle
-rwsr-s---   1 orabwd     dba        553652024 Dec 14  2012 /oracle/BWD/11203/bin/oracle
修改完成後,sqlplus 可以可以登入,但是業務報問題依然。

這時開始檢查引數,發現 remote_os_authent引數值為false了。
SQL> show parameter remote_os_authent
NAME                                 TYPE
------------------------------------ ---------------------------------
VALUE
------------------------------
remote_os_authent                    boolean
FALSE
Oracle允許使用者通過採用外部驗證的方式登入資料庫。預設情況下,只允許本機的使用者採用外部驗證登入到資料庫中。當將remote_os_authent這個引數設定為true時,則允許遠端使用者採用外部驗證的方式登入到資料庫中。
看來是這個引數的問題了,修改該引數,重啟資料庫
SQL> alter system set remote_os_authent=true scope=spfile;
System altered.
重啟後,
SQL> show parameter remote
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
remote_dependencies_mode             string      TIMESTAMP
remote_listener                      string
remote_login_passwordfile            string      EXCLUSIVE
remote_os_authent                    boolean     TRUE
remote_os_roles                      boolean     FALSE
result_cache_remote_expiration       integer     0

這時業務報告可以正常連線資料庫了。真是太坑人了,也是給了自己一個教訓啊。

在SAP應用中需要注意這兩個引數remote_os_authent 和 OS_AUTHENT_PREFIX
雖然在11g中,這個引數remote_os_authent被棄用了,但是他還可以起到向下相容的作用。
alert log中資訊
Deprecated system parameters with specified values:
  remote_os_authent
引數資訊
SQL> show parameter OS_AUTHENT_PREFIX

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
os_authent_prefix                    string      ops$

這兩個引數的關係:
REMOTE_OS_AUTHENT specifies whether remote clients will be authenticated with the value of the OS_AUTHENT_PREFIX parameter.
The REMOTE_OS_AUTHENT parameter is deprecated. It is retained for backward compatibility only.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/11590946/viewspace-1066158/,如需轉載,請註明出處,否則將追究法律責任。

相關文章