有没有办法捕获旧应用程序传输的SQL查询 在Delphi / C ++ Builder + Firebird中创建?
我没有该客户端应用的源代码或访问(远程)数据库服务器。
答案 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
参数告诉工具要跟踪哪个服务。必须使用与要监视的客户端相同的连接方法。
isql.exe
会话,那么您可能让 isql.exe
连接而不使用 localhost。在这种情况下,您必须省略“localhost/port”前缀并只指定 -service service_mgr
。-config
参数指定配置文件所在的路径,其中包含要用于此跟踪会话的设置。必须使用定义跟踪的所有详细信息(包括要跟踪的内容)的设置来配置跟踪。设置只能以配置文件的形式指定。
C:\Program Files\Firebird\Firebird_3_0\fbtrace.conf
。-user
和 -password
参数仅在您想要监视 TCP/IP 连接时才是必需的。如果您想在没有身份验证的情况下监控直接连接(例如 isql.exe
),那么您可以省略凭据。
命令的最后一部分将输出重定向到跟踪日志文件。这是可选的,但您可能想要这样做,因为可能会有很多输出。您可以在 Notepad++ 等文本编辑器中打开跟踪日志文件,它会在新内容写入文件时提醒您。