问题描述
我想找到一个可以检测sybase数据库中的冗余/未使用表和存储过程的工具。
可从Java应用程序访问该数据库,该Java应用程序使用JDBC来访问表和存储的proc。
总共有400个表和类似数量的存储过程。
有什么建议么?
1楼
看到应用程序未使用的唯一可靠方法是设置日志记录并运行应用程序的完整练习。 可以从客户端和/或服务器完成此操作。
您可以使用log4jdbc记录JDBC活动,也可以让DBA在该spid上设置跟踪。
一个好的DBA计划在生产中安排一份工作,以收集定期快照以查看正在发生的事情,这可能会帮助您,具体取决于所监视的内容。
确定要删除的候选对象之后,可以创建ObjectLog表并在表上编写触发器脚本,然后调用每个proc插入该表。 将其在生产中运行一段时间会给您信心,让您放弃。
2楼
假设您使用的是ASE 12.5+,另一种方法是使用MDA表。 我认为这些表之一是monOpenObjectActivity,它跟踪所有对象的使用情况。 您可以对此表运行查询,以查找索引,表和存储过程的使用频率。 如果您能找到解决方法,它将非常有用。
第一步是安装表,因为默认情况下不存在这些表。 最好的指南在这里: : 。 在该页面上还提供了一些示例查询,我认为标题为“在当前数据库中查找看似未使用的索引”的一个查询非常适合您。 该查询可以轻松地调整为报告所有对象的所有使用情况。
3楼
假设表名都是在应用程序内硬编码的,并且不是动态构造的,则可以搜索Java代码和存储过程以查找表名400。 在未显示的那些中,您需要先确认已使用表中没有FK引用,然后再将其视为删除对象。 大多数数据库客户端工具(例如DBVisualizer)将允许您逐表查找这些工具。 甚至可能有一种方法可以将其作为查询发出,但是我对Sybase并不十分肯定。