首页 > 解决方案 > sqlplus 命令在 kornshell scipt 中更改 oracle 数据库密码

问题描述

我正在编写一个脚本来更改 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 命令有关。如何修复此命令,以便通过我的脚本成功更改密码?

标签: oracleshellsqlplus

解决方案


由于您将旧密码用双引号括在connect字符串中,因此旧密码和新密码似乎都有特殊字符。您收到的错误与带有感叹号的密码一致;但也可以以数字开头,具有多字节字符等。

从文档中

您必须将以下密码用双引号括起来:

  • 包含多字节字符的密码。
  • 以数字或特殊字符开头并包含字母字符的密码。例如:

    "123abc"
    "#abc"
    "123dc$"  
    
  • 包含除字母字符、数字和特殊字符之外的任何字符的密码。例如:

    "abc>"
    "abc@",
    " "
    

因此,也将它们包含在alter user

alter user ${USER_ID} identified by "${NEW_PASS}" replace "${OLD_PASS}";

推荐阅读