我们有一个表从我们的生产SQL Server 2000数据库中消失。
它运行在RAID 5存储上,所以我们非常有信心,这不是硬件相关的损坏。
我们知道这表明可能违反安全。 我们正在调查。
还有什么其他可能的原因,为什么一张桌子似乎随机消失?
这里是最有可能的情况(假设没有复制):
你在数据库上使用什么恢复模式? 你能翻滚日志看看发生了什么?
以下在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我一直都有)。