簡體   English   中英

數據庫MS SQL Server的活動日志

[英]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

您可以從數據庫上的右鍵菜單運行報告:

在此輸入圖像描述

在這個下拉列表中有幾個報告可能會讓您感興趣。 或者您可以創建一個僅包含所需信息的自定義報告。

我的架構報告只能追溯到2016年9月3日,但我有1000多個表,其中包含60多列,每天都有許多更新。 你的可能會更進一步。

您可以使用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和其他人所描述的那樣,在你需要之前搶先建立機制是唯一的方法。

通過SQL Server Management Studio中的“生成腳本...”任務選項獲取元數據定義的快照。

在此輸入圖像描述

將生成的腳本文件存儲在名稱引用當前日期的文件夾中。 一旦完成此操作,WinDiff可用於突出顯示任意兩個快照之間所做的數據庫更改。 仔細一致地選擇“生成腳本”選項,以便基於時間的比較更有益。

此查詢將給出存儲過程的最后創建日期和修改日期:

select name,create_date,modify_date
from sys.procedures
order by modify_date desc

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM