【问题标题】:How would a SQL Server 2005 database lose a few days data?SQL Server 2005 数据库如何丢失几天的数据?
【发布时间】:2009-04-01 20:25:20
【问题描述】:

我真的需要一些帮助。

我是丢失三天数据的 SQL Server 数据库应用程序的所有者!我不明白如何或为什么。

所以这里是设置。

  • Windows 2000 服务器上的 SQL Server 2005 32 位标准版数据库。 (数据库 B)

  • 数据库处于简单恢复模式

  • 使用 SQL Server 连续合并复制将数据库作为订阅者连接到另一个数据库(Win2k3 企业上的 SQL Server 2005 64 位企业版)。 (数据库 A)

DatabaseB 在晚上 X 重新启动,作为计划重启的一部分。数据库恢复后,它正常使用了几天,数据被完美地创建到其中。

但是昨天第 X + 4 天它丢失了很多数据。

数据库 B 位于具有另一个 SQL Server 实例的服务器上,并且它们都开始耗尽内存(彼此冲突)。

这是我认为发生这种情况时事件日志中的事件顺序。

AppDomain 2 (DatabaseB.dbo[runtime].1) is marked for unload due to memory pressure. 

AppDomain 2 (DatabaseB.dbo[runtime].1) unloaded. 

BACKUP LOG WITH TRUNCATE_ONLY or WITH NO_LOG is deprecated. 
The simple recovery model should be used to automatically truncate the transaction log. (on DatabaseB)

AppDomain 3 (DatabaseB.dbo[runtime].2) created. 

我知道数据丢失是因为我的审核日志,并且用户在删除之前截取了部分数据的屏幕截图。

所以这就是我的困境......这怎么会发生?

DatabaseB 怎么会丢失几天的数据? (随后发布数据库中也缺少它!)

Appdomain down 的截断是否导致数据从日志中被刷新?

考虑的任何和所有理论。如果有人需要更多数据,我可以添加。

救命!

【问题讨论】:

  • 我不知道它是如何丢失的,但 Dick Cheney 为您提供了一个 DBA 管理员职位

标签: sql-server database sql-server-2005 transactions backup


【解决方案1】:

这不是您想听到的答案,但简而言之,SQL Server 不会“丢失”数据。有人删了。如果您的数据库处于完全恢复模式,您可以使用 Quest LiteSpeed 之类的产品来读取日志并准确识别它是如何被删除的,但在简单模式下......对不起,先生,但您不走运。

【讨论】:

    【解决方案2】:

    合并复制是通过触发器实现的,因此不需要完全恢复。是否有人禁用了数据库中的所有触发器?它很容易做到 DISABLE TRIGGER [database] 这至少会导致订阅者丢失数据。

    日志中的那些 appdomain 行意义不大,它是 SQL CLR 告诉您它卸载程序集以释放一些内存。然后稍后重新加载它们。

    截断日志会删除已提交到磁盘的非活动部分,将恢复模式设置为简单意味着没有必要截断日志,如消息所示。

    这些都不能解释为什么两台服务器上的数据都丢失了。一定有其他原因导致了这种情况。

    在这 4 天里,一切都“完美无缺”,您如何验证它实际上是什么?你有这些天的备份吗?你能看到那些日子带有时间戳的记录吗?

    是否有可能机器中有鬼在不告诉你的情况下进行了还原?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多