我需要使用“sysdba”权限从 shell 脚本连接我的 Oracle 11g 数据库。为此,我必须将用户从“root”切换到“oracle”。我尝试了以下但没有成功。
su - oracle -c "<< EOF1
sqlplus -s "/ as sysdba" << EOF2
whenever sqlerror exit sql.sqlcode;
set echo off
set heading off
shutdown immediate
startup mount
alter database archivelog;
alter database open;
exit;
EOF2
EOF1"
我收到以下错误。
[root@vEMS-23 devel]# ./enableArchiveLogs.sh 错误:ORA-01031:权限不足
SP2-0306:无效选项。用法:CONN[ECT] [logon] [AS {SYSDBA|SYSOPER|SYSASM}] 其中 ::= [/][@] [edition=value] | /SP2-0306:无效选项。用法:CONN[ECT] [logon] [AS {SYSDBA|SYSOPER|SYSASM}] 其中 ::= [/][@] [edition=value] | / SP2-0157: 3 次尝试后无法连接到 ORACLE,退出 SQL*Plus [root@vEMS-23 devel]#
据我所知,它无法验证为“sysdba”。如果我消除 'su - oracle -c' 并最初以 oracle 用户身份运行脚本,则不会发生这种情况。
有什么线索吗?
我有一个答案:
答案很简单。我只是对语法有点混乱。以下是工作代码:
su - oracle -c 'sqlplus -s / as sysdba <<EOF
whenever sqlerror exit sql.sqlcode;
set echo off
set heading off
shutdown immediate
startup mount
alter database noarchivelog;
alter database open;
exit;
EOF
'