我的数据库中的一个表有一些丢失的行,因为我上次对db进行了备份,因为它显示了备份数据库中的那些行。
我正在尝试查看过去3天内针对该表运行的所有查询(这是我上次进行备份的时间)
我将不胜感激任何帮助。 感谢。
答案 0 :(得分:6)
您可以检查查询是否已被缓存,但这是一个很长的镜头:
SELECT sql FROM sys.syscacheobjects where sql like '%TableName%'
答案 1 :(得分:1)
这就是为什么数据库需要可以创建的审计表来显示谁采取了行动。您还需要提前设置一种记录查询的方法(您可以使用Profiler,但这样做会有很大的性能影响,很少有dbas允许您在生产数据库中使用它。)如果您真的很想要,但通常知道是谁采取了行动(或者我们有许多应用程序在我们的数据库中使用了哪些应用程序)以及何时需要追踪数据问题。如果您尚未提前进行审核,则很难得到您想要的答案。一些第三方日志分析器(成本很高)可能能够重新创建数据,但它仍然不知道是谁做了什么或查询是什么。为什么你每三天只做一次备份?
你怎么知道行丢失(即它们应该仍在那里)并且没有被某人正确删除,因为它们不应该在那里。因为三天前有数据差异并不表示存在问题。如果这些是用户不应更改的值,那么他们为什么有权更改它们?也许你的安全模型和你回来的过程需要重新评估。
目前你很难找到改变的方法。因此,使用它作为激励来调查您需要设置数据库的哪些检查和平衡,以便将来可以更好地查看导致数据问题的原因或防止数据发生。并且由于您的备份与您所说的正确值(请参阅第2节),然后修复数据。
答案 2 :(得分:0)
不幸的是,您必须先设置原始查询的日志。在互联网上有很多解决方案(通过跟踪分析器或其他)。所有日志都永久写入DBMS的LOG文件中,但只是为了事务IO目的,一旦它们被转到硬盘驱动器,查询本身就会离开日志。 SQL代理错误日志可能包含您可能想要检出的一些数据。它在对象资源管理器中 - > SQL Server代理 - >错误日志