【问题标题】:Connecting to Oracle DB from shell script with 'sysdba'使用“sysdba”从 shell 脚本连接到 Oracle DB
【发布时间】:2012-05-03 21:16:41
【问题描述】:

我需要通过具有“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] [登录] [AS {SYSDBA|SYSOPER|SYSASM}] 其​​中 ::= [/][@] [版本=值] | / SP2-0306:无效选项。用法:CONN[ECT] [登录] [AS {SYSDBA|SYSOPER|SYSASM}] 其​​中 ::= [/][@] [版本=值] | / 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
'

【问题讨论】:

  • 你得到什么样的错误?
  • Thilo,请参阅编辑后的帖子。谢谢。

标签: shell oracle11g


【解决方案1】:

CONNECT chan/测试 选择 * 来自学生; 退出;

另存为/shell_with_oracledb_test/r_connection2.sql

写shell文件为 echo "sqlplus /nolog @/shell_with_oracledb_test/r_connection2.sql" | su - oracle

命名这个文件 -> 文件名.sh

执行文件名.sh 文件

这是示例代码。

【讨论】:

    猜你喜欢
    • 2020-08-15
    • 2011-09-25
    • 1970-01-01
    • 2015-01-09
    • 1970-01-01
    • 1970-01-01
    • 2019-12-26
    • 2020-12-04
    • 2017-01-16
    相关资源
    最近更新 更多