0

我当前项目的要求之一是能够记录由 Hibernate 或 Ibatis 生成的 SQL 语句,并将它们保存到特定表(在 SQLServer 上),以便管理员可以回来查看运行了哪些查询以及谁运行运行它们,甚至按需重用这些语句。虽然我不同意这种方法,但我想知道是否真的存在可以实现这一目标的库。我正在为我的 Web 应用程序使用 Spring 框架。

4

5 回答 5

1

有 3rd 方 SQL Server 工具可以捕获 T-SQL 语句,并将它们存储起来以供以后操作和分析,例如Idera SQL Compliance ManagerApexSQL Comply

免责声明:我在 ApexSQL 担任产品支持工程师

于 2013-11-13T11:14:11.887 回答
0

另一种方法是在 Hibernate 配置设置中启用 SQL 语句日志记录,然后将语句“悬停”出日志文件。

但我认为数据库服务器端解决方案可能是最好的,因为它还可以捕获使用数据库的交互式查询工具执行的查询和更新。

于 2013-11-13T10:58:55.333 回答
0

如果要捕获 Hibernate 或 Ibatis 等中间件的所有查询,最简单的方法是使用SQL Server 分析器或使用 SQLTrace 存储过程(sp_trace_create、sp_trace_setevent)创建跟踪。使用 SQL Profiler,您可以将跟踪直接保存到表中,使用生成 trc 文件的 SQLTrace 存储过程,您必须使用 sql 语句将它们插入到表中。它们是网络上的很多示例,例如这里 SQL Profiler 可以选择在定义跟踪后生成 SQLTrace SQL 脚本(文件/导出)

SQL Profiler 是developper 版,而不是Express 版。SQLTrace 存储过程适用于所有版本 (IIRC)。

您可以在 developerper 版本上生成跟踪脚本并在您的 express 版本上运行它。您还可以创建一个存储过程,在服务器启动时创建和启动跟踪。

于 2013-11-13T10:54:58.320 回答
0

我知道一种方法,虽然它不容易实现。制作自定义数据源 - 对真实数据源(如 Apache BasicDataSource)的包装器。它将拦截 getConnection 调用并包装目标 DataSource 返回的 Connection。这个包装的 Connections 将拦截 createStatement / createPreparedStatement 调用并包装返回的 Statements / PreparedStatement。语句包装器现在可以拦截 SQL 执行并记录它们。

于 2013-11-13T10:46:13.517 回答
0

您可以在服务器上执行此操作,如果您拥有 SQL Server 企业版,则使用数据库审核。或者您可以使用扩展事件。您只需要按应用程序名称进行过滤,其中应提及 ORM。为了进一步帮助您,请提供 SQL Server 的版本和版本。

于 2013-11-13T10:45:34.670 回答