新客网WWW.XKER.COM:致力做中国最专业的网络学院!
学院: 操作系统 - 网络应用 - 服务器 - 网络安全 - 工具软件 - 办公软件 - Web开发 - 数据库 - 网页设计 - 图形图像 - 媒体动画 - 硬件学堂 - 存储频道 - QQ专区
您的位置:首页 > 软件开发 > 数据库 > 数据库综合 > 正文:轻松掌握:触发器生成数据库表操作日志

轻松掌握:触发器生成数据库表操作日志

新客网 XKER.COM 2007-08-02 来源: xiaoyuer 收藏本文

作为一名数据库管理员,你尽力以各部门熟知的不同格式,向各部门提供它们所需要的数据。你通常将MS Excel格式的数据递交到会计部门,或将数据以HTML报表的形式呈现给普通用户。你们的系统安全管理员们则习惯于用文本阅读器或者事件查看器来查看日志。本文将介绍如何使用触发器,把DML(数据操作语言)对数据库中的特定数据表的改动记录下来。注:下列例子为Insert型触发器,不过改成Delete/Update型的触发器也很容易。

 

操作步骤首先让我们在Northwind数据库内创建一个简单表。

 

create table tablefortrigger
( 
 track int identity(1,1) primary key, 
 Lastname varchar(25), 
 Firstname varchar(25) 
)

 

创建好这个数据表后,添加一个标准message到master数据库的sysmessages数据表中。注意,我所添加的是一个参变量,用以接受一个字符值,它将被输出显示给管理员们。通过设置@_with_log参数为true,我们包管相关结果被发送到事件日志。

 

 

sp_addmessage 50005, 10, '%s', @with_log = true

 

现在我们创建这条用有意义的信息填充的消息。下面的信息将填充这条消息,并且记录到文件中:

 

·操作的类型(插入)。

 

·受到影响的数据表。

 

·改动的日期与时间。

 

被该语句插入的全部字段。 下面的这个触发器用预定义值(1~3个字符)创建一个字符串,该预定义值位于inserted数据表中。(这个inserted数据表驻留在内存中,它容纳被插入到触发器所在数据表的记录行)。触发器连接这些值并放到一个@msg变量。然后这个变量被传送到raiserror函数,该函数将它写到事件日志中。

 

 

Create trigger TestTrigger on 
tablefortrigger 
for insert 
as
--声明储存消息的变量 
Declare @Msg varchar(8000) 
--将"操作/表名/日期时间/插入字段"赋与消息
set @Msg = 'Inserted | tablefortrigger | ' 
+ convert(varchar(20), getdate()) + ' | ' 
+(select convert(varchar(5), track) 
+ ', ' + lastname + ', ' + firstname 
from inserted) 
--产生错误发送给事件查看器。
raiserror( 50005, 10, 1, @Msg)

运行以下语句对触发器进行测试,然后查看事件日志:

 

 

Insert into tablefortrigger(lastname, firstname) 
Values('Doe', 'John')

既然我们已经有办法写入事件日志了,那么让我们修改一下触发器,将数据写到一个文本文件中。这次改动还须添加另一个变量@CmdString,以及使用扩展储存过程xp_cmdshell。

共2页: 上一页 [1] [2] 下一页
收藏】 【评论】 【推荐】 【投稿】 【打印】 【关闭
发表评论
要记得去论坛讨论,点击注册新会员匿名评论
评论内容:不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
阅读排行
随机推荐
实用信息推荐