今天碰到一個比較奇怪的問題:
在用戶端上使用sqlplus用普通使用者可以登入,但是system以及sys使用者均無法登入,提示ORA-12154: TNS: 無法解析指定的串連標識符
SQL> conn system@webdata
輸入口令:
ERROR:
ORA-12154: TNS: 無法解析指定的串連標識符
SQL> conn xgplat@webdata
輸入口令:
已串連。
本來以為用戶端是32位的緣故,就在oracle伺服器上用sqlplus登入,也還是一樣
SQL> conn system@webdata
Enter password:
ERROR:
ORA-12541: TNS:no listener
SQL> conn xgplat@webdata
Enter password:
Connected.
問了一些人大家都比較迷糊,搞不清什麼問題。偶然看到有人說是不是和密碼檔案有關,這時我才想到我的system/sys使用者的密碼中都包含一個@字元。
比如我的密碼是123@456,那使用sqlplus登入的時候就理解成sqlplus system/123@456@webdata,這樣sqlplus就理解成123後面的就是資料庫的連接字串,這樣自然就報錯並提示TNS: 無法解析指定的串連標識符或no listener
之後在伺服器上用sqlplus / as sysdba登入後修改sys/system的密碼,再次嘗試就一切正常了
當Oracle資料庫使用者的密碼含特殊字元如 @ 時,直接使用正常的密碼輸入,由於oracle將@後的字元解析為網路服務名而導致登陸失敗
如下示範 使用者名稱為:wang密碼為:oracle@1網路服務名為:sun 的情況:
Linux平台:'wang/"oracle@1"'@sun --1個雙引號擴密碼,1個單引號擴 使用者名稱+密碼,即: '使用者名稱/"密碼"'@服務名
[11:41:14oracle@dvd adump]$sqlplus wang/oracle@1@sun
SQL*Plus: Release 11.2.0.1.0 Production on Tue Oct 30 11:41:24 2012
Copyright (c) 1982, 2009, Oracle. All rights reserved.
ERROR:
ORA-12532: TNS:invalid argument
[11:42:24oracle@dvd adump]$sqlplus 'wang/"oracle@1"'@sun --1個雙引號擴密碼,1個單引號擴 使用者名稱+密碼,即: '使用者名稱/"密碼"'@服務名
SQL*Plus: Release 11.2.0.1.0 Production on Tue Oct 30 11:42:25 2012
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the OLAP and Data Mining options
wang@SUN>
Windows 平台:wang/"""oracle@1"""@sun--3個雙引號擴密碼,即: 使用者名稱/"""密碼"""@服務名
C:\Users\wanglei.ITADMIN>sqlplus wang/oracle@1@sun
SQL*Plus: Release 11.2.0.1.0 Production on 星期二 10月 30 13:20:00 2012
Copyright (c) 1982, 2010, Oracle. All rights reserved.
ERROR:
ORA-12154: TNS: 無法解析指定的串連標識符
請輸入使用者名稱:
C:\Users\wanglei.ITADMIN>sqlplus wang/"""oracle@1"""@sun--3個雙引號擴密碼,即: 使用者名稱/"""密碼"""@服務名
SQL*Plus: Release 11.2.0.1.0 Production on 星期二 10月 30 13:20:30 2012
Copyright (c) 1982, 2010, Oracle. All rights reserved.
串連到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the OLAP and Data Mining options