有没有办法捕获旧应用程序传输的 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>
Firebird 3.0 及更高版本使用稍微不同的语法(键和值之间有
=
):
<database mydatabase.fdb>
enabled = true
log_statement_prepare = true
time_threshold = 0
max_sql_length = 65536
</database>
这应该捕获数据库中使用完整 SQL 查询准备的所有语句
mydatabase.fdb
。
了解更多信息:Firebird 2.5 中的审核和跟踪服务。
有几个供应商提供利用跟踪 API 的工具(例如 Upscene Productions 的 FB Tracemanager),正如评论中已经提到的,还有 IBSurgeon 的 FBScanner,它充当客户端和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
。仅当您想要监控 TCP/IP 连接时,才需要
-user
和 -password
参数。如果您想监控无需身份验证的直接连接(例如isql.exe
),那么您可以省略凭据。
命令的最后一部分将输出重定向到跟踪日志文件。这是可选的,但您可能会想要这样做,因为可能会产生大量输出。您可以在文本编辑器(例如 Notepad++)中打开跟踪日志文件,当新内容写入文件时,它会提醒您。
抱歉死了:)但我也有同样的问题。现在我们在 IBExpert IDE 中拥有了跟踪/审计工具。可以在服务菜单中找到。