Use*_*ith 5 sql-server-2005 sql-server-2008 sql-server stored-procedures
可能的重复:
确定架构更改是如何发生的?
我有一个存储过程,它在昨晚深夜修改过,早上大部分时间都在跟踪问题回到这个变化。
基本上没有人承认这一变化,所以我试图弄清楚如何找到谁修改了这个存储过程。我已经在网上研究过如何找到它,但看起来这是不可能的?
我想如果有人知道如何做到这一点,那就是这里的某个人。
我确实尝试过这个。:
“在 SSMS 中,右键单击服务器名称,选择报告/标准报告/架构更改历史记录。” --> 这没有给我任何东西,但我至少能够运行它,这为我提供了时间。
select name, create_date, modify_date
from sys.procedures
where name = 'mystoredprocedure'
Run Code Online (Sandbox Code Playgroud)
感谢您的任何建议或方向。
我知道这并不能解决您当前的问题,但是,主动管理此类事件的最佳方法可能是创建一个 DDL 数据库触发器,将事件记录到设计日志表中,例如:
CREATE TABLE dbo.DesignLog(
DesignLogID int NOT NULL PRIMARY KEY CONSTRAINT PK_DesignLog IDENTITY(1,1),
DateStamp datetime NULL CONSTRAINT DF_DesignLog_DateStamp DEFAULT (getdate()),
HostName nvarchar(255) NULL CONSTRAINT DF_DesignLog_HostName DEFAULT (host_name()),
UserName nvarchar(255) NULL CONSTRAINT DF_DesignLog_UserName DEFAULT (suser_sname()),
ActionType nvarchar(255) NULL,
StatementExecuted nvarchar(max) NULL
);
GO
CREATE TRIGGER [DesignLogTrigger]
ON DATABASE
FOR DDL_DATABASE_LEVEL_EVENTS
AS
/*
Authored By: Max Vernon
Author Date: 2012-07-05
Purpose: Capture DDL Statements executed against database
*/
SET NOCOUNT ON;
DECLARE @data XML;
DECLARE @ActionType nvarchar(max);
DECLARE @Statement nvarchar(max);
DECLARE @msg nvarchar(max);
SET @data = EVENTDATA();
SET @msg = cast(@data.query('(/EVENT_INSTANCE/TSQLCommand/CommandText)') as nvarchar(max));
SET @msg = dbo.xmltostring(@data.query('(/EVENT_INSTANCE/TSQLCommand/CommandText)'));
SET @msg = dbo.RemoveTag(@msg, '');
SET @msg = dbo.RemoveTag(@msg, '');
SET @ActionType = @data.value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(255)');
SET @Statement = @data.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'nvarchar(max)');
IF @msg NOT LIKE 'UPDATE STATISTICS' + char(37) + ''
AND @msg NOT LIKE 'ALTER INDEX' + char(37) + 'REORGANIZE' + char(37) + ''
AND @msg NOT LIKE 'ALTER INDEX' + char(37) + 'REBUILD' + char(37) + ''
BEGIN
BEGIN TRAN;
INSERT INTO DesignLog
(
ActionType
, StatementExecuted
)
VALUES
(
@ActionType
, @Statement
);
COMMIT TRAN;
END
END;
GO
ENABLE TRIGGER [DesignLogTrigger] ON DATABASE;
Run Code Online (Sandbox Code Playgroud)
这个特定的 DDL 触发器不会记录某些事件,例如UPDATE STATISTICS
, INDEX REBUILD
, AND INDEX REORGANIZE
。我们对记录这些事件不感兴趣,因为这些事件发生在我们每晚的数据库维护任务中,因此排除了开发人员所做的有意义的更改。
此特定触发器的优点在于它捕获事件的实际 SQL 文本,从而创建对数据库中所有对象所做更改的日志。这允许您恢复到任何给定对象的先前版本 - 一种手动修订控制系统。
归档时间: |
|
查看次数: |
10229 次 |
最近记录: |