[英]Activity log of database MS SQL Server
我有一個包含一百多個表的數據庫。 我不斷向現有表添加列(如果需要),我還添加了幾個新表。
現在我想查看我在過去3個月中所做的更改。 MS SQL Server 2012中是否有針對該特定數據庫的活動日志來跟蹤更改。
現在,你的選擇是有限的,你可以在下面嘗試,並檢查他們是否幫助你,現在..
1.如果啟用了審核,則可以跟蹤更改
要檢查,如果您啟用了審核,您可以使用以下查詢..
select * from sys.dm_server_audit_status
如果您尚未啟用審核,則可以啟用它,如下所示: SQL Server審核簡介 ..我不建議啟用審核,除非您需要捕獲除問題中提到的內容之外的其他內容
2.Default跟蹤還捕獲創建的表,但是當空間已滿時,這會使用,翻轉文件機制來覆蓋最后的文件,所以你可能運氣不好(因為你要求三個月的范圍),但試試這個: 什么我可以從SQL Server默認獲取事件信息嗎? 找出了解默認跟蹤提供的所有內容
我會使用此選項並嘗試備份這些文件,具體取決於它們匯總的時間(因為您只需要檢查表更改)
3.最后,最后一個選項是查詢Tlog
select * from fn_dblog(null,null) where [transaction name]='CREATE TABLE'
只有在Tlog備份超過三個月且您還需要還原它們時,上述Tlog選項才有效
也許這可以讓你在中途。 sys.objects
已創建和修改日期,但遺憾的是sys.columns
沒有。 但是,添加的最新列將具有更高的column_id。 我不知道你能夠輕松地選出已刪除的列。 請注意,修改日期可以反映列更改以外的更改。
select s.name [schema], o.name [table], o.modify_date [table_modify_date], c.column_id, c.name
from sys.schemas s
join sys.objects o on o.schema_id = s.schema_id
left join sys.columns c on c.object_id = o.object_id
where o.type = 'U' --user tables only
and o.modify_date >= dateadd(M,-3, getdate())
order by s.name, o.name, column_id;
為了在將來更輕松地進行此審計,您可以創建一個DDL觸發器,如果您使用類似SSDT數據項目的內容來管理更改,則會將所有架構更改記錄到表或源代碼管理中。
要檢查過去所有活動,您可以使用MSSQL Audit。 它是隨時跟蹤任何變化的最佳方式。 請檢查https://msdn.microsoft.com/en-us/library/cc280386.aspx
您可以使用DDL觸發器:
CREATE TRIGGER ColumnChanges
ON DATABASE
FOR ALTER_TABLE
AS
DECLARE @data XML
SET @data = EVENTDATA()
INSERT alter_table_log
(PostTime, DB_User, Event, TSQL)
VALUES
(GETDATE(),
CONVERT(nvarchar(100), CURRENT_USER),
@data.value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(100)'),
@data.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'nvarchar(2000)') ) ;
GO
如果您有任何備份可以追溯到3個月,比如在磁帶上,您可以將備份還原為另一個名稱或另一個服務器,然后通過第三方工具(Visual Studio,Devart Schema Compare等)運行架構比較。
否則,如Gameiswar和其他人所描述的那樣,在你需要之前搶先建立機制是唯一的方法。
此查詢將給出存儲過程的最后創建日期和修改日期:
select name,create_date,modify_date
from sys.procedures
order by modify_date desc
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.