Как захватить логи из 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 удается доминировать в поиске, если вы не будете осторожны.