SQL Server 2000 – 数据库表不见了。 有什么可能的原因?

我们有一个表从我们的生产SQL Server 2000数据库中消失。

它运行在RAID 5存储上,所以我们非常有信心,这不是硬件相关的损坏。

我们知道这表明可能违反安全。 我们正在调查。

还有什么其他可能的原因,为什么一张桌子似乎随机消失?

这里是最有可能的情况(假设没有复制):

  • 故意删除表
  • 无意的DROP TABLE
  • SQL注入攻击
  • 代码中的错误(存储过程,编译的exe / dll等)
  • 有人在某处点击了SSMS
  • 有人编辑了一个图表,点击“从数据库中删除表格”,而不是“从图表中删除”

你在数据库上使用什么恢复模式? 你能翻滚日志看看发生了什么?

以下在SQL Server 2000上不起作用,但是如果您迁移到SQL Server 2005或2008,则可能需要执行以下操作:

CREATE TABLE [dbo].[AuditDDL]( [EventID] [int] IDENTITY(1,1) PRIMARY KEY NOT NULL, [EventData] [xml] NULL, [EventTime] [datetime] DEFAULT (getdate()) ) GO -- This fails on SQL 2000. CREATE TRIGGER [trgAuditDDL] ON DATABASE FOR DDL_DATABASE_LEVEL_EVENTS AS INSERT INTO AuditDDL(EventData) SELECT EVENTDATA() GO 

由于它也捕获索引重build时,您需要每月运行以下清除这些事件:

 DELETE FROM AuditDDL WHERE [EventData].exist('/EVENT_INSTANCE/EventType/text()[fn:contains(.,"ALTER_INDEX")]') =1 GO DELETE FROM AuditDDL WHERE [EventData].exist('/EVENT_INSTANCE/EventType/text()[fn:contains(.,"UPDATE_STATISTICS")]') =1 GO 

我知道对于你的情况,SQL Server的错误版本也有点晚了,但它可能会在未来帮助其他人。

Redgate的SQL日志拯救是免费下载,可能有帮助。

我希望硬件问题可以在系统事件日志中体现出来(至less我一直都有)。