如何从 dbaccess 捕获日志
How to capture the logs from 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@: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.
有没有一种方法可以将屏幕上显示的消息定向到某个日志文件,或者您能建议一种更好的方法吗?
作为 shellter , DB-Access (dbaccess
) writes some of its output to standard error and some to standard output. (Note that although dbaccess
writes error messages to standard error, it also writes other status information there as well.) You need to capture both, so you need to revise your script using 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
(相同的重定向在大约 1979 年的第 7 版 Unix Bourne shell 及其继承者 Bash 和 Korn shell。URL 正式用于 Bash 文档;这部分在 Korn shell 中也一样。)
您可能会发现我的 SQLCMD 程序在这方面更好。它专为在脚本中使用而设计,将正常输出写入标准输出,将错误写入标准错误,并且首先不那么冗长(除非您将其调整为冗长)。它与 Microsoft 的同名 johnny-come-lately 程序没有任何关系(除了名称和通用目的)——但如果你不小心的话,MS 会在搜索中占据主导地位。
我正在尝试创建一个脚本来检查服务器数据库之间的连接!
为此我需要捕获日志,但日志显示在屏幕上而不是文件中。
文件:
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@: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.
有没有一种方法可以将屏幕上显示的消息定向到某个日志文件,或者您能建议一种更好的方法吗?
作为 shellter dbaccess
) writes some of its output to standard error and some to standard output. (Note that although dbaccess
writes error messages to standard error, it also writes other status information there as well.) You need to capture both, so you need to revise your script using 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
(相同的重定向在大约 1979 年的第 7 版 Unix Bourne shell 及其继承者 Bash 和 Korn shell。URL 正式用于 Bash 文档;这部分在 Korn shell 中也一样。)
您可能会发现我的 SQLCMD 程序在这方面更好。它专为在脚本中使用而设计,将正常输出写入标准输出,将错误写入标准错误,并且首先不那么冗长(除非您将其调整为冗长)。它与 Microsoft 的同名 johnny-come-lately 程序没有任何关系(除了名称和通用目的)——但如果你不小心的话,MS 会在搜索中占据主导地位。