我需要在我们的oracle数据库中执行一个简单的选择计数查询。但这需要几个小时才能完成。我想使用Shell脚本来执行此操作,因此我不需要时常监视查询是否仍在运行,并且因为我只需要计数就想在我的电子邮件中发送输出
我正在远程服务器上进行操作,并且没有管理员权限可以在断开连接之前禁用时间限制。
预先感谢您的帮助。
这是我编写的初始代码。
#!/bin/ksh
######################################################################
# File Name : counts.sh
# Created : 2019/27/19
# Author :
#-----------------------------------------------------------------------
# $Revision: 1.0 $
# $Date: 2019/01/27 08:00:00 $
#-----------------------------------------------------------------------
# Modification History:
# No Date Author Note
#
#-----------------------------------------------------------------------
#
#
########################################################################
DB_USERNAME=$1
DB_PASSWORD=$2
DB_DBASE=$3
#------------------------------------------------------------
# Start Log
#------------------------------------------------------------
DB_CONN=${DB_USERNAME}/${DB_PASSWORD}@${DB_DBASE}
LOG_DATETIME=`date +%Y-%m-%d:%H:%M:%S`
LOG_FILE=/tmp/$LOG_DATETIME.log
EGREP=/bin/egrep
ORA_ERR_STR=ORA
#==Start Table Space ========================================
sqlplus -S ${DB_CONN} > $LOG_FILE << ORAEND
set serveroutput on;
set feedback off
SPOOL /tmp/counts.txt
PROMPT COUNTS
SELECT COUNT(*) FROM schema.db;
spool off;
ORAEND
mailx -s "Counts on $DB_DBASE is" user@gmail.com < /tmp/counts.txt
#===end of script=========#
我将使用nohup命令调用Shell脚本。
调用脚本:nohup ksh counts.sh用户密码DB和
答案 0 :(得分:2)
您从未说过该查询的结果。是的,它很重要,但是-输出结果如何?一个值?多行中的一列?一行中有很多列?多列甚至更多行?
由于查询本身需要花费数小时才能完成,所以您可能希望能够检查按 this 或 that 排序的结果,执行一些计算等。 -如果是这样,也许最简单的选择是
UTL_MAIL
(或UTL_SMTP
)向自己发送一封邮件,只是说处理已结束另一种选择是实际创建输出文件(使用UTL_FILE
)并通过邮件作为附件发送。
或者,如果要从操作系统级别执行此操作,则仍应创建输出文件,并使用一些 tool 来发送邮件。