[英]SQL Server 2005 Table Alter History
SQL Server是否保留任何歷史記錄來跟蹤表更改,例如列添加,刪除,重命名,類型/長度更改等? 我發現許多建議使用存儲過程手動執行此操作。 但是我很好奇SQL Server是否在任何系統表中都保留了這樣的歷史記錄? 謝謝。
在SQL Server 2005及更高版本中,您可以創建數據庫級觸發器來跟蹤表更改。 使用類似:
CREATE TRIGGER [YourDatabaseTrigger]
ON DATABASE
FOR DDL_DATABASE_LEVEL_EVENTS
AS
DECLARE @EventData xml
DECLARE @Message varchar(1000)
SET @EventData=EVENTDATA()
INSERT INTO YourLogTable
(EventDateTime,EventDescription)
VALUES (GETDATE(),SUSER_NAME()
+'; '+@EventData.value('(/EVENT_INSTANCE/ObjectType)[1]', 'varchar(250)')
+'; '+@EventData.value('(/EVENT_INSTANCE/ObjectName)[1]', 'varchar(250)')
+'; '+@EventData.value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','nvarchar(max)')
)
RETURN
GO
ENABLE TRIGGER [YourDatabaseTrigger] ON DATABASE
這是日志的一些簡單輸出:
select * from YourLogTable
EventID EventDateTime EventDescription
----------- ----------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------
1 2010-04-06 08:25:47.333 sa; TABLE; YourLogTable2; create table YourLogTable2 (EventID int primary key identity(1,1),EventDateTime datetime, EventDescription varchar(max))
2 2010-04-06 08:25:55.113 sa; TABLE; YourLogTable2; drop table YourLogTable2
(2 row(s) affected)
您可以將日志擴展為包含更多列,或者像在此簡單示例中那樣,僅轉儲其中的所有內容。
事務日志存儲所有這些信息,並且DBCC LOG命令應允許您查看它,但這是未記錄的命令。
DBCC LOG(<database name>[,{0|1|2|3|4}])
0 – Basic Log Information (default)
1 – Lengthy Info
2 – Very Length Info
3 – Detailed
4 – Full Example
句法:
DBCC log (MY_DB, 4)
默認情況下,此類信息不會保留在任何RDBMS中,因為它可能使所需的存儲需求增加幾個數量級,並可能嚴重降低性能。
觸發器可以為您完成此任務。 觸發器不被視為手動方法-觸發器是數據庫設計的核心部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.