【发布时间】:2015-05-14 23:07:21
【问题描述】:
有什么方法可以捕获旧应用程序传输的 SQL 查询 在 Delphi/C++Builder + Firebird 中创建?
我没有该客户端应用程序的源代码或访问(远程)数据库服务器。
【问题讨论】:
-
我见过的最接近的是FBScanner,它是一个记录流量的代理。
有什么方法可以捕获旧应用程序传输的 SQL 查询 在 Delphi/C++Builder + Firebird 中创建?
我没有该客户端应用程序的源代码或访问(远程)数据库服务器。
【问题讨论】:
Firebird 2.5 添加了trace API,可用于跟踪语句的准备和执行以及许多其他事情。 Firebird 中包含的用于使用跟踪 API 的工具相当基本,但它可能足以满足您的需求。请注意,默认情况下,跟踪 API 会限制捕获和记录的语句的大小,并且可能需要一些时间来调整跟踪配置以获取您需要的所有信息。
一个示例配置是:
<database mydatabase.fdb>
enabled true
log_statement_prepare true
time_threshold 0
max_sql_length 65536
</database>
这应该捕获数据库mydatabase.fdb中使用完整SQL查询准备的所有语句。
查看更多信息:Audit and Trace Services in Firebird 2.5。
有几家供应商提供使用跟踪 API 的工具(例如 Upscene Productions 的 FB Tracemanager),正如 cmets 中已经提到的,还有 FBScanner 由 IBSurgeon 提供,它充当客户端和 Firebird 服务器之间的代理,并允许您记录流量(包括语句)。
【讨论】:
Firebird 包含一个实用程序fbtracemgr.exe,可用于跟踪。这是一个示例命令行:
cd "C:\Program Files\Firebird\Firebird_3_0"
fbtracemgr -start -service localhost/3050:service_mgr -config c:\temp\fb-trace.config -user sysdba -password <secret> >c:\temp\fb-trace.log
参数讨论:
-start 参数指示工具启动跟踪会话。还有其他参数,只要不带任何参数运行fbtracemgr.exe就可以看到可能的参数列表。
-service 参数告诉工具要跟踪哪个服务。您必须使用与要监控的客户端相同的连接方法。
isql.exe 会话,那么您可能让isql.exe 连接而不使用本地主机。在这种情况下,您必须省略“localhost/port”前缀,只需指定 -service service_mgr。-config 参数指定配置文件所在的路径,其中包含要用于此跟踪会话的设置。必须使用定义跟踪的所有详细信息(包括要跟踪的内容)的设置来配置跟踪。只能以配置文件的形式指定设置。
C:\Program Files\Firebird\Firebird_3_0\fbtrace.conf。-user 和 -password 参数只有在您想要监控 TCP/IP 连接时才是必需的。如果您想监控没有身份验证的直接连接(例如isql.exe),那么您可以省略凭据。
命令的最后一部分将输出重定向到跟踪日志文件。这是可选的,但您可能希望这样做,因为可能有很多输出。您可以在 Notepad++ 等文本编辑器中打开跟踪日志文件,当新内容写入文件时会提醒您。
【讨论】: