sqlplus / as sysdba無法登入的奇怪報錯

來源:互聯網
上載者:User

sqlplus / as sysdba無法登入的奇怪報錯

最近看了一個問題,看問題的表現著實比較奇怪,困擾了我好一會兒。
 問題的背景是協助開發的同學解決一個資料庫問題,最後問題解決之後,我想做一個作業系統級的檢查,幫他們看看還有什麼需要注意的地方。然後在命令列中國登陸到了這台資料庫伺服器,切換到Oracle使用者之後,查看到資料庫執行個體為cytj,然後準備做一番檢查。
#ps -ef|grep smon
 root      3657 32596  0 17:37 pts/2    00:00:00 grep smon
 oracle    5433    1  0  2015 ?        00:45:46 ora_smon_cytj
但是這個時候,奇怪的問題就發生了。
#su - oracle
 -bash: ulimit: open files: cannot modify limit: Operation not permitted
 $sqlplus / as sysdba
 SQL*Plus: Release 11.2.0.4.0 Production on Mon Mar 7 17:37:56 2016
 Copyright (c) 1982, 2013, Oracle.  All rights reserved.
 ERROR:
 ORA-01017: invalid username/password; logon denied
 Enter user-name:
碰到這種問題,看起來還是哪幾種常規的思路,其中之一就是看看ORACLE_HOME是否完全映射。根據smon的進程得到進程號為5433,在/proc/5433下面可以得到一個環境變數的列表。
$cat /proc/5433/environ|xargs -0 -n1 |grep ORACLE_HOME
 ORACLE_HOME=/U01/app/oracle/product/11.2.0.4
解析得到ORACLE_HOME的路徑
 然後查看系統內容變數的值$ORACLE_HOME,發現也確實是完全映射的。
$echo $ORACLE_BASE
 /U01/app/oracle
 $echo $ORACLE_HOME
 /U01/app/oracle/product/11.2.0.4
那麼ORACLE_SID,ORACLE_HOME都沒有問題,怎麼就串連不到這個執行個體了呢?
 一種分析問題的思路就是,查看網路的配置情況,是否為/etc/hosts的配置問題。然後查看資料庫
$cat /etc/sysconfig/network
 NETWORKING=yes
 NETWORKING_IPV6=no
 #GATEWAY=
 HOSTNAME=BJ-BX-131-190
 $cat /etc/hosts
 127.0.0.1  localhost localhost.localdomain localhost4 localhost4.localdomain4
 ::1        localhost localhost.localdomain localhost6 localhost6.localdomain6
 10.127.131.190 BJ-BX-131-190


 $cat /U01/app/oracle/product/11.2.0.4/network/admin/sqlnet.ora
 # sqlnet.ora Network Configuration File: D:\oracle\product\11.2.0\dbhome_1\network\admin\sqlnet.ora
 # Generated by Oracle configuration tools.

 # This file is actually generated by netca. But if customers choose to
 # install "Software Only", this file wont exist and without the native
 # authentication, they will not be able to connect to the database on NT.

 SQLNET.AUTHENTICATION_SERVICES= (NTS)

 NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

使用tnsping來檢測tns串連串的情況,也沒有發現任何問題。當然這個地方和sqlplus / as sysdba 應該沒有直接關係,但是通過這個可以說明網路服務配置都是合理的。
[admin]$tnsping cytj
 TNS Ping Utility for Linux: Version 11.2.0.4.0 - Production on 07-MAR-2016 18:02:35
 Copyright (c) 1997, 2013, Oracle.  All rights reserved.
 Used parameter files:
 /U01/app/oracle/product/11.2.0.4/network/admin/sqlnet.ora
 Used TNSNAMES adapter to resolve the alias
 Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.127.131.190)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = cytj)))
 OK (20 msec)

使用一個普通使用者來本地串連測試,發現scott使用者是鎖定的,通過這個也能夠說明串連是起了作用了。
[admin]$sqlplus scott/tiger
 SQL*Plus: Release 11.2.0.4.0 Production on Mon Mar 7 18:03:40 2016
 Copyright (c) 1982, 2013, Oracle.  All rights reserved.
 ERROR:
 ORA-28000: the account is locked

然後換做tns串連的方式,發現錯誤也是一樣,說明走網路連接的方式也起作用了。
[admin]$sqlplus scott/tiger@cytj
 SQL*Plus: Release 11.2.0.4.0 Production on Mon Mar 7 18:03:40 2016
 Copyright (c) 1982, 2013, Oracle.  All rights reserved.
 ERROR:
 ORA-28000: the account is locked

然後對於這個錯誤,在這個系統中摸索了一番,發現這個路徑著實夠亂,竟然存在兩個ORACLE_HOME,
當前的是:
/U01/app/oracle/product/11.2.0.4/dbs
發現的新ORACLE_HOME是
/home/U01/app/oracle/product/11.2.0.4/dbs
但是經過一番論證發現然並卵,這個路徑對這個問題實際上沒有造成什麼影響。
 因為ORACLE_HOME這些配置完全和另外一個ORACLE_HOME沒有任何關聯。
 還有一些可能就是和密碼檔案有關,於是我手工修改了sys密碼,再次登入。
[dbs]$sqlplus system/oracle
 SQL*Plus: Release 11.2.0.4.0 Production on Mon Mar 7 22:12:11 2016
 Copyright (c) 1982, 2013, Oracle.  All rights reserved.
 Connected to:
 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
 With the Partitioning and Real Application Testing options
 SQL> alter user sys identified by oracle;
 User altered.
然後再次登入,問題依舊。
 這個時候還可以進一步排除密碼檔案的影響,比如我指定了一個不存在的執行個體test,這個時候sqlplus / as sysdba應該接入一個空執行個體。
$export ORACLE_SID=test
 $sqlplus / as sysdba
 SQL*Plus: Release 11.2.0.4.0 Production on Mon Mar 7 19:28:42 2016
 Copyright (c) 1982, 2013, Oracle.  All rights reserved.
 ERROR:
 ORA-01017: invalid username/password; logon denied
然後進一步測試,發現dg broker登入也有問題。
[dbs]$dgmgrl /
 DGMGRL for Linux: Version 11.2.0.4.0 - 64bit Production
 Copyright (c) 2000, 2009, Oracle. All rights reserved.
 Welcome to DGMGRL, type "help" for information.
 ORA-01017: invalid username/password; logon denied
使用rman來登入發現也是同樣的錯誤。
[dbs]$rman target /
 Recovery Manager: Release 11.2.0.4.0 - Production on Mon Mar 7 19:29:36 2016
 Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.
 RMAN-00571: ===========================================================
 RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
 RMAN-00571: ===========================================================
 RMAN-00554: initialization of internal recovery manager package failed
 RMAN-04005: error from target database:
 ORA-01017: invalid username/password; logon denied
好了,事已至此,可以充分肯定問題出在這個本地作業系統認證上,oracle所在的使用者組都是沒有問題的。
 作業系統認證在$ORACLE_HOME/network/admin/sqlnet.ora也有一些關係。
 我們看看這個檔案是怎麼配置的。
[admin]$vi sqlnet.ora
 # sqlnet.ora Network Configuration File: D:\oracle\product\11.2.0\dbhome_1\network\admin\sqlnet.ora
 # Generated by Oracle configuration tools.
 # This file is actually generated by netca. But if customers choose to
 # install "Software Only", this file wont exist and without the native
 # authentication, they will not be able to connect to the database on NT.

 SQLNET.AUTHENTICATION_SERVICES= (NTS)
 xxxx
看到這個問題,一下子明白了原委,就是下面的配置導致的問題。
SQLNET.AUTHENTICATION_SERVICES= (NTS)
這個應該是在windows中的配置,怎麼在linux裡面設定這個,可見最開始就是從windows中拷貝的這個檔案,怎麼進一步印證呢,可以看看sqlnet.ora的注釋部分,裡面的路徑就是D盤的路徑,也有注釋說了是在NT環境下,在linux環境中,這個參數其實是不需要的。
 注釋掉之後。
 再次登入就沒有任何問題了。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.