背景
今天,收到开发同学的通知“开发环节数据库部分表被重建了,导致数据丢失,开发受阻。”,帮忙查一下什么原因。
问题
为什么数据表被重建?为了解答这个问题,先要找到这个人,再问他的操作。
分析
1、 确认数据表被重建的时间点。
select * from dba_objects where owner='XX' order by created desc;
2、根据时间点找到对应操作的用户,如果你的数据库管理做得好,打开了必要的审计是可以做得到的。否则这一步就变得有不确定性了。
有开通审计的情况下,直接查:
select * from dba_audit_trail where timestamp between to_date('2021-04-26 14:10','yyyy-mm-dd hh24:mi') and to_date('2021-04-26 14:20','yyyy-mm-dd hh24:mi');
没有开通审计的情况下,直接查【这个要看运气,可能采样不到】:
select * from gv$active_session_history
where user_id=129 and sample_time between to_date('2021-04-26 14:10','yyyy-mm-dd hh24:mi') and to_date('2021-04-26 14:20','yyyy-mm-dd hh24:mi');
运气很好,我们找到记录:
3、根据上面到结果我们只要找到对应的machine 是登记在那为同学下面就可以了,但是运气不好,这个machine不在登记列表中。
4、 查找对应的ip , 根据对应的时间登陆到数据库主机,查看监听日志:
4.1 获取监听日志所在位置, 执行命令:lsnrctl status
Listener Log File /u01/....../listener/alert/log.xml
4.2 打开日志目录,找到对应时间和端口的日志,这时ip确定了。
<txt>26-APR-2021 14:15:17 * (CONNECT_DATA=(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=xxx))(SERVICE_NAME=xxx)) * (ADDRESS=(PROTOCOL=tcp)(HOST=172.x.x.x)(PORT=51506)) * establish * CBSD * 0
5、 确定ip后,找到网络和安全的同学,立刻找到对应的工位和人了。
6、数据恢复,如果时间短的话采用flashback 就可以,长了的话,由于开发环境没有备份,就只能重新做这部分的数据了。
总结
1、 权限要控制好
2、 必要的审计要打开。