Sqlplus命令更改Kornshell Scipt中的Oracle数据库密码

时间:2018-07-03 16:33:13

标签: oracle shell sqlplus

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

1 个答案:

答案 0 :(得分:1)

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

From the documentaton

  

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

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

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

    "abc>"
    "abc@",
    " "
    
  •   

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

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