Как захватить логи из dbaccess

Я пытаюсь создать скрипт для проверки связи между базами данных сервера!

Для этого мне нужно захватить логи, но логи отображаются на экране, а не в файле.

файлы:

main.scr

#!/bin/ksh
server[0]="database1_tcp"
server[1]="database2_tcp"
server[2]="database3_tcp"
for i in "${server[@]}";
 do
  query.scr $i>>log_test.dat
 done

query.scr

#!/bin/ksh
DBACCESS testdb << EOSQLF
SELECT *
   FROM testdb@$1:some_table
EOSQLF

log_test.dat:

checking the connectivity for server: database1_tcp

field1 field2

     A      A

***********************************************
checking the connectivity for server: database2_tcp

***********************************************
checking the connectivity for server: database3_tcp


field1 field2

     A      A

***********************************************

Терминальный выход

Что появляется на экране, когда я запускаю main.scr:

Database selected.


1 row(s) retrieved.


Database closed.


Database selected.


908: Attempt to connect to database server (database2_tcp) failed.
Error in line 3
Near character position 1

Database closed.


Database selected.


1 row(s) retrieved.


Database closed.

Есть ли способ направить сообщения, поступающие на экран, в какой-нибудь файл журнала, или вы можете предложить лучший способ сделать это?

1 ответ

Решение

Как предположил shellter, DB-Access (dbaccess) записывает часть своего вывода в стандартную ошибку, а часть в стандартный вывод. (Обратите внимание, что хотя dbaccess записывает сообщения об ошибках в стандартную ошибку, а также записывает в них другую информацию о состоянии.) Вам нужно захватить оба, поэтому вам нужно пересмотреть свой сценарий, используя 2>&1 отправить файловый дескриптор 2 (он же стандартная ошибка) в то же место, куда идет файловый дескриптор 1 (он же стандартный вывод):

#!/bin/ksh
server[0]="database1_tcp"
server[1]="database2_tcp"
server[2]="database3_tcp"
for i in "${server[@]}"
do
    query.scr $i >>log_test.dat 2>&1
done

(Такое же перенаправление работает в оболочке Unix Bourne 7-го издания примерно с 1979 г. и ее наследниках, таких как оболочки Bash и Korn. URL-адрес формально относится к документам Bash; эта часть также работает в оболочке Korn.)

Вы можете обнаружить, что моя программа на SQLCMD лучше в этом отношении. Он предназначен для использования в сценариях и записывает нормальный вывод в стандартный вывод, а ошибки - в стандартную ошибку, и в первую очередь он менее подробный (если вы не настроите его, чтобы он был подробным). Он не имеет никакого отношения (кроме имени и общего назначения) к одноименной программе Microsoft с тем же именем - но MS удается доминировать в поиске, если вы не будете осторожны.

Другие вопросы по тегам