Запустите SQL-запрос в сценарии оболочки, а затем отправьте вывод по электронной почте - PullRequest
0 голосов
/ 26 января 2019

Мне нужно выполнить простой запрос на выборку в нашей базе данных Oracle.Но это займет несколько часов, чтобы завершить.Я хочу сделать это с помощью сценария оболочки, так что мне не нужно время от времени отслеживать, если запрос все еще выполняется, и хочу отправить вывод в моем письме, поскольку мне нужны только цифры

I 'Я делаю это на удаленном сервере и не обладаю правами администратора для отключения ограничения по времени перед отключением.

Заранее благодарю за помощь.

Вот исходный код, который яwrite.

     #!/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.
Вызов скрипта: nohup ksh countts.sh пароль пользователя DB &

1 Ответ

0 голосов
/ 26 января 2019

Вы никогда не говорили, что является результатом этого запроса.Да, это подсчитывает что-то, но - как выглядит вывод?Одно значение?Один столбец в несколько рядов?Много столбцов в одном ряду?Много столбцов в еще большем количестве строк?

Поскольку самому запросу требуется несколько часов, возможно, вы захотите проверить результат, отсортированный по , или , , выполнить некоторые вычисления и т. Д.- если это так, возможно, самый простой вариант -

  • создать таблицу, содержащую столбцы, возвращаемые этим запросом
  • написать хранимую процедуру, которая вставляет результат в таблицу
  • в конце процедуры используйте UTL_MAIL (или UTL_SMTP) и отправьте себе письмо, просто сказав, что обработка завершена
  • , подключитесь к базе данных и выберите * из таблицы вЧтобы просмотреть результат
  • , если результат запроса прост, вы можете поместить его в тело сообщения электронной почты

Другой вариант - создать файл вывода (используя UTL_FILE) и отправьте по почте в виде вложения.

Или, если вы хотите сделать это на уровне операционной системы, вы все равно должны создать выходной файл и использовать какой-нибудь инструмент , который позволяет отправлять почту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...