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. SQL Server:为审计/历史记录创建触发器表
- 7. SQL Server 2000如何查找表/行的事务历史记录
- 8. GWT历史记录:历史记号
- 9. SQL Server 2005表变量更新问题
- 10. 从SQL Server 2012管理工作室获取历史记录
- 11. 在SQL Server中使用StoredProcedure保存历史记录
- 12. SQL有条件返回历史记录
- 13. Linux下的SQL * Plus历史记录
- 14. LDAP登录历史记录
- 15. 不使用GUI更改SQL代理历史记录属性
- 16. TSQL查询历史记录表MSSQL2008r2
- 17. Team Foundation Server:如何查看更改历史记录
- 18. 更改Javascript的历史记录
- 19. 用于显示数据更改历史记录的SQL查询
- 20. 海量视图与历史记录表
- 21. MySQL - 从历史记录表中获取历史“快照”
- 22. 将更改历史记录保存到SQL Server 2008中的XML字段中
- 23. Sql Server更改数据捕获:添加列时保留历史记录?
- 24. 分区历史SQL Server
- 25. 从SQL Server 2005 Express Edition导出记录
- 26. 活动记录审计历史记录
- 27. iPhone通话记录/历史记录
- 28. 索引列表历史记录
- 29. 用jQuery清除表单历史记录
- 30. 将历史记录插入新表
谢谢KM。但我已经尝试ddl触发器哪些工作正常,如果只有新列被添加到表中,可以很容易地使用日志信息。但是,我认为在日志中使用TSQL命令来进行重新命名是一件很乏味的工作,例如重命名具有外键引用的列或更改varchar类型列的长度等。存储很快会成为“Unreason”的“问题”说过。 – Kayes 2010-04-07 10:50:43