Oracle SID大小寫混用引起的sys賬號不能登入
Oracle安裝,特別是Linux/Unix環境下安裝對於每一個初學者而言,都是一個挑戰。操作步驟多、各種配置專案複雜和細節點多,只要有一個步驟出現錯誤,就可能給後續安裝或者執行帶來問題。有時候一些問題還是比較有迷惑性,解決起來需要一些經驗和知識。
本篇主要介紹一個由於SID安裝過程中大小寫不一致引起的問題,以及解決策略。
1、環境介紹
筆者接到同事反饋,說一個已經安裝好的資料庫,遠端使用sys使用者登入失敗,報錯使用者名稱密碼錯誤。但是使用其他使用者登入就沒有問題。
由於是一個新安裝的資料庫,先去檢查一下各種環境變數和資料情況。當前後臺程式的確是正常執行,環境變數上也算正常。
[oracle@TEST-NE-TESTDB ~]$ ps -ef | grep pmon
oracle 13259 1 0 Jul13 ? 00:00:07 ora_pmon_TESTDB
oracle 16439 16414 0 08:31 pts/1 00:00:00 grep pmon
[oracle@TEST-NE-TESTDB ~]$ env | grep ORA
ORACLE_SID=TESTDB
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
在筆者之前的文章裡,對於連線故障推薦過一個流程,是按照“從近到遠”的順序逐步遞進。簡單的說:先看伺服器內部連線、之後從監聽器、網路到特定連線客戶端。
在伺服器上,匿名sys登入是沒有問題的,普通使用者(以scott為例)也沒有問題。
SQL> conn / as sysdba
Connected.
SQL> conn scott/tiger
Connected.
SQL> select open_mode from v$database;
OPEN_MODE
--------------------
READ WRITE
SQL> show parameter service
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
service_names string testdb
監聽器狀態也是正常的。
[oracle@TEST-NE-TESTDB ~]$ lsnrctl status
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 14-JUL-2017 08:35:54
Copyright (c) 1991, 2013, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS of the LISTENER
------------------------
(篇幅原因,有省略……)
Services Summary...
Service "TESTDB" has 1 instance(s).
Instance "TESTDB", status READY, has 1 handler(s) for this service...
Service "testdbXDB" has 1 instance(s).
Instance "TESTDB", status READY, has 1 handler(s) for this service...
The command completed successfully
[oracle@TEST-NE-TESTDB ~]$
但是,遠端使用pl/sql developer或者sqlplus連線的時候,sys賬號是不成功的,scott賬號成功。
2、問題分析
這個問題的故障點應該不在客戶端到伺服器的網路層面,因為畢竟有使用者可能實現登入。而且一個懷疑點就是報錯資訊:sys連線時候報錯資訊不是連線不上,而是使用者名稱密碼錯誤。
那麼推回到伺服器端,如果在伺服器端使用監聽器進行連線,那麼效果如何?
[oracle@TEST-NE-TESTDB admin]$ sqlplus /nolog
SQL*Plus: Release 11.2.0.4.0 Production on Fri Jul 14 08:45:06 2017
Copyright (c) 1982, 2013, Oracle. All rights reserved.
SQL> conn sys/oracle@testdb as sysdba
ERROR:
ORA-01017: invalid username/password; logon denied
SQL> conn scott/tiger@testdb
Connected.
SQL>
錯誤提示是相同,說明在經過監聽器的情況下,引起了驗證錯誤。那麼,是否經過監聽器,對Oracle而言有什麼差別呢?經過監聽器,無論是否是伺服器本地客戶端,Oracle都會視為“遠端連線”,進行遠端連線處理。
那麼,sys和scott使用者的差別在什麼地方?就是密碼檔案Password File。普通使用者驗證資訊是在資料庫內部,而具有sysdba許可權的是在一個單獨的密碼檔案中。所以猜想是密碼檔案出了問題。
但是,在$ORACLE_HOME/dbs目錄下,存在疑似的引數檔案和密碼檔案。
[oracle@TEST-NE-TESTDB admin]$ cd $ORACLE_HOME/dbs
[oracle@TEST-NE-TESTDB dbs]$ ls -l
total 32
-rw-rw----. 1 oracle oinstall 1544 Jul 13 20:25 hc_testdb.dat
-rw-rw----. 1 oracle oinstall 1544 Jul 13 20:27 hc_TESTDB.dat
-rw-rw----. 1 oracle oinstall 1544 Jul 13 18:28 hc_TESTNETESTDB.dat
-rw-r--r--. 1 oracle oinstall 2851 May 15 2009 init.ora
-rw-r-----. 1 oracle oinstall 2112 Jul 13 20:15 initTESTDB.ora
-rw-r-----. 1 oracle oinstall 24 Jul 13 20:27 lkTESTDB
-rw-r-----. 1 oracle oinstall 1536 Jul 13 18:32 orapwtestdb
-rw-r-----. 1 oracle oinstall 3584 Jul 13 19:16 spfiletestdb.ora
但是,看起來很怪,特別是引數檔案。當前引數檔案發現,根本就沒有使用SPfile,而是直接使用Pfile啟動的。
SQL> conn / as sysdba
Connected.
SQL> show parameter spfile
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string
到此,筆者能猜出原因在於大小寫。在同事安裝資料庫過程中,環境變數和安裝檔案上輸入的sid資訊大小寫不一致。環境變數中輸入的是大寫TESTDB,而Oracle例項生成的是小寫testdb對應例項檔案。
3、解決問題
瞭解了問題原因,解決起來就有方向了。這個問題要從引數檔案和密碼檔案兩個層面進行解決。首先要重建引數檔案。
SQL> create spfile from pfile;
File created.
SQL> quit
對應目錄上,新生成了大寫的spfileTESTDB.ora檔案。
[oracle@TEST-NE-TESTDB dbs]$ ls -l
total 36
-rw-rw----. 1 oracle oinstall 1544 Jul 13 20:25 hc_testdb.dat
(篇幅原因,有省略……)
-rw-r-----. 1 oracle oinstall 1536 Jul 13 18:32 orapwtestdb
-rw-r-----. 1 oracle oinstall 3584 Jul 13 19:16 spfiletestdb.ora
-rw-r-----. 1 oracle oinstall 2560 Jul 14 08:48 spfileTESTDB.ora
密碼檔案重構。
[oracle@TEST-NE-TESTDB dbs]$ orapwd file=orapwTESTDB password=oracle entries=5 force=Y
[oracle@TEST-NE-TESTDB dbs]$ ls -l | grep orapw
-rw-r-----. 1 oracle oinstall 1536 Jul 13 18:32 orapwtestdb
-rw-r-----. 1 oracle oinstall 2048 Jul 14 08:56 orapwTESTDB
重新啟動資料庫。
SQL> conn / as sysdba
Connected.
SQL> startup force
ORACLE instance started.
Total System Global Area 4993982464 bytes
Fixed Size 2261808 bytes
Variable Size 1073745104 bytes
Database Buffers 3909091328 bytes
Redo Buffers 8884224 bytes
Database mounted.
Database opened.
重新測試故障消失。
SQL> select * from v$pwfile_users;
USERNAME SYSDB SYSOP SYSAS
------------------------------ ----- ----- -----
SYS TRUE TRUE FALSE
SQL> conn sys/oracle@testdb as sysdba
Connected.
SQL> show user;
USER is "SYS"
4、結論
注意:本案例其實還有另外的一種處理思路,就是順著例項小寫的特點,修改環境變數ORACLE_SID,這樣重新啟動資料庫的時候,原有的那些環境檔案就能發揮作用。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17203031/viewspace-2142065/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle靜態監聽中SID_NAME區分大小寫嗎?Oracle
- 多賬號登入控制
- FTP登入時一直彈出登入視窗,就算輸入正確的賬號密碼也不能登入FTP密碼
- Postman無法登入賬號Postman
- 賬號密碼登入介面密碼
- Auth Session 退出他人正登入的賬號、passport 退出登入SessionPassport
- elasticsearch加賬號密碼登入Elasticsearch密碼
- win10 guest賬戶不能登入怎麼設定_win10 guest賬戶不能登入如何修復Win10
- [20190306]靜態監聽配置sid大小寫問題.txt
- Git配置多個賬號免密登入Git
- 如何登入 oss 的賬號密碼是什麼密碼
- win11跳過微軟賬號登入方法微軟
- Linux配置SSH免密碼登入(非root賬號)Linux密碼
- oracle 報大小寫錯誤Oracle
- 使用 GitLab 賬號登陸 KubeSphereGitlab
- IntelliJ IDEA 2022.1.4最新中文版「無需登入賬號」IntelliJIdea
- springSecurity 登入以及使用者賬號密碼解析原理SpringGse密碼
- linux下使用vsftp搭建FTP伺服器:匿名登入,賬號登入,SSL加密傳輸LinuxFTP伺服器加密
- Go-Rod自用案例 #1 測試多組賬號登入Go
- Oracle登入命令Oracle
- Oracle 賬號 EXPIRED(GRACE) 意義-拾億Oracle
- win10微軟賬號登入不了怎麼辦_win10登入微軟賬戶出錯的解決方法Win10微軟
- 小視訊app原始碼,實現簡單的登入介面,輸入賬號密碼APP原始碼密碼
- 過去最令我惱火的事情之一就是資料庫裡有大小寫混用的物件名資料庫物件
- SQL Server 禁用Windows身份登入時忘記其他賬號如sa登入密碼後重置密碼SQLServerWindows密碼
- Win10系統怎麼隱藏登入介面小號賬戶Win10
- win10 刪除登入介面的賬號要怎麼刪除Win10
- 第三方賬號登入功能接入全流程分析(轉)
- win10怎麼退出登入賬戶_win10電腦退出賬戶登入的方法Win10
- 反覆切換"賬號"有些麻煩? 寫個谷歌外掛幫你快速切換使用者登入態谷歌
- steam登入無法連線到網路怎麼辦 steam賬號登入失敗怎麼解決
- Android studio 連線sqlist資料庫,賬號密碼錯誤仍能登入的原因AndroidSQL資料庫密碼
- win10如何取消賬戶登入_win10怎麼刪除登入賬戶Win10
- win10怎麼登出賬戶登入_怎麼登出windows10賬戶登入Win10Windows
- Dcat-admin實現一個賬號只能同時登入一次
- 由分號引起的問題
- 129 會員同一賬號,限制只在同一臺電腦裝置上單點登入,新登入後原登入會自動退出
- 帝國CMS網站登入次數超過5次賬號被鎖定網站
- win10微軟賬號登入一直轉圈怎麼解決Win10微軟