ORA_DBA (Windows) 或 dba 群組 (Linux/Unix)C:\> SET ORACLE_SID=your_sid
C:\> sqlplus /nolog
SQL> CONNECT / AS SYSDBA
Connected.
SQL> ALTER USER sys IDENTIFIED BY new_password;
User altered.
SQL> ALTER USER system IDENTIFIED BY new_password;
User altered.
$ export ORACLE_SID=your_sid
$ export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
$ sqlplus /nolog
SQL> CONNECT / AS SYSDBA
Connected.
SQL> ALTER USER sys IDENTIFIED BY new_password;
SQL> ALTER USER system IDENTIFIED BY new_password;
原理:CONNECT / AS SYSDBA 使用作業系統驗證,略過資料庫密碼檢查。需 OS 帳戶在 dba 群組。
# Linux
cp $ORACLE_HOME/dbs/orapw$ORACLE_SID $ORACLE_HOME/dbs/orapw$ORACLE_SID.bak
# Windows
copy %ORACLE_HOME%\database\PWD%ORACLE_SID%.ora %ORACLE_HOME%\database\PWD%ORACLE_SID%.ora.bak
# 12c+ 格式 (支援大小寫、長密碼)
orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=new_password entries=10 format=12.2
# 11g 格式
orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=new_password entries=10
entries:最大 SYSDBA/OPER 使用者數format=12.2:12c 強雜湊演算法 (SHA-2/512),強制大小寫敏感force=y:覆蓋既有檔案SQL> SHUTDOWN IMMEDIATE
SQL> STARTUP
# $ORACLE_HOME/network/admin/sqlnet.ora
SQLNET.AUTHENTICATION_SERVICES = (NTS) # Windows
# 或
SQLNET.AUTHENTICATION_SERVICES = (ALL) # Linux/Unix
修改後重新嘗試方法一。
| 錯誤 | 原因 | 解決 |
|---|---|---|
| ORA-01031: insufficient privileges | OS 帳戶不在 dba/ORA_DBA 群組 | 將帳戶加入群組、重新登入 OS |
| ORA-01017: invalid username/password | 密碼檔損壞或版本不符 | 重建密碼檔 (方法二) |
| ORA-12560: TNS protocol adapter error | ORACLE_SID 未設定或錯誤 | 正確設定 ORACLE_SID |
| Windows: "sqlplus 不是內部命令" | PATH 未包含 %ORACLE_HOME%\bin | 設定 PATH 或用完整路徑 |
-- 連線 CDB$ROOT
SQL> CONNECT / AS SYSDBA
SQL> ALTER USER sys IDENTIFIED BY new_pwd CONTAINER=ALL; -- 所有容器
SQL> ALTER USER system IDENTIFIED BY new_pwd CONTAINER=ALL;
-- 或針對特定 PDB
SQL> ALTER SESSION SET CONTAINER=pdb1;
SQL> ALTER USER sys IDENTIFIED BY new_pwd;
PASSWORD_VERIFY_FUNCTION、設定 PASSWORD_LIFE_TIMEAUDIT_SYS_OPERATIONS=TRUE、統一審計orapw 至異地SQL> ALTER USER sys ACCOUNT UNLOCK;
SQL> ALTER USER system ACCOUNT UNLOCK;