方案一:OS 驗證繞過密碼(需 OS 管理員權限)
- 確認
sqlnet.ora 含 SQLNET.AUTHENTICATION_SERVICES=(NTS)(Windows)或 (NONE)(Linux/Unix 使用 OS 群組)。
- 以 OS DBA 群組使用者(如
oracle、Windows ORA_DBA 群組成員)登入:
sqlplus / AS SYSDBA
-- 或
sqlplus /nolog
SQL> CONNECT / AS SYSDBA
- 成功進入後重設密碼:
ALTER USER system IDENTIFIED BY new_pwd;
ALTER USER sys IDENTIFIED BY new_pwd;
方案二:重建密碼檔(適用 EXCLUSIVE 模式)
- 記錄現有特權使用者:
SELECT * FROM v$pwfile_users;
- 關閉資料庫:
SHUTDOWN IMMEDIATE;
- 刪除舊密碼檔:
rm $ORACLE_HOME/dbs/PWD.ora
- 重建:
orapwd file=$ORACLE_HOME/dbs/PWD.ora password=new_sys_pwd entries=20
- 啟動實例至 MOUNT:
STARTUP MOUNT
- 以新 SYS 密碼連線並授權特權使用者:
CONNECT sys/new_sys_pwd AS SYSDBA
ALTER DATABASE OPEN;
GRANT SYSDBA TO admin_user; -- 依步驟1記錄逐一授權
- 設定參數並重啟:
ALTER SYSTEM SET remote_login_passwordfile=EXCLUSIVE SCOPE=SPFILE;
SHUTDOWN IMMEDIATE; STARTUP;
適用場景比較
| 方案 | 適用條件 | 停機時間 | 風險 |
| OS 驗證 | OS 帳號在 DBA 群組、sqlnet.ora 正確 | 無 | 低 |
| 重建密碼檔 | OS 驗證失敗、參數為 EXCLUSIVE | 需停機 | 中(需完整重新授權) |
預防建議
- 使用密碼管理工具儲存 SYS/System 密碼。
- 建立備用特權使用者(如
dbadmin)並授 SYSDBA,避免單點失效。
- 定期演練密碼恢復流程。