1. 程式人生 > >conn / as sysdba 出現ORA-01031: insufficient privileges 解決辦法

conn / as sysdba 出現ORA-01031: insufficient privileges 解決辦法

sysdba不能遠端登入這個也是一個很常見的問題了。 

碰到這樣的問題我們該如何解決呢?


我們用sysdba登入的時候,用來管理我們的資料庫例項,特別是有時候,伺服器不再本臺機器,這個就更是有必要了。 

當我們用sqlplus "/ as sysdba" 
是可以登入的。 

但是我們如果用sqlplus "sys/[email protected] as sysbda"這樣的方式去不能登入. 

這裡我們的錯誤一般分為兩類 
第一類: 提示ORA-01031: insufficient privileges(許可權不足)  
引用:

sqlplus "sys/password as sysdba" 
ERROR:
ORA-01031: insufficient privileges

或者

sqlplus /nolog

conn / as sysdba 
ERROR:
ORA-01031: insufficient privileges



如果是這樣的錯誤,你明明是用這個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 file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=gelc123 entries=5 force=y 再次檢視 v$pwfile_users 這時候有一條記錄了 

現在再試試,我們的問題基本上就解決了 

還有一種情況,提示的是ORA-01017:使用者名稱密碼出錯
 
ERROR:
ORA-01017: invalid username/password; logon denied
這樣的錯誤,可是你的密碼和使用者名稱明明輸入的都是正確的。這又是為什麼叻 
檢查一下系統引數remote_login_passwordfile的值, 
這裡需要啟動密碼檔案的話,需要前提就是這個值, 這裡的值可以NONE,EXCLUSIVE和SHARE 
EXCLUSIVE和SHARE都可以,EXCLUSIVE是獨佔的檔案,SHARE是多例項的體系中的共享模式 
這個問題基本上就是這個值導致的 
SQL>alter system set remote_login_passwordfile=EXCLUSIVE scope=spfile; 

現在重啟服務試試看。 

已經OK解決了吧