我正在编写一个脚本来更改Oracle数据库上的密码。我可以成功获取数据库名称,user_id,旧密码和新密码。我有此命令来更改旧密码并将其设置为新密码:
sqlplus -s /nolog << EOF
connect ${USER_ID}/"${OLD_PASS}"@${DB_NAME}
alter user ${USER_ID} identified by ${NEW_PASS} replace ${OLD_PASS};
/
exit
EOF
当我将结果存储到变量中并打印出变量时,出现错误提示:
ORA-00922:选项丢失或无效。
我认为这与alter user命令有关。如何修复此命令,以便通过脚本成功更改密码?
答案 0 :(得分:1)
由于您将旧密码用双引号括在connect
字符串中,因此旧密码(也可能还有新密码)似乎具有特殊字符。您遇到的错误与密码中带有感叹号的密码一致;但也可以以数字开头,包含多字节字符等。
您必须将以下密码用双引号引起来:
- 包含多字节字符的密码。
以数字或特殊字符开头并包含字母字符的密码。例如:
"123abc" "#abc" "123dc$"
包含除字母字符,数字和特殊字符之外的任何字符的密码。例如:
"abc>" "abc@", " "
因此,也将它们包含在alter user
中:
alter user ${USER_ID} identified by "${NEW_PASS}" replace "${OLD_PASS}";