SQL Server是否維護任何歷史記錄來跟蹤列更改,如列添加,刪除,重命名,類型/長度更改等?我發現很多建議使用存儲過程手動執行此操作。但我很好奇,如果SQL Server在任何系統表中保留這樣的歷史記錄?謝謝。SQL Server 2005表變更歷史記錄
2
A
回答
1
這種信息在默認情況下不會保留在任何RDBMS中,因爲它可能會將所需的存儲需求增加數量級,並且可能會嚴重降低性能。
觸發器可以爲你做到這一點。觸發器不被視爲手動方法 - 它們是數據庫設計的核心部分。
2
事務日誌存儲所有這些信息,並且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)
3
在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()
+'; '[email protected]('(/EVENT_INSTANCE/ObjectType)[1]', 'varchar(250)')
+'; '[email protected]('(/EVENT_INSTANCE/ObjectName)[1]', 'varchar(250)')
+'; '[email protected]('(/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)
你可以擴展日誌包含更多的列,或者只是一個內傾倒一切都像在這個簡單的例子。
相關問題
- 1. 檢查SQL Server 2005中表上的使用歷史記錄
- 2. 使用觸發器的SQL Server 2005歷史記錄表
- 3. sql 2005鏡像警報歷史記錄
- 4. 將SQL Server點歷史記錄表遷移到歷史記錄表
- 5. 如何在SQL Server中的歷史記錄表中存儲歷史記錄
- 6. 更改歷史記錄表
- 7. SQL Server 2005中查詢歷史
- 8. SQL歷史記錄表和觸發器
- 9. SQL Server 2000如何查找表/行的事務歷史記錄
- 10. SQL Server:爲審計/歷史記錄創建觸發器表
- 11. SQL Server:我如何從歷史記錄表中獲取數據?
- 12. MS SQL Server CDC清理作業到歷史記錄表
- 13. GWT歷史記錄:歷史記號
- 14. 在JGit中記錄變更歷史記錄
- 15. T-SQL確定歷史記錄表中的狀態更改
- 16. SQL Server 2005表變量更新問題
- 17. 從SQL Server 2012管理工作室獲取歷史記錄
- 18. 在SQL Server中使用StoredProcedure保存歷史記錄
- 19. 的SQL Server 2012的工作歷史記錄
- 20. SQL有條件返回歷史記錄
- 21. Linux下的SQL * Plus歷史記錄
- 22. LDAP登錄歷史記錄
- 23. 貝寶Sandbox歷史記錄重定向到REAL歷史記錄
- 24. 銷售訂單歷史記錄表
- 25. 不使用GUI更改SQL代理歷史記錄屬性
- 26. 摺疊Mercurial變更集而不改變歷史記錄
- 27. Team Foundation Server:如何查看更改歷史記錄
- 28. TSQL查詢歷史記錄表MSSQL2008r2
- 29. 分區歷史SQL Server
- 30. HTML5 canvas更改的歷史記錄
謝謝KM。但我已經嘗試ddl觸發器哪些工作正常,如果只有新列被添加到表中,可以很容易地使用日誌信息。但是,我認爲在日誌中使用TSQL命令來進行重新命名是一件很乏味的工作,例如重命名具有外鍵引用的列或更改varchar類型列的長度等。存儲很快會成爲「Unreason」的「問題」說過。 – Kayes 2010-04-07 10:50:43