我正在使用SQL Server 2000数据库,该数据库可能有几十个不再访问的表。我想清除我们不再需要维护的数据,但我不确定如何识别要删除的表。
数据库由几个不同的应用程序共享,因此我无法100%确信审阅这些应用程序将为我提供所使用对象的完整列表。
如果可能的话,我想做的是获取一段时间内根本没有访问过的表的列表。没有读,没有写。我该怎么做呢?
答案 0 :(得分:5)
MSSQL2000不会给你那种信息。但是,一种可以识别使用哪些表(然后推断出哪些表不是)的方法是使用SQL事件探查器来保存转发到某个数据库的所有查询。配置探查器以将结果记录到新表,然后检查保存在那里的查询以查找应用程序使用的所有表(以及视图,sps等)。
我认为您可以检查是否存在任何“写入”的另一种方法是向每个表添加新的时间戳列,以及每次有更新或插入时更新该列的触发器。但请记住,如果您的应用程序执行类型
的查询select * from ...
然后他们会收到一个新列,这可能会导致一些问题。
答案 1 :(得分:1)
跟踪已写入的表的另一个建议是使用Red Gate SQL Log Rescue(免费)。此工具深入了解数据库日志,并将显示所有插入,更新和删除。该列表也是完全可搜索的。
它不符合您研究数据库读取的标准,但我认为SQL Profiler技术将为您提供一个合理的想法。
答案 2 :(得分:0)
如果你有lastupdate列,你可以检查写入,真的没有简单的方法来检查读取。您可以运行探查器,将跟踪保存到表中并检入
我通常做的是通过在表格前面添加一个下划线来重命名表格,当人们开始尖叫时我只是将其重命名为
答案 3 :(得分:0)
如果没有使用,你的意思是你的应用程序没有更多对相关表的引用,并且你正在使用动态sql,你可以在应用程序中搜索表名,如果它们不存在则将它们吹走
我还将所有的sprocs,函数等输出到文本文件中,并搜索了表名。如果没有找到,或者在需要删除的程序中找到,请将它们吹掉。
答案 4 :(得分:0)
只需删除它们,看看是否有用户抱怨它;)
答案 5 :(得分:0)
看起来使用Profiler会起作用。一旦我让它运行了一段时间,我应该有一个很好的二手表列表。每天不使用他们的表的任何人都可能等待他们从备份中恢复。谢谢,伙计。
答案 6 :(得分:0)
可能为时已晚,无法帮助mogrify,但对于任何进行搜索的人来说;我会在我的代码中使用此对象搜索所有对象,然后在SQL Server中运行此代码:
选择不同的'['+ object_name(id)+']'
来自syscomments
其中包含'%MY_TABLE_NAME%'