oracle开发人员误删表的操作及恢复
2016-04-03 21:34
513 查看
记一次生产库上开发人员误删表的事故,某数据库开发人员用存储过程想删除某用户下的所有SC_A开头的表,具体操作如下:
但这里like查询所有符合SC_A开头的表,就会有问题了,多了一个SCAAA的表出来,因为”like SC_A%” 中的”_”也是一个替代符,代替一个字符了,所以SCAAA这个表被误查询出来,也就被误删除了。
2) 执行存储过程
3) 再次查询,发现SCAAA和SC_AAA两个表都被删除了
进行闪回操作,把误删的表闪回到删除之前
再次查询scaaa表已经被已经成功闪回,可以使用了
2) 如果没有启动回收站,可以使用logmnr找出drop的时间和scn号
可以针对scn或者时间使用备份进行恢复操作,这里不再做具体说明,可依据备份的具体情况进行恢复。
1、误删除表的sql及原因
这里以删除的条件 UPPER(REPLACE('SC_', '_', '_A')) ||'%' 来查询貌似是正常的SC_A% 没有问题但这里like查询所有符合SC_A开头的表,就会有问题了,多了一个SCAAA的表出来,因为”like SC_A%” 中的”_”也是一个替代符,代替一个字符了,所以SCAAA这个表被误查询出来,也就被误删除了。
2、下面演示一下误删除表的操作
1) 下面是开发人员的存储过程(这里测试只截取了误删除表的操作),循环删除当前用户(这里用scott用户进行测试) 的SC_A开头的所有表2) 执行存储过程
3) 再次查询,发现SCAAA和SC_AAA两个表都被删除了
3、 误删除表的恢复过程
1) 查看回收站,查找被误删的表进行闪回操作,把误删的表闪回到删除之前
SQL> flashback table scott.scaaa to before drop; Flashback complete.
再次查询scaaa表已经被已经成功闪回,可以使用了
2) 如果没有启动回收站,可以使用logmnr找出drop的时间和scn号
添加日志,添加当时进行删除操作的时间相应的在线日志或者归档日志(添加第一个日志需要dbms_logmnr.new) SQL>exec dbms_logmnr.add_logfile(logfilename=>'/u01/app/oracle/product/11.2.0/db_1/dbs/arch1_21_906569321.dbf',options=>dbms_logmnr.new); PL/SQL procedure successfully completed SQL> exec dbms_logmnr.add_logfile(logfilename=>'/u01/app/oracle/product/11.2.0/db_1/dbs/arch1_22_906569321.dbf',options=>dbms_logmnr.addfile); PL/SQL procedure successfully completed 开始分析 SQL>exec dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog); PL/SQL procedure successfully completed 查询logmnr分析后的内容(删除的sql语句可以查询出来) SQL>select scn,timestamp,sql_redo from v$logmnr_contents where sql_redo like'drop%'; SCN TIMESTAMP SQL_REDO ---- ------ ------------------- 293893 2016/3/16 1 drop table SCAAA AS "BIN$LiPJzHgpwlngU6j9qMAdIg==$0" ; 293901 2016/3/16 1 drop table SC_AAA AS "BIN$LiPJzHgqwlngU6j9qMAdIg==$0" ;
可以针对scn或者时间使用备份进行恢复操作,这里不再做具体说明,可依据备份的具体情况进行恢复。
相关文章推荐
- Oracle SQL 查询优化.Part1
- Oracle学习笔记五 --- 表查询
- Oracle学习笔记四 --- 变量及表管理
- Oracle学习笔记三 --- 用户管理
- Oracle dataguard之备库切换(failover)
- Oracle-05-SQL语句概述、分类&SQL*PLUS概述(初识insert,desc,list,r,del,a,c,n等命令)
- Oracle dataguard之主备库切换(switchover)
- oracle ocp 学习day6总结(oracle 启动过程与参数文件)
- oracle ocp 学习day5总结(oracle 体系结构基础)
- oracle ocp 学习day4总结(对象的基本操作)
- oracle ocp 学习day3总结(sql基础)
- oracle ocp 学习day2总结(sql基础)
- oracle job
- UDEV SCSI Rules Configuration for ASM in Oracle Linux 5, 6 and 7
- Oracle Outline总结
- ORACLE导出存储过程SQL至文件
- 使用Oracle11g自带的SQL Developer报错:Unable to find a Java Virtual Machine
- Oracle中count()函数 注意点
- Oracle ORA-12541:TNS:no listener错误解决方法
- Oracle基础学习1--Oracle安装