如何自动识别数据库的变化

tshow 2005-03-24 03:45:30
现在面临一个需求:当数据库中的某几个库表(如A/B/C三表)发生变化时,通过触发器或其他的方式,随时记录其变化情况,将这种变化自动保存在表D中.
例如A表3月23日下午2:00,记录0022发生变化,字段name被修改
B表3月24日上午12:00,新加一条记录CBA,
这些变化被自动地记录在D表中,
通过D表的记录如:表名称 变化时间 变化内容 变化类型(修改/新增还是删除等),可以方便地知道数据库时刻的变化情况.
我想数据库日志里面应该具备这样的功能和信息,但是我不清楚如何查找这个信息,或者需要写一些脚本,请高人指点迷津,谢谢了!分多多地送!
...全文
181 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 元老 2005-03-27
  • 打赏
  • 举报
回复
--记录操作的示例

--创建记录的日志表
create table t_log(
id int identity(1,1) primary key,
工作站名 nchar(30) not null default host_name(),
操作员 sysname DEFAULT SUSER_SNAME(),
操作时间 datetime default getdate(),
事件类型 nvarchar(30),
参数 int,
执行的语句 nvarchar(255))
go

--演示用的数据表
create table test(id int)
go

--记录操作的触发器
create trigger t_update on test
for insert,update,delete
as
insert t_log(事件类型,参数,执行的语句) exec('dbcc inputbuffer(@@spid)')
go

--初始化表
insert into test values(1)
go

update test set id=100
go

--显示记录情况
select * from t_log
go

--删除演示环境
drop table t_log,test
yizhixiaozhu 2005-03-25
  • 打赏
  • 举报
回复
up
天地客人 2005-03-25
  • 打赏
  • 举报
回复
用触发器,是比较好的方法
郭大侠_ 2005-03-24
  • 打赏
  • 举报
回复
用log explorer 能查询吧!
chiwei 2005-03-24
  • 打赏
  • 举报
回复
不需要在程序里面啊,只要再数据库表上建触发器,正如 libin_ftsafe(子陌红尘) 所说的,就应该可以搞定了!
xjz2000 2005-03-24
  • 打赏
  • 举报
回复
用触发器实现
tshow 2005-03-24
  • 打赏
  • 举报
回复
在程序里面不行的,数据可能来自不同的应用系统,这些系统有些是很老的,无法更改了。新开发的还好说。我想DBMS本身肯定能满足这样的需求,只是我没有琢磨到简便的方法。
TigerSuper 2005-03-24
  • 打赏
  • 举报
回复
我的方法比较笨
我是在程序里做的
先记LOG 再执行
在执行sql语句前
tshow 2005-03-24
  • 打赏
  • 举报
回复
本身系统的日志是否包含这些信息呢?我想应该是有的,但是如何方便的取出来呢?
pbsql 2005-03-24
  • 打赏
  • 举报
回复
实在要那样记录就如一楼所说

但那样会使SQL系统的日志记录急剧增加,除非你要记录日志的表数据变化比较少
子陌红尘 2005-03-24
  • 打赏
  • 举报
回复
分别为A/B/C三表建立insert、update和delete触发器,记录触发事件至表D。

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧