Oracle误删除数据和表的恢复办法

更新时间:2023-06-25 15:58:35 阅读: 评论:0

Oracle误删除数据和表的恢复办法
在⼯作中我们操作数据库的时候经常会发⽣⼀个不该发⽣的问题:⽤户意外的删除⼀个⾮常重要的表或者是表中的数据⽽且没有备份,需要尽快的恢复,以下就是解决的办法:
主要是利⽤Oracle回收站的闪回特性oracle 回收站recyclebin是10g才有的新特性,当我们drop table cube_scope 【purge】时,如果不指定purge时,系统只是将这个表重命名为BIN$开头的名称,并在数据字典中修改了相关数据,表所占⽤的物理空间并没有真正的回收,此时所占⽤的空间还是原来的表空间,当表空间不够⽤时,ORACLE会跟据DROPSCN#⾃动进⾏逐个清理回收站中对像所占⽤的空间,10g默认是打开回收站功能的。
⼀、delete 数据误删除
1、删除数据之后表结构没有变化
ha0123直接使⽤表闪回,表闪回要求⽤户必须要有flash any table权限
先确定删除数据的时间(在删除数据之前的时间就⾏,不过最好要具体到删除数据的时间点)
alter  table 表名 enable row  movement    //开启⾏移动功能
flashback table 表名 to timestamp to_timestamp('删除时间点','yyyy-mm-dd hh24:mi:ss')
孕妇能吃提子吗
//恢复数据到删除时间点之前的状态
Alter table 表名 disable row movement      //关闭⾏移动功能(⼀定不能忘记)
2、删除数据之后表结构发⽣了变化
lect * from 表名 as of timestamp to_timestamp('删除时间点','yyyy-mm-dd hh24:mi:ss')老舍哪里人
//找出被删除的数据
inrt into 表名 (lect * from 表名 as of timestamp to_timestamp('删除时间点','yyyy-mm-dd hh24:mi:ss'));    //把删除的数据重新插回原表,但注意主键不要重复
⼆、drop命令删除表
由于oracle在删除表时,没有直接清空表所占的块,oracle把这些已删除的表的信息放到了⼀个虚拟容器“回收站”中,⽽只是对该表的数据块做了可以被覆写的标志,所以在块未被重新使⽤前还可以恢复。
查看回收站中的表
lect object_name,original_name,partition_name,type,ts_name,createtime,droptimefrom recyclebin;
可以看到被删除的表在回收站被命名为’BIN$0z+2cCjdSjqkx1nsP/re7w==$0’
flashback table 原表名 to before drop (rename to 新表名)  //闪回原表(重命名新表名)
或者
flashback table "回收站中的表名(如:BIN$0z+2cCjdSjqkx1nsP/re7w==$0)" to before drop (rename to 新表名)  //⽤户可能会经常多次创建和删除同⼀个表就需要找到回收站的表名闪回相应的表版本
但是⽤这种⽅法只是把我们的表给找回来了,我们的索引和约束都没有回来。所以我们⼀定要重新建⽴索引和约束。如果
oracle 闪回功能还可以闪回整个数据库,使数据库回到过去某⼀状态。
alter databa flashback on
flashback databa to scn SCNNO;    //使⽤SCN号闪回或者使⽤时间戳闪回
flashback databa to timestamp to_timestamp('2007-10-25 12:00:00','yyyy-mm-dd hh24:mi:ss');
如果想要不经过回收站直接删除并释放所占空间
体育强国drop table 表名 purge  //此命令相当于truncate+drop 操作,⼀般不建议这么做。
⼿⼯清除回收站中的对象。
prug table 表空间.表名    //清除具体的对象
prug tablespace  表空间    //清除指定的表空间对象
purge tablespace 表空间 ur ⽤户名  //删除表空间指定⽤户下的所有对像
purge recyclebin    //删除回收站
purge dba_recyclebin    //删除全体⽤户在回收站的数据
ORACLE空间利⽤原则
1. 使⽤现有的表空间的未使⽤空间
2. 如果没有了空闲空间,则检查回收站,对于回收站的对象按照先进先出的原则,对于最先删除的对象,oracle在空间不⾜之时会最先从
回收站删除以满⾜新分配空间的需求
3. 如果回收站也没有对象可以清理,则检查表空间是否⾃扩展,如果⾃扩展则扩展表空间,然后分配新空间
4.如果表空间⾮⾃扩展,或者已经不能⾃扩展(到达最⼤限制),则直接报表空间不⾜错误,程序终⽌
* drop tablespace :会将recyclebin中所有属于该tablespace的对像清除
* drop ur :会将recyclebin中所有属于该⽤户的对像清除下巴长痘怎么回事
* drop cluster : 会将recyclebin中所有属于该cluster的成员对像清除
* drop type : 会将recyclebin中所有依赖该type对像清除
另外还需要注意⼀种情况,对像所在的表空间要有⾜够的空间,不然就算drop掉经过recyclebin由于空间不⾜oracle会⾃动删除的哦(切记)!
三、truncate删除数据
网络监控工具1、使⽤闪回特性
因为truncate不是DML语句,是DDL语句,不能使⽤闪回查询的⽅式恢复表数据,这⾥介绍⼀种通过flashback databa(闪回整个数据库)
的⽅式恢复数据的⽅法。在11g下,可以在mount和open模式来执⾏该命令
lect status from v$instance;  查看数据库模式
alter databa open;  //或者是mount
alter databa flashback on
flashback databa to timestamp to_timestamp('2007-10-25 12:00:00','yyyy-mm-dd hh24:mi:ss');
在执⾏完flashback databa 命令之后,可以使⽤多种⽅式修复数据库:
1). 直接alter databa open retlogs 打开数据库,指定scn 或者timestamp 时间点之后产⽣的数据统统丢失。
减肥少吃什么
2). 先执⾏alter databa open read only 命令以read-only 模式打开数据库,查看恢复后的数据是否满⾜要求,如果满⾜要求,
则通过retlogs打开数据库,否则,重新执⾏flashback 操作。
3). 先执⾏alter databa open read only 命令以read-only 模式打开数据库,然后⽴刻通过逻辑导出的⽅式将误操作涉及表的数据导出,再执⾏recover databa 命令以重新应⽤数据库产⽣的redo,将数据库修复到flashback databa 操作前的状态,然后再通过逻辑导⼊的⽅式,将之前误操作的表重新导⼊,这样的话对现有数据的影响最⼩,不会有数据丢失。
这⾥演⽰第⼆种⽅法灵芝孢子粉用法
alter databa open read only;
查看数据是否符合要求不符合继续flashback databa to timestamp to_timestamp
如果符合
startup mount force;
alter databa open retlog;
第三种⽅法
闪回之后 alter databa open read only
exp  ⽤户名/⽤户密码 file=t.dmp tables=表名;  //导出被truncate表的数据如果不熟悉exp命令的话,可以去看shutdown immediate  //重启数据库恢复到闪回之前的时间点
startup mount;
recover databa;
alter databa open;
然后导⼊刚才导出的数据
imp ⽤户名 /密码  file=t.dmp tables=表名 ignore=y;
2 、使⽤FY_Recover_Data 包
FY_Recover_Data

本文发布于:2023-06-25 15:58:35,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1054457.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据   删除   回收站   空间   数据库   闪回   没有
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图