如何捕获Firebird SQL查询?

问题描述 投票:0回答:3

有没有办法捕获旧应用程序传输的 SQL 查询 在 Delphi/C++Builder + Firebird 中创建?

我没有该客户端应用程序的源代码或无法访问(远程)数据库服务器。

sql firebird capture
3个回答
10
投票

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 服务器并允许您记录流量(包括报表)。


2
投票

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
    参数告诉工具要跟踪哪个服务。您必须使用与要监控的客户端相同的连接方法。

    • 假设您使用 FlameRobin,在这种情况下,您可能已经定义了一个使用 TCP/IP 并连接到 localhost 和默认 TCP 端口 3050 的数据库连接。为了匹配这一点,您必须在服务名称前加上“localhost/3050”前缀.
    • 如果您想跟踪
      isql.exe
      会话,那么您可能让
      isql.exe
      连接而不使用本地主机。在这种情况下,您必须省略“localhost/port”前缀并仅指定
      -service service_mgr
  • -config
    参数指定配置文件所在的路径,该文件包含用于此跟踪会话的设置。必须使用定义跟踪所有详细信息(包括要跟踪的内容)的设置来配置跟踪。这些设置只能以配置文件的形式指定。

    • Firebird 引擎执行自己的跟踪 - 系统审核会话。为此,它在其程序文件夹中包含一个跟踪配置文件。使用此文件作为灵感/模板。它包含许多带注释的选项,解释每个选项的用途和语法。文件系统位置:
      C:\Program Files\Firebird\Firebird_3_0\fbtrace.conf
  • 仅当您想要监控 TCP/IP 连接时,才需要

    -user
    -password
    参数。如果您想监控无需身份验证的直接连接(例如
    isql.exe
    ),那么您可以省略凭据。

    • 您指定用于跟踪的用户显然必须有权“监视”正在跟踪的连接。
    • 该示例使用“sysdba”,它当然拥有所有权限。被追踪的连接用户也应该没问题。
  • 命令的最后一部分将输出重定向到跟踪日志文件。这是可选的,但您可能会想要这样做,因为可能会产生大量输出。您可以在文本编辑器(例如 Notepad++)中打开跟踪日志文件,当新内容写入文件时,它会提醒您。


0
投票

抱歉死了:)但我也有同样的问题。现在我们在 IBExpert IDE 中拥有了跟踪/审计工具。可以在服务菜单中找到。

© www.soinside.com 2019 - 2024. All rights reserved.