操作Oracle数据库可以使用sqlplus连接数据库之后,再交互式的使用数据库。另一种非交互的方式就是通过shell直接执行sql命令,可以直接在shell CLI端口执行命令,或者是通过shell脚本的方式。从sql命令的输入方式上,这种非交互的方式又可以分为两种,一种是命令行直接输入,另一种是sql文件输入。
1. 命令行直接输入方式
这种方式就是把要执行的命令直接传给sqlplus,-S是指silent模式。注意此处的反斜杠转义。
-
sqlplus -S '/ as sysdba' << EOF
-
set pagesize 0 feedback off verify off heading off echo off
-
SELECT value FROM v\$parameter WHERE name = 'background_dump_dest';
-
exit
-
EOF
使用脚本的话,如下所示,注意反斜杠。
-
if test $# -lt 1
-
then
-
echo You must pass a SID
-
exit
-
fi
-
-
ORACLE_SID=$1; export ORACLE_SID
-
DUMP_DIR=`sqlplus -S '/ as sysdba' << EOF
-
set pagesize 0 feedback off verify off heading off echo off
-
SELECT value FROM v\\$parameter WHERE name = 'background_dump_dest';
-
exit
-
EOF`
-
-
echo ${DUMP_DIR}
2. 通过文件输入方式
这种方式是先把sql语句存储在一个文件中,这时就不需要反斜杠了,而且输入文件必须要以.sql为后缀。
-
[oracle@node ~]$ cat /tmp/sqllines.sql
-
set pagesize 0 feedback off verify off heading off echo off
-
SELECT value FROM v$parameter WHERE name = 'background_dump_dest';
-
exit
-
-
[oracle@node ~]$ sqlplus -s "/ as sysdba" @/tmp/sqllines
-
/u01/app/oracle/diag/rdbms/live/live/trace
这种方式同样可以写成一个shell脚本。
-
[oracle@node ~]$ cat /tmp/sql
-
if test $# -lt 1
-
then
-
echo You must pass a SID
-
exit
-
fi
-
-
ORACLE_SID=$1; export ORACLE_SID
-
echo "
-
set pagesize 0 feedback off verify off heading off echo off
-
SELECT value FROM v\$parameter WHERE name = 'background_dump_dest';
-
exit
-
">/tmp/plsql_scr.sql
-
-
# --------------------------------
-
# Execute plsql script
-
# --------------------------------
-
-
if [ -s /tmp/plsql_scr.sql ]; then
-
echo -e "Running SQL script to find out bdump directory... \n"
-
$ORACLE_HOME/bin/sqlplus -s "/ as sysdba" @/tmp/plsql_scr.sql >/tmp/plsql_scr_result.log
-
fi
-
-
echo " Check the reslut "
-
echo "------------------------"
-
cat /tmp/plsql_scr_result.log
-
-
exit
阅读(2128) | 评论(0) | 转发(1) |