以下内容不适用于 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
由于它还会在重建索引时捕获,因此您需要每个月左右运行以下命令来清除这些事件:
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
以下是最可能的情况(假设没有复制):
您在数据库上使用什么恢复模式?你能滚动trans log看看发生了什么吗?
以下内容不适用于 SQL Server 2000,但如果您曾经迁移到 SQL Server 2005 或 2008,您可能需要实现以下内容:
由于它还会在重建索引时捕获,因此您需要每个月左右运行以下命令来清除这些事件:
我知道你的情况也有点晚了,而且 SQL Server 的版本错误,但它可能会在未来帮助其他人。
Redgate 的 SQL Log Rescue 是一个免费下载,可能会有所帮助。
我希望硬件问题会在系统事件日志中表现出来(至少我的总是这样)。