我们收集了一些非常古老,devise可怕的数据库,并且我已经获得了绿灯,将它们拆除并重新构build。 然而,这些数据库没有正常化,很多领域已经空了多年,或没有文件重新使用,我们有一些遗留的应用程序和公共网站,使用这些数据的各个部分,但没有人有任何想法什么是什么。
我怎么能确定这些表中的哪些字段正在使用? 有没有在SQL服务器的方式,或使用第三方工具,如果需要的话,看看使用历史? 或者设置一些额外的日志logging来确定这个用法? “用法”在上次更新或插入时是理想的含义,以及在select语句中包含的时间或频率。
除此之外,我们正在从SQL 2005迁移到2008年。因此,使用任一种服务器types的解决scheme都可以工作,因为我应该能够将05 dbs提高到08。
就我个人而言,我会用DMV作为我的初步调查来寻找主要活动。 这可以帮助您调查,以便您可以创build正确的分析器跟踪。 (正如Sam提到的,你要小心这些,所以你不会造成性能问题。)
既然你提到你有使用SQL 2008的选项,新的审计function可能对你有用。
这是我build议看的:
使用索引DMV寻找对象访问
两个DMV将是最有用的: sys.dm_db_index_usage_stats (BOL here )和sys.dm_db_missing_index_details (BOL here )。
在caching中查找最频繁,影响最大的查询
使用sys.dm_exec_query_stats查询来查找最频繁运行的查询。 BOL 在这里 。
祝你好运!
select语句可以从现在的sql server跟踪审计。 它们不存储在日志中。 您的日志保存数据修改,可以使用来自常用SQL实用程序供应商的某些第三方工具进行检查。 你也可以在你所有的表上使用触发器来审计修改 – 但是它们不会捕获select。
不build议对生产中的所有select报表运行“开放式”痕迹。 如果可能的话,把它发展到开发,并设置一些testing。
c2审计也可能帮助你,但我不知道它实际收集的细节。
另外,遍历应用程序代码也是一个很好的调查的地方。
您可以使用SQL事件探查器运行一个跟踪,放一会儿,然后在输出中查找以查找您所关心的字段名称。
另一个select是你可以在SQL服务器中创build一个触发器并将该信息logging到另一个表中。
即
CREATE TRIGGER Audit ON dbo.Employee FOR INSERT, UPDATE, DELETE AS IF (SELECT COUNT(*) FROM inserted) > 0 BEGIN IF (SELECT COUNT(*) FROM deleted) > 0 BEGIN -- update! INSERT AuditEmployee (EmployeeID, UserName, Operation) SELECT EmployeeID, SUSER_SNAME(), 'U' FROM inserted END ELSE BEGIN -- insert! INSERT AuditEmployee (EmployeeID, UserName, Operation) SELECT EmployeeID, SUSER_SNAME(), 'I' FROM inserted END END ELSE BEGIN -- delete! INSERT AuditEmployee (EmployeeID, UserName, Operation) SELECT EmployeeID, SUSER_SNAME(), 'D' FROM deleted END GO
该示例是从http://sqlserver2000.databases.aspfaq.com/how-do-i-audit-changes-to-sql-server-data.html中提取的。 要存储列名称,可以将该variables添加到您的插入语句中。 另见示例http://www.devx.com/dbzone/Article/7939/1954 。