Sql-Server
誰更改/修改了 SSMS 2005 或 2008 中的儲存過程?
可能重複:
我有一個昨晚深夜修改過的儲存過程,早上的大部分時間都在跟踪這個變化。
基本上沒有人承認這一變化,所以我試圖弄清楚如何找到誰修改了這個儲存過程。我已經在網上研究瞭如何找到這個,但看起來這是不可能的?
我想如果有人知道如何做到這一點,那就是這裡的某個人。
我確實試過這個。:
“在 SSMS 中,右鍵點擊伺服器名稱,選擇報告/標準報告/架構更改歷史記錄。” –> 這並沒有給我任何東西,但我至少能夠執行它,這為我提供了時間。
select name, create_date, modify_date from sys.procedures where name = 'mystoredprocedure'
感謝您的任何建議或指導。
我知道這並不能解決您目前的問題,但是主動管理此類事件的最佳方法可能是創建一個 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;
此特定 DDL 觸發器不會記錄某些事件,例如
UPDATE STATISTICS
、INDEX REBUILD
、 ANDINDEX REORGANIZE
。我們對記錄這些事件不感興趣,因為這些事件發生在我們每晚的數據庫維護任務中,因此會排擠開發人員所做的有意義的更改。此特定觸發器的優點是它擷取事件的實際 SQL 文本,從而創建對數據庫中所有對象所做更改的日誌。這允許您恢復到任何給定對象的先前版本 - 一種手動修訂控制系統。