sysdba不能遠程登錄,我們該怎麼做 (轉載),sysdba遠程登錄
sysdba不能遠程登錄這個也是一個很常見的問題了。
碰到這樣的問題我們該如何解決呢?
我們用sysdba登錄的時候,用來管理我們的數據庫實例,特別是有時候,服務器不再本台機器,這個就更是有必要了。
當我們用sqlplus "/ as sysdba"
是可以登錄的。
但是我們如果用sqlplus "sys/password@tnsname as sysbda"這樣的方式去不能登錄.
這裡我們的錯誤一般分為兩類
第一類: 提示ORA-01031: insufficient privileges(權限不足)
引用:
sqlplus "sys/[email protected] as sysdba"
ERROR:
ORA-01031: 權限不足
如果是這樣的錯誤,你明明是用這個sys登錄的,而且確實是sysdba的權限,為什麼登錄卻提示你的權限不夠叻。
這裡的問題出現在密碼文件裡,由於你的密碼文件缺損或者不存在,而Oracle實例對sysdba的權限是根據這個
密碼文件來判斷的,如果你的用戶被grant to sysdba了,那麼這個用戶的密碼和用戶名也在這個密碼文件了。
這樣也就發現你不是sysdba的角色,當然as sysdba就會提示權限不足了喲。
為什麼這樣做了,如果我們的數據庫沒有open,那麼對於的一些動態視圖是不能打開的,所以oracle必須把這些
用戶的口令和username放在一個獨立的文件裡,這樣在數據庫還不是open的狀況寫,有個地方判斷了。
如何解決了。我們首先來判斷一下
執行sql
SQL> select * from v$pwfile_users;
USERNAME SYSDB SYSOP
------------------------------ ----- -----
SYS TRUE TRUE
如果這裡選擇不出了記錄的話,就是密碼文件沒有叻。
這裡解決的方法就是重建orapwd文件
使用密碼文件orapwd 命令 orapwd -c file=”$ORACLE_HOME/dbs/orapwd$ORACLE_SID” entity=5 password=changeoninstall
再次查看 v$pwfile_users 這時候有一條記錄了
現在再試試,我們的問題基本上就解決了
還有一種情況,提示的是ORA-01017:用戶名密碼出錯 這樣的錯誤,可是你的密碼和用戶名明明輸入的都是正確的。這又是為什麼叻
檢查一下系統參數remote_login_passwordfile的值,
這裡需要啟動密碼文件的話,需要前提就是這個值, 這裡的值可以NONE,EXCLUSIVE和SHARE
EXCLUSIVE和SHARE都可以,EXCLUSIVE是獨占的文件,SHARE是多實例的體系中的共享模式
這個問題基本上就是這個值導致的
SQL>alter system set remote_login_passwordfile=EXCLUSIVE scope=spfile;
現在重啟服務試試看。
已經OK解決了吧
這裡以前有分別談過這兩個問題
可以看看這兩個問題的分別討論
ORA-01017:用戶名密碼出錯 故障實例
解決10g上 非本機SQLPLUS conn as sysdba出現ORA-01031: insufficient privileges問題