如何获取自某个时间以来改动过的记录?

gigi09 2009-08-07 08:43:55
各位GG:

我现在想找到自某个时间以来,表中发生变化的数据(增,删,改),请问Oracle有没有什么功能可以实现?

比如,有没有什么类似伪列,伪表之类的,自动标记记录发生改变的时间 ? 这样我就可以在select中加上 where time > LastUpdate

嘻嘻~~~我对ORACLE一窍不通,还望各位GG帮忙~~~~

...全文
87 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
majy 2009-08-07
  • 打赏
  • 举报
回复
1.建立物化视图日志
CREATE MATERIALIZED VIEW LOG ON emp
WITH PRIMARY KEY
INCLUDING NEW VALUES;

update emp set comm = 25 where empno = 7369;

inert into emp ......

select * from MLOG$_EMP

9iSQL> select * from MLOG$_EMP;

EMPNO SNAPTIME$ D O CHANGE_VECTOR$$
---------- --------- - - ------------------------------
8888 01-JAN-00 I N FEFF
7369 01-JAN-00 U U 8000
7369 01-JAN-00 U N 8000

其中D列是DML Type,意思就是: I=insert U=update D=delete


inthirties 2009-08-07
  • 打赏
  • 举报
回复
oracle 提供audit功能,不过需要你的数据已经启动了audit trail才行。

你可以先了解oracle的审计这块的知识,简而言之,Oracle是根据你的审计策略,把相关的操作记录到审计的动态表里或者是OS的文件里。和你的audit_trail的配置,以及audit strategy
llt0902 2009-08-07
  • 打赏
  • 举报
回复
oracle 里面的触发器可以实现这样的功能。
creat or replace trigger tr_update_delete_insert
after update or delete or insert on A // A表 你要删除的表
for each row
declare
daytime var;
begin
select to_char(sysdate,'YYYYMMDD HH24:MM:SS') into daytime from dual;
if daytime >'20090909 09:09:09' then
insert into B (name,add) values(:old.name,:old.add);// B表的列名跟A表一样,日志
end if;
end
——————
没有编译
gigi09 2009-08-07
  • 打赏
  • 举报
回复
不是吧~~~~~~~(>_<)~~~~ 继续期待解答~~~
cosio 2009-08-07
  • 打赏
  • 举报
回复
只能在程序端增加相关功能,判断增加,删除,更改!然后回写到数据库中,才OK
yurui05 2009-08-07
  • 打赏
  • 举报
回复
期待答案...
小灰狼W 2009-08-07
  • 打赏
  • 举报
回复
这个应该没办法
majy 2009-08-07
  • 打赏
  • 举报
回复
呵呵,你自己这里建个基表,每天晚上定时做数据比对,把日期记录下来
gigi09 2009-08-07
  • 打赏
  • 举报
回复
感谢各位GG的解答,不过如果我只有对数据库的查询权限,那该怎么办呢?

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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