读书人

sql server 2008创造个数据记录所有的

发布时间: 2012-12-16 12:02:32 作者: rapoo

sql server 2008创建个数据记录所有的库和表都进行过什么操作?
怎么创建sql server 2008创建个数据记录所有的库和表都进行过什么操作?保存所有对数据库进行操作的记录。然后以邮件的方式进行操作!
[最优解释]
建表....

USE [AuditDB]
GO

/****** Object: Table [dbo].[DDLEvents] Script Date: 11/20/2012 14:29:38 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[DDLEvents](
[EventDate] [datetime] NOT NULL,
[EventType] [nvarchar](64) NULL,
[EventDDL] [nvarchar](max) NULL,
[EventXML] [xml] NULL,
[DatabaseName] [nvarchar](255) NULL,
[SchemaName] [nvarchar](255) NULL,
[ObjectName] [nvarchar](255) NULL,
[HostName] [varchar](64) NULL,
[IPAddress] [varchar](32) NULL,
[ProgramName] [nvarchar](255) NULL,
[LoginName] [nvarchar](255) NULL
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

ALTER TABLE [dbo].[DDLEvents] ADD DEFAULT (getdate()) FOR [EventDate]
GO

[其他解释]
数据库级别的触发器?
[其他解释]
怎么操作啊?代码怎么写啊?
[其他解释]
记录操作倒可以的,对DDL操作,有DDL触发器:

IF  EXISTS (SELECT * FROM sys.triggers WHERE parent_class_desc = 'DATABASE' AND name = N'DDLTriggertTrace')
DISABLE TRIGGER [DDLTriggertTrace] ON DATABASE

GO


/****** Object: DdlTrigger [DDLTriggertTrace] Script Date: 11/20/2012 13:03:08 ******/
IF EXISTS (SELECT * FROM sys.triggers WHERE parent_class_desc = 'DATABASE' AND name = N'DDLTriggertTrace')DROP TRIGGER [DDLTriggertTrace] ON DATABASE
GO



/****** Object: DdlTrigger [DDLTriggertTrace] Script Date: 11/20/2012 13:03:08 ******/
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 ,
ObjectName ,
HostName ,
IPAddress ,
ProgramName ,
LoginName
)
SELECT @EventData.value('(/EVENT_INSTANCE/EventType)[1]',
'NVARCHAR(100)') ,
@EventData.value('(/EVENT_INSTANCE/TSQLCommand)[1]',
'NVARCHAR(MAX)') ,
@EventData ,
DB_NAME() ,
@EventData.value('(/EVENT_INSTANCE/SchemaName)[1]',
'NVARCHAR(255)') ,
@EventData.value('(/EVENT_INSTANCE/ObjectName)[1]',
'NVARCHAR(255)') ,
HOST_NAME() ,


@ip ,
PROGRAM_NAME() ,
SUSER_SNAME() ;
END

GO

SET ANSI_NULLS OFF
GO

SET QUOTED_IDENTIFIER OFF
GO







对数据操作,有CDC:http://blog.csdn.net/dba_huangzj/article/details/8130448
[其他解释]
这我都执行完了。如何操作查看啊?大xia
[其他解释]
AuditDB.dbo.DDLEvents
这是个表,看表去
[其他解释]
另外触发器要放到你希望监控的那个库上

读书人网 >SQL Server

热点推荐