oracle-初级-分析表数据来源

当需要紧急提取一个系统后台数据但只知道表名时,通过分析表的数据来源,排除了前台导入、Linux crontab脚本,发现数据由存储过程每日更新。通过查询存储过程和数据库,确定数据变更依赖于一个未关联job的存储过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

场景:

某天某猿,突然接到消息,要求提取一个陌生系统的后台数据。

我们的需求是什么?

不知道!

什么时候要?

现在要!

然而从系统仅能获取到表名,通过分析表的数据来源:

第一种情况是前台导入的。

第二种情况是有一个存储过程每天的向表内汇数据。

第三种情况放到linux服务器上的sql脚本。(crontab任务)


目前的情报:

表名,数据库

衍生推论:

1、因为报表中内容分析得到 < 包含聚合函数 > ,推测直接导入的概率不大

2、因为报表中内容分析得到 <且每日更新 > ,推测可能有job任务

2、通过查询存储过程包含字段的sql语句找到性应的存储过程(注意大小写


结论:

是通过存储过程更改数据

没有对应的job

没有linux的crontab

不是前台导入的

是在一个job的存储过程中调用的该存储过程(额,有点绕)。



具体执行方案如下:

第一步:从数据库查看表的创建语句

select dbms_metadata.get_ddl('TABLE','EMP') from dual;

方法一:select * from tab;--(可以查看自己创建表或视图)
方法二:select * from user_tables;
方法三:select * from user_objects where object_type='TABLE' and object_name='';
方法四:select * from user_tab_columns;--(通过表名或字段名查找)

第二步:查询所有存储过程内是否包含该字段

select * from all_source where type='PROCEDURE' and upper(text) like '%EMP%'

第三步:查询shared_pool内操作语句

select * from v$sql where  upper(sql_text) like '%EMP%' order by application_wait_time desc

第四步:dba_hist_*查询语句

select * from dba_hist_sqltext where upper(sql_text) like '%EMP%';
select * from dba_hist_sqltext
select * from dba_hist_sqlstat
select * from dba_hist_snapshot

以上,欢迎补充

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值