我知道" SQL Server Profiler ",但有没有可用于监视来自客户端计算机的已发出sql查询的工具或方法?
目前我想到的一些事情是:
1)SysInternals ProcMon可以记录并告知客户端计算机上的可执行进程何时连接到sql server。任何类似但更高级的工具可以告诉更多数据吗?
2)客户端机器的任何调试版本或检测版本的客户端库和API都允许这样的操作吗?
答案 0 :(得分:3)
您可以从ODBC数据源管理器(odbcad32.exe)启用ODBC跟踪。它生成的日志文件相当神秘,但它将为您提供该计算机上登录用户运行的SQL语句。还有一个标记为“所有用户身份的机器范围跟踪”的复选框,用于记录该计算机上任何用户(包括服务)运行的所有SQL语句。
在断开连接并重新连接到SQL Server之前,可能无法启动日志记录。因此,重新启动连接到SQL Server的任何程序/服务是个好主意。如果您启用了连接池,这一点尤其重要,即使相关程序已断开连接,也会保持连接处于打开状态。
此外,Windows 64bit上有两个版本的ODBC数据源管理器,一个用于32位,另一个用于64位。因此,您需要为正在跟踪的程序的相应位数启用日志记录。
更新:您的另一个选择是使用Wireshark之类的工具。由于它能够处于网络驱动程序级别,因此可以拦截所有网络流量 - 包括但不限于SQL。这些被称为TDS packets - Sybase SQL Server (ASE),Microsoft SQL Server和FreeTDS(w / UnixODBC)使用的标准。