如何捕获Firebird SQL查询?

时间:2015-05-14 23:07:22

标签: sql firebird capture

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

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

2 个答案:

答案 0 :(得分:5)

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 ),并且正如评论中已经提到的那样,还有 FBScanner 由IBSurgeon充当客户端和Firebird服务器之间的代理,并允许您记录流量(包括语句)。

答案 1 :(得分:0)

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。在这种情况下,您必须省略“localhost/port”前缀并只指定 -service service_mgr
  • -config 参数指定配置文件所在的路径,其中包含要用于此跟踪会话的设置。必须使用定义跟踪的所有详细信息(包括要跟踪的内容)的设置来配置跟踪。设置只能以配置文件的形式指定。

    • Firebird 引擎执行其自身的跟踪 - 系统审计会话。为此,它包含一个位于其程序文件夹中的跟踪配置文件。将此文件用作灵感/模板。它包含许多注释选项,解释每个选项的用途和语法。文件系统位置:C:\Program Files\Firebird\Firebird_3_0\fbtrace.conf
  • -user-password 参数仅在您想要监视 TCP/IP 连接时才是必需的。如果您想在没有身份验证的情况下监控直接连接(例如 isql.exe),那么您可以省略凭据。

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