【问题标题】:Log all database objects accessed by JDBC记录 JDBC 访问的所有数据库对象
【发布时间】:2015-02-02 02:13:19
【问题描述】:

有没有办法记录运行在 Tomcat 中的应用程序读取/写入的所有数据库表(可能还有其他对象)?所有的数据库访问都是通过 Hibernate(通过 Spring 连接)或 Sql2o 执行的。

我们正在迁移遗留数据库,最好能自动将实际使用的表与纯遗留的表分开(我们有很多这样的数据库!)。

谢谢!

【问题讨论】:

  • 如果只需要表,您可以建立 JDBC 连接并说“从选项卡中选择 *”。
  • 你可以记录所有的sql请求(hibernate有它的选项),但是看看你的映射不是更容易吗?不知道Sql2o是什么,但认为它也可以记录sql。
  • 恕我直言,不是 100% 可靠的。但是,您可能会尝试配置 p6spy.github.io/p6spy 之类的东西,然后例如一周后尝试 grep 日志文件中的每个旧数据库表名。 grep 没有找到的那些至少在一个测试周内没有被使用过。
  • @talex - 查看映射可能会或可能不会足够,因为您可能会通过 Hibernate API 执行本机 SQL。无论如何,我认为这是否是一个选项还取决于每个 Sql2o 完成的代码量。但我同意分析应用程序可能比使用实际 SQL 访问分析日志更好。
  • 感谢您的 cmets!我正在尝试设置 P6spy。

标签: java hibernate tomcat logging jdbc


【解决方案1】:

您可以创建新的 Aspect,因为您已经在使用 Spring,并监控您所有的读/写服务,因此每次调用它时,您都可以记录它。

这应该很容易,定义新方面(例如 MyAspect),定义之前/之后或回合操作(将在某处记录您的表名),然后将注释放在您的服务上(@MyAspect)。

另一种方法是在您的表上创建触发器(不确定这是否是一个选项),但我更喜欢一个方面......这是更清洁的方法。

【讨论】:

    猜你喜欢
    • 2014-12-25
    • 1970-01-01
    • 1970-01-01
    • 2016-01-03
    • 2015-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多