关于sql2005数据库日志的有关问题
关于sql2005数据库日志的问题
比如有一个真实的表:table1(id int,name varchar(10),listdate,datetime),这个表的数据是:
id name listdate
1 a 2012-01-02
2 b 2012-03-04
3 c 2012-04-04
比如说,我写:delete from table1 where id=3,我把这行数据给删除了。
我怎么来查这一行数据是什么时候删除的,是用哪个登录用户进入sql2005的用户删除的,等等信息,不知道sqlserver2005有没有这个日志功能,可以直接查操作了什么表,什么时间操作等等信息的?
------解决方案--------------------
2005我不熟。2008的DDL触发器:
比如有一个真实的表:table1(id int,name varchar(10),listdate,datetime),这个表的数据是:
id name listdate
1 a 2012-01-02
2 b 2012-03-04
3 c 2012-04-04
比如说,我写:delete from table1 where id=3,我把这行数据给删除了。
我怎么来查这一行数据是什么时候删除的,是用哪个登录用户进入sql2005的用户删除的,等等信息,不知道sqlserver2005有没有这个日志功能,可以直接查操作了什么表,什么时间操作等等信息的?
------解决方案--------------------
2005我不熟。2008的DDL触发器:
IF EXISTS (SELECT * FROM sys.triggers WHERE parent_class_desc = 'DATABASE' AND name = N'DDLTriggertTrace')
DISABLE TRIGGER [DDLTriggertTrace] ON DATABASE
GO
USE [你的数据库名]
GO
/****** Object: DdlTrigger [DDLTriggertTrace] Script Date: 12/27/2012 10:59:48 ******/
IF EXISTS (SELECT * FROM sys.triggers WHERE parent_class_desc = 'DATABASE' AND name = N'DDLTriggertTrace')DROP TRIGGER [DDLTriggertTrace] ON DATABASE
GO
USE [你的数据库名]
GO
/****** Object: DdlTrigger [DDLTriggertTrace] Script Date: 12/27/2012 10:59:48 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [DDLTriggertTrace] ON DATABASE
--捕获存储过程、视图、表的创建、修改、删除动作
FOR CREATE_PROCEDURE, ALTER_PROCEDURE, DROP_PROCEDURE, CREATE_VIEW,
ALTER_VIEW, DROP_VIEW, CREATE_TABLE, ALTER_TABLE, DROP_TABLE
AS
BEGIN
SET NOCOUNT ON ;
DECLARE @EventData XML = EVENTDATA() ;--返回有关服务器或数据库事件的信息,以XML格式保存。
DECLARE @ip VARCHAR(32) = ( SELECT client_net_address
FROM sys.dm_exec_connections
WHERE session_id = @@SPID
) ;
INSERT AuditDB.dbo.DDLEvents
( EventType ,
EventDDL ,
EventXML ,
DatabaseName ,
SchemaName ,