如何在oracle数据库中查找近期被修改的表

近期oracle数据库中,有些数据被改动,我想在指定的时间内查找被修改的表,该如何操作... 近期oracle数据库中,有些数据被改动,我想在指定的时间内查找被修改的表,该如何操作 展开
 我来答
小笨色熊
推荐于2017-09-22 · TA获得超过558个赞
知道小有建树答主
回答量:401
采纳率:0%
帮助的人:0
展开全部
方法一:FLASH BACK
针对情况是:修改表的时间离你发现的时间不远。如果过了几天了基本上也就不能查到了。9i只能回闪查询。10G支持的功能更强大。
例子:select * from scott.emp as of timestamp (systimestamp -interval '10'second);
可以参考文档:http://warehouse.itpub.net/post/777/397272

方法二:LOG MINER
针对情况是:只要数据库在归档方式就可以对这些日志进行分析,找到你那个时间点对数据库中表的操作。

操作步骤大概如下:
-----------------日志挖掘------------------------------
set directory:设置init.ora中的参数utl_fie_dir
alter system set utl_file_dir='/u01' scope=spfile;

begin
sys.dbms_logmnr_d.build('tanyunlin.log','/u01');
end;
/
添加日志文件列表
exec dbms_logmnr.add_logfile(logfilename => 'C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\REDO02.LOG',options => dbms_logmnr.new)
添加一个新的日志文件
execute dbms_logmnr.add_logfile(LogFileName => 'C:\oracle\product\10.1.0\oradata\orcl\REDO02.LOG',Options => dbms_logmnr.ADDFILE);
运行LOGMINER分析
1.使LOGMINER使用当前数据库的数据字典(OPEN状态、只用于跟踪DML操作)
exec dbms_logmnr.start_logmnr(options => dbms_logmnr.dict_from_online_catalog)
exec dbms_logmnr.start_logmnr(dictfilename=>'/u01/tanyunlin.log',options =>dbms_logmnr.ddl_dict_tracking)
2.无限制条件,即用数据字典文件对要分析的日志文件所有内容做分析
execute dbms_logmnr.start_logmnr(DictFileName => '/u01/tanyunlin');

3.带限制条件,可以用scn号或时间做限制条件,也可组合使用
execute dbms_logmnr.start_logmnr(startTime => to_date('20070228100000','yyyy-mm-dd hh24:mi:ss'),
endTime => to_date('20070228150000','yyyy-mm-dd hh24:mi:ss'),DictFileName => 'G:\oracle\logs\dict.ora');
查看日志分析结果
col username for a8
col sql_redo for a60
select username,to_char(timestamp,'yyyymmdd hh24:mi:ss'),sql_redo from v$logmnr_contents where sql_redo like '%delete%';
结束LOGMINER
exec dbms_logmnr.end_logmnr;
千锋教育
2015-12-18 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
展开全部
  1、select uat.table_name from user_all_tables uat 该SQL可以获得所有用户表的名称
  2、select object_name, created,last_ddl_time from user_objects 该SQL可以获得所有用户对象(包括表)的创建和最后修改时间

  综合以上SQL,总结了如下语句:

  代码如下:
select uat.table_name as 表名,(select last_ddl_time from user_objects where object_name = uat.table_name ) as 最后修改日期
from user_all_tables uat

  通过该语句,可以得到所有表的最后修改时间。(大家可以根据实际情况在该SQL后面加上相应的条件表达式)

  通过对查询结果中最后修改时间的降序排列,就可以知道那些表的结构修改过了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
大话残剑
2008-05-31 · TA获得超过2217个赞
知道大有可为答主
回答量:1137
采纳率:56%
帮助的人:689万
展开全部
一般通过应用实现。
也可以用触发器或者用logmnr分析归档日志。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帐号已注销
2015-10-24 · 超过31用户采纳过TA的回答
知道答主
回答量:111
采纳率:100%
帮助的人:42.5万
展开全部
user_tab_modifications
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友7aecb05
2008-06-01 · TA获得超过807个赞
知道小有建树答主
回答量:242
采纳率:0%
帮助的人:208万
展开全部
用LOG MINER
你也可以用闪回FLASH BACK。两个东西针对的东西不同,一个是针对REDO,一个是UNDO
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式