場景:以SYSDBA身份本地登錄重置(最通用)
# 1. 切換到軟件擁有者
su - oracle
# 2. 無需密碼進入SQL*Plus
sqlplus /nolog
SQL> CONN / AS SYSDBA
Connected.
-- 3. 重置SYS與SYSTEM
SQL> ALTER USER sys IDENTIFIED BY NewPass#123;
SQL> ALTER USER system IDENTIFIED BY NewPass#123;
-- 4. 驗證
SQL> CONN system/NewPass#123
Connected.
方案二:遠程EZConnect+SYSDBA(適用Data Guard/客戶機)
sqlplus "sys/NewPass#123@//dbhost:1521/ORCL AS SYSDBA"
-- 或
sqlplus "/@ORCL AS SYSDBA" -- 需客戶端sqlnet.ora配置NTS且OS用戶在dba組
方案三:Windows環境變量法(CMD原生)
C:\> SET ORACLE_SID=ORCL
C:\> sqlplus /nolog
SQL> CONN / AS SYSDBA
SQL> ALTER USER sys IDENTIFIED BY NewPass#123;
SQL> ALTER USER system IDENTIFIED BY NewPass#123;
方案四:SQL*Plus無日誌模式+內部連接(舊版兼容)
SQLPLUS /NOLOG
SQL> CONN / AS SYSDBA
SQL> ALTER USER sys IDENTIFIED BY NewPass#123;
SQL> ALTER USER system IDENTIFIED BY NewPass#123;
方案五:orapwd重建密碼文件(僅修改SYS/INTERNAL,不影響其他用戶)
# 1. 關閉數據庫
SHUTDOWN IMMEDIATE
# 2. 備份舊文件
cp $ORACLE_HOME/dbs/orapwORCL $ORACLE_HOME/dbs/orapwORCL.bak
# 3. 重建
orapwd file=$ORACLE_HOME/dbs/orapwORCL password=NewPass#123 entries=10 force=y
# 4. 啟動
STARTUP
方案六:Linux單用戶模式下完整重置腳本
#!/bin/bash
# 需以oracle用戶執行
export ORACLE_SID=ORCL
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
sqlplus /nolog <
關鍵避坑指南
| 誤區 | 正確姿勢 |
| 新密碼以數字開頭 | 必須以字母開頭,否則報ORA-00988 |
| 以為10g+ SYSTEM默認MANAGER | 安裝向導強制自定義,無默認值 |
| orapwd未加force=y覆蓋失敗 | 11g+必須加force=y覆蓋現有文件 |
| 修改SYS密碼後OEM/監控報警 | 同步更新OEM目標監控配置、Data Guard連接串、備份腳本密碼倉儲 |
核心原理:所有方案本質均為「以OS認證或現有SYSDBA會話為信任錨點,執行ALTER USER SYS/SYSTEM IDENTIFIED BY」。選擇哪種僅取決於當前環境能否獲取CONN / AS SYSDBA會話。