ORA-01031: insufficient privileges 解決辦法


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

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


我們用sysdba登錄的時候,用來管理我們的數據庫實例,特別是有時候,服務器不再本台機器,這個就更是有必要了。 

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

但是我們如果用sqlplus "sys/password@tnsname 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解決了吧 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM