问题:
oracle数据库的表被drop,需要恢复数据。
背景:
部门项目的数据库是通过sql脚本维护,谁添加或修改了表就将修改添加到一个维护数据库的sql文件里,在升级代码时顺便执行脚本进行数据库更新。所以sql文件需要可以重复执行而不丢失数据。不过新来的小伙子忘记了这个细节,为了更新表结构,添加字段,先把表drop掉了,然后重新创建。这样导致表中的客户数据都丢失了,所以领导赶紧找我想办法恢复。
本人也是第一次遇到这个情况,所以组长找了另外一位同事来帮忙,同事直接给了个网址,让我自己尝试:网页地址 。可能是因为表已经被再次drop和新建过,所以上面的方法都不成功。
后来自己谷歌到了另外一个网页:网页地址 ,觉得这里提供的第二种从回收站恢复的方式可行,最后使用此方法成功恢复了数据。
成功恢复数据的核心步骤:
第一步,允许行物理移动:
ALTER TABLE tableName ENABLE row movement ;
第二步,首先需要查询user_table视图找到被删除的表:
select object_name,original_name,type,droptime from user_recyclebin;
此时看到的object_name就是表被删除后oracle回收站对应的真正名字。
第三步,恢复数据:
flashback table "BIN$j5bB++jdROGUxkdCoH+msA==$0" to before drop rename to t_table_name;
根据回收站中的表名称将其恢复,数据回到t_table_name表中。