Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从以root用户身份运行的shell脚本以oracle用户身份运行oracle脚本_Sql_Linux_Shell_Unix - Fatal编程技术网

Sql 从以root用户身份运行的shell脚本以oracle用户身份运行oracle脚本

Sql 从以root用户身份运行的shell脚本以oracle用户身份运行oracle脚本,sql,linux,shell,unix,Sql,Linux,Shell,Unix,我有一个作为root运行的shell脚本。我希望脚本切换到oracle用户,运行sqlplus并运行一些.sql文件。 我正努力做到: su - oracle << -EOF1 2>&1 sqlplus $user/$password << -EOF2 @oracle.sql; @quartz.sql; EOF2 EOF1 su-甲骨文&1 sqlplus$u

我有一个作为root运行的shell脚本。我希望脚本切换到oracle用户,运行sqlplus并运行一些
.sql
文件。 我正努力做到:

su - oracle << -EOF1  2>&1
        sqlplus $user/$password << -EOF2
                @oracle.sql;
                @quartz.sql;
        EOF2
EOF1
su-甲骨文&1
sqlplus$user/$password使用:

if[“$(id-un)”-eq“root”];然后
执行官su-甲骨文-c$0
fi
sqlplussu-oracle-c“echo”从dual中选择1;
从dual;“| sqlpus/as sysdba”中选择2

如果包含“使用以下内容” su-oracle-c“echo\”从双通道中选择1;
从双重选择中选择2\“|sqlpus/as sysdba”

我同意以root身份运行脚本是一种非常糟糕的做法,但我别无选择,因为运行脚本的基础结构是以root身份运行的。改变它不是我的事那么你的解决方案到底做了什么?我明白了。很好的技巧,不幸的是,脚本中有一些部分需要作为root用户运行(这不是整个脚本,还有其他部分)。因此,我必须使用EOF块结构。我的脚本也可以有参数,使Oracle特定的部分在另一个脚本中运行,您可以像上面那样调用它?另外,请注意,herdoc标记必须位于行的开头
if [ "$(id -un)" -eq "root" ]; then
    exec su - oracle -c $0
fi

sqlplus <<EOF
blablabla
EOF