【问题标题】:Run SQL query in shell script then sends output to email在 shell 脚本中运行 SQL 查询,然后将输出发送到电子邮件
【发布时间】:2019-01-26 18:13:54
【问题描述】:

我需要在我们的 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 &

【问题讨论】:

  • 我只需要查询的实际计数。

标签: linux oracle shell unix scripting


【解决方案1】:

您从未说过该查询的结果。是的,它很重要,但是 - 输出看起来如何?一个值?几行中的一列?一行中有很多列?更多行中有许多列?

由于查询本身需要几个小时才能完成,所以您可能希望能够检查按 thisthat 排序的结果,执行一些计算等。 - 如果是这样,也许最简单的选择是

  • 创建一个包含该查询返回的列的表
  • 编写一个将结果插入表中的存储过程
  • 在程序结束时,使用UTL_MAIL(或UTL_SMTP)给自己发一封邮件,简单地说处理结束
  • 连接到数据库并从表中选择 * 以查看结果
  • 如果查询结果比较简单,可以放到邮件正文中

另一个选择是实际创建输出文件(使用UTL_FILE)并通过邮件作为附件发送。

或者,如果您想从操作系统级别执行此操作,您仍然应该创建输出文件并使用一些 工具 使您能够发送邮件。

【讨论】:

  • 我只需要将计数通过邮件发送给我。
  • @Littlefoot,为什么不按照 JCBA 的描述直接从 Oracle 发送电子邮件?
  • 那将是第三个子弹,@Maurice。
  • 我正在尝试上面的代码,但没有成功。我错过了什么?
  • 我更新了上面的脚本,现在正在发送电子邮件“Counts on $DB_DBASE is”,但没有查询的实际结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-25
  • 2016-12-03
  • 2018-03-03
  • 1970-01-01
  • 1970-01-01
  • 2022-10-15
  • 2010-12-19
相关资源
最近更新 更多