Seperti yang dinyatakan oleh jawaban lainnya, mengubah profil pengguna (misalnya profil 'DEFAULT') dengan tepat akan menghasilkan kata sandi, yang setelah ditetapkan, tidak akan pernah kedaluwarsa.
Namun, seperti yang ditunjukkan oleh satu komentator, kata sandi yang ditetapkan di bawah nilai-nilai lama profil mungkin sudah kedaluwarsa, dan (jika setelah masa tenggang yang ditentukan profil) akun terkunci.
Solusi untuk kata sandi yang kedaluwarsa dengan akun yang dikunci (seperti yang disediakan dalam komentar penjawab) adalah dengan menggunakan satu versi perintah ALTER USER:
ALTER USER xyz_user ACCOUNT UNLOCK;
Namun perintah buka kunci hanya berfungsi untuk akun yang akunnya benar-benar dikunci, tetapi tidak untuk akun yang berada dalam masa tenggang, yaitu saat kata sandi habis masa berlakunya tetapi akun tersebut belum dikunci. Untuk akun ini kata sandi harus disetel ulang dengan versi lain dari perintah ALTER USER:
ALTER USER xyz_user IDENTIFIED BY new_password;
Di bawah ini adalah skrip SQL * Plus kecil yang dapat digunakan pengguna istimewa (misalnya pengguna 'SYS') untuk mengatur ulang kata sandi pengguna ke nilai hash yang ada saat ini yang disimpan dalam database.
EDIT: Oracle versi lama menyimpan kata sandi atau hash kata sandi di kolom pword, versi Oracle yang lebih baru menyimpan hash kata sandi di kolom spare4. Script di bawah ini diubah untuk mengumpulkan kolom pword dan spare4, tetapi menggunakan kolom spare4 untuk mereset akun pengguna; modifikasi sesuai kebutuhan.
REM Tell SQL*Plus to show before and after versions of variable substitutions.
SET VERIFY ON
SHOW VERIFY
REM Tell SQL*Plus to use the ampersand '&' to indicate variables in substitution/expansion.
SET DEFINE '&'
SHOW DEFINE
REM Specify in a SQL*Plus variable the account to 'reset'.
REM Note that user names are case sensitive in recent versions of Oracle.
REM DEFINE USER_NAME = 'xyz_user'
REM Show the status of the account before reset.
SELECT
ACCOUNT_STATUS,
TO_CHAR(LOCK_DATE, 'YYYY-MM-DD HH24:MI:SS') AS LOCK_DATE,
TO_CHAR(EXPIRY_DATE, 'YYYY-MM-DD HH24:MI:SS') AS EXPIRY_DATE
FROM
DBA_USERS
WHERE
USERNAME = '&USER_NAME';
REM Create SQL*Plus variable to hold the existing values of the password and spare4 columns.
DEFINE OLD_SPARE4 = ""
DEFINE OLD_PASSWORD = ""
REM Tell SQL*Plus where to store the values to be selected with SQL.
REM Note that the password hash value is stored in spare4 column in recent versions of Oracle,
REM and in the password column in older versions of Oracle.
COLUMN SPARE4HASH NEW_VALUE OLD_SPARE4
COLUMN PWORDHASH NEW_VALUE OLD_PASSWORD
REM Select the old spare4 and password columns as delimited strings
SELECT
'''' || SPARE4 || '''' AS SPARE4HASH,
'''' || PASSWORD || '''' AS PWORDHASH
FROM
SYS.USER$
WHERE
NAME = '&USER_NAME';
REM Show the contents of the SQL*Plus variables
DEFINE OLD_SPARE4
DEFINE OLD_PASSWORD
REM Reset the password - Older versions of Oracle (e.g. Oracle 10g and older)
REM ALTER USER &USER_NAME IDENTIFIED BY VALUES &OLD_PASSWORD;
REM Reset the password - Newer versions of Oracle (e.g. Oracle 11g and newer)
ALTER USER &USER_NAME IDENTIFIED BY VALUES &OLD_SPARE4;
REM Show the status of the account after reset
SELECT
ACCOUNT_STATUS,
TO_CHAR(LOCK_DATE, 'YYYY-MM-DD HH24:MI:SS') AS LOCK_DATE,
TO_CHAR(EXPIRY_DATE, 'YYYY-MM-DD HH24:MI:SS') AS EXPIRY_DATE
FROM
DBA_USERS
WHERE
USERNAME = '&USER_NAME';