2012-04-23 111 views
0

我需要使用'sysdba'权限将我的Oracle 11g数据库从shell脚本连接起来。为此,我必须将用户从“root”切换到“oracle”。 我试过以下没有成功。使用'sysdba'从shell脚本连接到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" 

我收到以下错误消息。

[[email protected] devel]# ./enableArchiveLogs.sh en ERROR: ORA-01031: insufficient privileges

SP2-0306: Invalid option. Usage: CONN[ECT] [logon] [AS {SYSDBA|SYSOPER|SYSASM}] where ::= [/][@] [edition=value] |/ SP2-0306: Invalid option. Usage: CONN[ECT] [logon] [AS {SYSDBA|SYSOPER|SYSASM}] where ::= [/][@] [edition=value] |/ SP2-0157: unable to CONNECT to ORACLE after 3 attempts, exiting SQL*Plus [[email protected] 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 
' 
+0

你会得到什么样的错误? – Thilo 2012-04-23 09:03:18

+0

Thilo,请参阅编辑后。谢谢。 – NetBear 2012-04-23 09:22:58

回答

0

CONNECT瓒/测试 SELECT * FROM 学生; EXIT;

另存为/shell_with_oracledb_test/r_connection2.sql

编写shell文件 回声 “的sqlplus/NOLOG @/shell_with_oracledb_test/r_connection2.sql” |苏 - 甲骨文

名这个文件 - > filename.sh

EXCUTE filename.sh文件

这是示例代码。