It is possible and safe to monitor a table DML history on sqlserver

He is my test step:

In a test enviroument, I make a table "test"/

demo table:
create table test ( a nvharchar(100));

trigger record table:
CREATE TABLE [dbo].[DMLEvents](
[EventDate] [datetime] NOT NULL DEFAULT (getdate()),
[EventType] [nvarchar](64) NULL,
[EventDML] [nvarchar](max) NULL,
[EventXML] [xml] NULL,
[DatabaseName] [nvarchar](255) NULL,
[SchemaName] [nvarchar](255) NULL,
[ObjectName] [nvarchar](max) NULL,
[HostName] [varchar](64) NULL,
[IPAddress] [varchar](32) NULL,
[ProgramName] [nvarchar](255) NULL,
[LoginName] [nvarchar](255) NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

DML trigger for that table:
create or alter TRIGGER [dbo].[DMLTrigger_Sample]
ON [dbo].[test]
after INSERT,delete,update

AS
BEGIN
SET NOCOUNT ON;
SET ANSI_WARNINGS OFF;
DECLARE
@EventData XML = EVENTDATA();

DECLARE
@ip VARCHAR(32) =
(
SELECT client_net_address
FROM sys.dm_exec_connections
WHERE session_id = @@SPID
);

DECLARE
@SQL1 VARCHAR(MAX) =
(
select t.text
from sys.sysprocesses
cross apply sys.dm_exec_sql_text (sql_handle) t
where [email protected]@SPID
);

INSERT dbo.DMLEvents
(
-- EventType,
-- EventDML,
-- EventXML,
DatabaseName,
-- SchemaName,
ObjectName,
HostName,
IPAddress,
ProgramName,
LoginName
)
SELECT
-- @EventData.value(‘(/EVENT_INSTANCE/typedesc)[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)‘),
@SQL1,
HOST_NAME(),
@ip,
PROGRAM_NAME(),
SUSER_SNAME();
END

GO

We have to contine:

instance audit

CREATE SERVER AUDIT [OurAudit]
TO FILE
( FILEPATH = N‘C:\mssql_audit\‘
,MAXSIZE = 0 MB
,MAX_ROLLOVER_FILES = 2147483647
,RESERVE_DISK_SPACE = OFF
)
WITH
( QUEUE_DELAY = 1000
,ON_FAILURE = CONTINUE
,AUDIT_GUID = ‘747fc00d-2745-4705-9a94-6c9fb6dea9bc‘
)
ALTER SERVER AUDIT [OurAudit] WITH (STATE = ON)
GO

special database special table audit:

CREATE DATABASE AUDIT SPECIFICATION [OurAudit_test]
FOR SERVER AUDIT [OurAudit]
ADD (DELETE ON OBJECT::[dbo].[test] BY [public]),
ADD (INSERT ON OBJECT::[dbo].[test] BY [public]),
ADD (UPDATE ON OBJECT::[dbo].[test] BY [public])
WITH (STATE = ON)
GO

Here we begin:

(1) insert an demo date

insert into test values (‘ghgh‘)
select * from test
result is

a
ghgh

(2) select audit record:
select * from [DMLEvents]
----
SELECT DATEADD(hh, DATEDIFF(hh, GETUTCDATE(), CURRENT_TIMESTAMP), event_time )
as corrected_time,
action_id ,
session_server_principal_name,
server_instance_name ,
database_name ,
schema_name ,
object_name ,
statement ,
file_name FROM fn_get_audit_file( ‘C:\mssql_audit\OurAudit_*.sqlaudit‘ , DEFAULT , DEFAULT);

what can I see ?

原文地址:https://www.cnblogs.com/partition-liu/p/12318274.html

时间: 2024-11-18 19:24:23

It is possible and safe to monitor a table DML history on sqlserver的相关文章

replication crash safe

什么是主从复制的replication crash safe? 参数master_info_repository有两个值: FILE (对应的文件master.info),  or TABLE (对应的表mysql.slave_master_info) 参数relay_log_info_repository有两个值: FILE (对应的文件 relaylog.info), or TABLE (对应的表mysql.slave_relay_log_info) relay-log是sql_thread

【转】console.log 用法

转自http://www.cnblogs.com/ctriphire/p/4116207.html 大家都有用过各种类型的浏览器,每种浏览器都有自己的特色,本人拙见,在我用过的浏览器当中,我是最喜欢Chrome的,因为它对于调试脚本及前端设计调试都有它比其它浏览器有过之而无不及的地方.可能大家对console.log会有一定的了解,心里难免会想调试的时候用alert不就行了,干嘛还要用console.log这么一长串的字符串来替代alert输出信息呢,下面我就介绍一些调试的入门技巧,让你爱上co

Chrome 控制台console的用法(转)

下面我们来看看console里面具体提供了哪些方法可以供我们平时调试时使用. 目前控制台方法和属性有: ["$$", "$x", "dir", "dirxml", "keys", "values", "profile", "profileEnd", "monitorEvents", "unmonitorEvents&q

[转]Chrome 控制台console的用法

大家都有用过各种类型的浏览器,每种浏览器都有自己的特色,本人拙见,在我用过的浏览器当中,我是最喜欢Chrome的,因为它对于调试脚本及前端设计调试都有它比其它浏览器有过之而无不及的地方.可能大家对console.log 会有一定的了解,心里难免会想调试的时候用 alert 不就行了,干嘛还要用 console.log 这么一长串的字符串来替代 alert 输出信息呢,下面我就介绍一些调试的入门技巧,让你爱上 console.log 先的简单介绍一下chrome的控制台,打开chrome浏览器,按

你可能不知道console强大

阅读目录 写在前面 谷歌控制台Elements面板 查看元素上绑定的事情 样式操作 总况 console.log console.info console.error console.warn console.debug console.dirxml console.group和console.groupEnd console.assert console.count console.dir console.time和console.timeEnd console.profile和console

Chrome console(转)

阅读目录 写在前面 谷歌控制台Elements面板 查看元素上绑定的事情 样式操作 总况 console.log console.info console.error console.warn console.debug console.dirxml console.group和console.groupEnd console.assert console.count console.dir console.time和console.timeEnd console.profile和console

控制台console

先的简单介绍一下chrome的控制台,打开chrome浏览器,按f12就可以轻松的打开控制台 大家可以看到控制台里面有一首诗还有其它信息,如果想清空控制台,可以点击左上角那个来清空,当然也可以通过在控制台输入console.clear()来实现清空控制台信息.如下图所示 现在假设一个场景,如果一个数组里面有成百上千的元素,但是你想知道每个元素具体的值,这时候想想如果你用alert那将是多惨的一件事情,因为alert阻断线程运行,你不点击alert框的确定按钮下一个alert就不会出现. 下面我们

console深入理解

["$$", "$x", "dir", "dirxml", "keys", "values", "profile", "profileEnd", "monitorEvents", "unmonitorEvents", "inspect", "copy", "c

Corosync Pacemaker 高可用 Mariadb

1.安装前准备  高可用集群一般需要配置时间同步.基于主机名互相通信.ssh的互信通信,Corosync Pacemaker 仅需要配置时间同步.基于主机名互相通信即可: yum install chrony          #安装chrony vim /etc/chrony.conf      server172.16.0.1 iburst  #设置为可用的ntp服务器 systemctl restart chronyd     #启动服务 vim /etc/hosts