在SQL Server 2000中识别未使用表的策略?

时间:2020-03-05 18:45:10  来源:igfitidea点击:

我正在使用一个SQL Server 2000数据库,该数据库可能有几十个不再访问的表。我想清除不再需要维护的数据,但是我不确定如何确定要删除的表。

该数据库由多个不同的应用程序共享,因此我不能100%确信查看这些内容将为我提供所用对象的完整列表。

如果可能的话,我想做的是获取一段时间未访问过的表的列表。没有读,没有写。我应该如何处理?

解决方案

回答

如果我们有lastupdate列,则可以检查写入,实际上没有简单的方法可以检查读取。我们可以运行事件探查器,将跟踪保存到表中并在其中签入

我通常要做的是通过给表头加上下划线来重命名表,当人们开始尖叫时,我只是将表重命名为

回答

如果不使用,则表示应用程序不再有问题的表的引用,而我们使用的是动态sql,则可以在应用程序中搜索表名(如果不存在的话)会将它们吹走。

我还将所有存储过程,函数等输出到文本文件,并搜索了表名。如果找不到,或者在也需要删除的过程中找到,请将其吹走。

回答

MSSQL2000不会为我们提供此类信息。但是,我们可以使用SQL事件探查器来确定使用了哪些表(然后推断出没有使用的表),以将所有查询保存到某个数据库。配置探查器以将结果记录到新表中,然后检查保存在该表中的查询以查找应用程序使用的所有表(以及视图,sps等)。

我认为我们可以检查是否有"写入"的另一种方式是向每个表添加新的timestamp列,并在每次有更新或者插入时都更新该列的触发器。但是请记住,如果应用执行了以下类型的查询

select * from ...

那么他们将收到一个新列,这可能会导致我们遇到一些问题。

回答

只需删除它们,看看是否有任何用户对此抱怨;)

回答

看来使用Profiler可以正常工作。一旦让它运行了一段时间,我就应该有一个完整的已用表列表。每天不使用其表的任何人都可以等待它们从备份中还原。谢谢,伙计们。

回答

跟踪已写入表的另一个建议是使用Red Gate SQL日志救援(免费)。该工具将深入数据库的日志,并向我们显示所有插入,更新和删除。该列表也是完全可搜索的。

它不符合我们对数据库中的读进行研究的标准,但是我认为SQL Profiler技术将为我们带来一个公平的想法。

回答

可能为时已晚,无法帮助进行游动,但对于进行搜索的任何人而言;我将在代码中使用此对象搜索所有对象,然后在SQL Server中通过运行以下命令搜索所有对象:

选择不同的'['+ object_name(id)+']'
来自syscomments
其中的文字,例如"%MY_TABLE_NAME%"