我的数据库中存在一个存储过程,它使用Management Studio恢复旧存储过程,Alter
存储过程,但不久之后,意外地,存储过程变为{{1}之前的存储过程}!这种情况在过去几个小时内曾多次发生过!
我确信程序中没有任何地方或手动更改存储过程。我检查了所有代理作业,每小时备份只有一个Alter
,Maintenance job
只有一个Replication
,但Replication Schema Changes
设置为false
,存储过程在Publication Articles
这种行为还有其他可能的原因吗?我是否需要在SQL Server数据库中手动设置CHECKPOINT?
答案 0 :(得分:8)
您可以创建一个DDL触发器来记录ALTER_PROCEDURE
这样的事件:
CREATE TABLE dbo.AlterLog(EventType VARCHAR(50)
, ObjectName VARCHAR(256)
, ObjectType VARCHAR(25)
, TSQLCommand VARCHAR(MAX)
, LoginName VARCHAR(256)
);
GO
CREATE TRIGGER AlterProcs
ON DATABASE
FOR ALTER_PROCEDURE
AS
SET NOCOUNT ON;
DECLARE @data XML
SET @data = EVENTDATA()
INSERT INTO dbo.AlterLog(EventType, ObjectName, ObjectType, TSQLCommand, LoginName)
VALUES(@data.value('(/EVENT_INSTANCE/EventType)[1]', 'varchar(50)'),
@data.value('(/EVENT_INSTANCE/ObjectName)[1]', 'varchar(256)'),
@data.value('(/EVENT_INSTANCE/ObjectType)[1]', 'varchar(25)'),
@data.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'varchar(max)'),
@data.value('(/EVENT_INSTANCE/LoginName)[1]', 'varchar(256)')
)
GO