環境:在數據服務器A(Red Hat Enterprise Linux Server release 5.5 (Tikanga))上裝有數據庫ORACLE 10g,但是我們現在從機器B上用DBA賬號遠程連接數據庫時,登錄不了。如下所示:
問題一:SYSDBA不能遠程登錄(此處是不是指CRT遠程登錄)
SYSDBA不能遠程登錄分兩種情況:
1:提示的是ORA-01017:用戶名密碼出錯
C:\Users\kerry>sqlplus "sys/wgods123@gsp as sysdba"
SQL*Plus: Release 11.2.0.1.0 Production on 星期五 1月 11 11:08:07 2013
Copyright (c) 1982, 2010, Oracle. All rights reserved.
ERROR:
ORA-01017: invalid username/password; logon denied
這樣的錯誤,明明密碼和用戶名明明輸入的都是正確的。這又是為什么叻,出現這種情況,一般是系統參數REMOTE_LOGIN_PASSWORD的設置問題:PFILE文件中有個參數REMOTE_LOGIN_PASSWORD 對passwordfile進行控制:
remote_login_passwordfile =NONE時,停用口令文件驗證,Oracle數據庫不允許遠程SYSDBA/SYSOPER身份登錄,無法通過遠程進行數據庫起停等操作管理;
remote_login_passwordfile =exclusive時,啟用口令文件,允許遠程登錄;
remote_login_passwordfile =shared 時,多個數據庫可以共享一個口令文件,但是只可以識別一個用戶:SYS;
當口令文件丟失時,用/NOLOG方式登錄,通過orapwd重建口令文件來解決。如果口令文件丟失,可以使用orapwd可以重建口令文件。
這里需要啟動密碼文件的話,需要前提就是這個值, 這里的值可以NONE,EXCLUSIVE和SHARE。EXCLUSIVE和SHARE都可以,EXCLUSIVE是獨占的文件,SHARE是多實例的體系中的共享模式。這個問題基本上就是這個值導致的
SQL>alter system set remote_login_passwordfile=EXCLUSIVE scope=spfile;
然后重啟服務就可遠程以sysdba登錄。
但是還有一種情況如下:
檢查一下系統參數REMOTE_LOGIN_PASSWORD的值,發現是EXCLUSIVE。而且密碼文件也存在,但是就是報上面錯誤。
SQL> SHOW PARAMETER REMOTE_LOGIN_PASSWORD
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
remote_login_passwordfile string EXCLUSIVE
最后發現:SYS賬戶的密碼是錯誤的,重置SYS密碼后
SQL> alter user sys identified by wgods123;
問題解決了。
2:ORA-01031: insufficient privileges
C:\Users\kerry>sqlplus "sys/wgods123@GSP as sysdba"
SQL*Plus: Release 11.2.0.1.0 Production on 星期五 1月 11 14:37:11 2013
Copyright (c) 1982, 2010, Oracle. All rights reserved.
ERROR:
ORA-01031: insufficient privileges
這種情況一般是由於你的密碼文件缺損或者不存在了,例如口令文件刪除了,而Oracle實例對sysdba的權限是根據這個密碼文件來判斷的,如果你的用戶被grant to sysdba了,那么這個用戶的密碼和用戶名也在這個密碼文件了。這樣也就發現你不是sysdba的角色,當然as sysdba就會提示權限不足了喲。為什么這樣做了,如果我們的數據庫沒有open,那么對於的一些動態視圖是不能打開的,所以oracle必須把這些用戶的口令和username放在一個獨立的文件里,這樣在數據庫還不是open的狀況寫,有個地方判斷了。
如何解決了。我們首先來判斷一下
SQL> SELECT * FROM V$PWFILE_USERS;
USERNAME SYSDBA SYSOPER
------------------------------ ------ -------
如果這里選擇不出了記錄的話,就是密碼文件沒有叻。
這里解決的方法就是重建orapwd文件
使用密碼文件orapwd 命令 [oracle@wgods dbs]$ orapwd file=/database/oracle/product/dbhome/dbs/orapwgsp entries=4 password=wgods123 force=y
再次查看 v$pwfile_users 這時候有一條記錄了