我需要使用“sysdba”权限从 shell 脚本连接我的 Oracle 11g DB。为此,我必须将用户从“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] [登录] [AS {SYSDBA|SYSOPER|SYSASM}] 其中 ::= [/][@] [版本=值] | / SP2-0306:选项无效。用法:CONN[ECT] [登录] [AS {SYSDBA|SYSOPER|SYSASM}] 其中 ::= [/][@] [版本=值] | / SP2-0157:3 次尝试后无法连接到 ORACLE,正在退出 SQL*Plus [root@vEMS-23 开发]#
据我所知,它无法通过“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
'
CONNECT 陈/测试 选择 * 来自学生; 退出;
另存为/shell_with_oracledb_test/r_connection2.sql
将 shell 文件编写为 回显“sqlplus /nolog @/shell_with_oracledb_test/r_connection2.sql”| su - 甲骨文
命名此文件 -> filename.sh
执行filename.sh文件
这是示例代码。