Сценарий оболочки для отправки результатов запроса SQLPlus по электронной почте с использованием Mailx в AIX

#shell #sqlplus #aix #mailx

#оболочка #sqlplus #aix #mailx

Вопрос:

У меня есть команды, которые мне нужны. Если я выполняю эти команды в командной строке, все работает, как ожидалось. SQLPlus запускает запрос, экспортирует результат в файл, а затем Mailx отправляет этот файл мне по электронной почте.

 sqlplus username/pwd@instance
SPOOL /home/sadmin/sqlmail/spool.out
set linesize 2000
set wrap off
@/home/sadmin/sqlmail/query.sql
SPOOL OFF
exit
mail -s "Subject" email@address.com < /home/sadmin/sqlmail/spool.out
  

Но, хоть убейте, я не могу понять, как поместить их в файл .sh, чтобы я мог запланировать это. Помогите!? И заранее спасибо, я уверен, что это очень глупо.

Ответ №1:

Использование документа оболочки «Здесь» является обычным решением, т.Е.

  cat MyCommand.sh
 #!/bin/bash  # (or ksh, sh, etc)
 PATH=.../path/to/sqlplusdir:${PATH}

sqlplus username/pwd@instance <<EOS
    SPOOL /home/sadmin/sqlmail/spool.out
    set linesize 2000
    set wrap off
    @/home/sadmin/sqlmail/query.sql
    SPOOL OFF
    exit
EOS
mail -s "Subject" email@address.com < /home/sadmin/sqlmail/spool.out
  

Вам нужно будет указать в вашем PATH env путь к исполняемому файлу sqlplus.

Затем вам нужен идентификатор пользователя с доступом к средству cron. Вы знаете, как использовать редактор ‘vi’? При вызове crontab вы будете просматривать запланированные задания текущего пользователя, и вам нужно будет управлять файлом с помощью команд ‘vi’. (Возможно, можно переопределить, какой редактор использовать, но не рекомендуется)

Вам нужно прочитать справочную страницу для cron, т. е. man cron , и вы вызовете приведенный выше скрипт как завершенный. Запись cron будет выглядеть следующим образом

 59 23 31 12 * { var=x; export var ; myCommand ; } > /tmp/myWorkDir/myCommand.trace 2>amp;1 

min
   hr
     day
       mon
          (DayOfWeek)
  

значениями для даты / времени могут быть списки, разделенные запятыми (0,15,30,45), диапазоны, разделенные дефисом (4-6) или * для обозначения всех допустимых значений.

Это фиксирует любой вывод, включая stderr, с первого запуска myCommand в файл в tmpDir.

Минимальная версия вышеупомянутого будет

 59 23 12 31 * var=x; export var ; myCommand
  

и затем любой вывод отправляется в локальный почтовый ящик пользователя.

Я надеюсь, что это поможет.

Комментарии:

1. Меня не столько волнует планирование, сколько получение этих команд в .sh, которые я могу выполнить. После того, как у меня будет .sh, я могу запланировать это без проблем. Если я просто вставлю эти файлы в файл .sh и запущу его, я получу запрос SQL>. Как заставить команды SQLPlus автоматически выполняться в .sh?

2. Также обратите внимание, что поиск «sqlplus here document» здесь, в S.O., показывает, что другие люди используют sqlplus -s ... . Мой опыт работы с Sybase isql, поэтому я полагаюсь на то, что рекомендовали другие, когда дело доходит до правильных аргументов / опций для sqlplus. Удачи.