首页 > 数据库 >Oracle 恢复删除数据的方法

Oracle 恢复删除数据的方法

时间:2023-11-08 09:13:33浏览次数:47  
标签:name 删除 恢复 drop timestamp Oracle table 回收站

误删oracle数据库中的数据,在不考虑全库备份和利用归档日志情况,怎样快速恢复数据呢?

下面介绍3种方法。

1. 利用oracle提供的闪回方法进行数据恢复,适用于delete删除方式

首先获取删除数据的时间点:

select * from v$sql where sql_text like '%table_name%' ;
SELECT * FROM v$sql WHERE SQL_TEXT LIKE 'delete%ooag%'

根据结果中的sql_text内容,找到delete执行语句对应的删除时间点,执行下面语句查询出删除的数据。

select * from table_name as of timestamp to_timestamp(‘删除时间点’,‘yyyy-mm-dd hh24:mi:ss’)
where (删除时的条件)

检查数据无误后,执行下面操作,将数据插回原表中。注意主键不重复

insert into table_name
select * from from table_name as of timestamp to_timestamp(‘删除时间点’,‘yyyy-mm-dd hh24:mi:ss’)
where (删除时的条件)

2. 利用oracle虚拟回收站功能
原理是因为oracle数据库在删除表时会将删除信息存放于某虚拟回收站中而非直接清空,在此种状态下数据库标记该表的数据库为可以复写,所以在该块未被重新使用前依然可以恢复数据。该方法多用于drop删除

首先查询123user_table==视图,找到被删除的表:

select table_name,dropped from user_tables;
select object_name,original_name,type,droptime from user_recyclebin;

注意此时的,object_name和original_name就是回收站存放的表名和原来删除的表名,如果表名没有被重新命名,可以通过下面语句进行恢复:

flashback table object_name to before drop new_table_name;

3. 用oracle数据库的闪回功能可以将数据库恢复到过去某一状态

注意,此时是整库恢复,具体语法如下:

SQL>alter database flashback on
SQL>flashback database to scn SCNNO;
SQL>flashback database to timestamp to_timestamp(‘frombyte 2021-09-02 23:59:59’,‘yyyy-mm-dd hh24:mi:ss’);

4. 彻底删除数据

如果确定需要删除的数据又不想无谓的占用空间,我们可以使用以下3种方式:

  1. 采用truncate方式进行截断。(不能进行数据回恢复)
  2. 在drop时加上purge选项:drop table table_name purge
  3. 通过删除recyclebin区域来永久性删除表 ,drop table table_name cascade constraints purge table table_name;

5. 关于清空回收站

  1. 删除当前用户回收站
    purge recyclebin;
  2. 删除全体用户在回收站的数据
    purge dba_recyclebin;

标签:name,删除,恢复,drop,timestamp,Oracle,table,回收站
From: https://www.cnblogs.com/TengQiuli/p/17816528.html

相关文章

  • oracle强制使用索引
    如下例子,Dim_Material_Info有6万条记录,建了索引IDX_DIM_MATERIAL_INFO_1: 但不知道什么原因,没有用上索引IDX_DIM_MATERIAL_INFO_1,造成查询速度很慢。 改造后的查询sql如下,强制使用索引:select/*+index(xIDX_DIM_MATERIAL_INFO_1)*/a.*From......
  • RMAN 恢复时候出现不存在的备份片
    ORA-19870:errorreadingbackuppieceal_43199_1_760245675ORA-19507:failedtoretrievesequentialfile,handle="al_43199_1_760245675",parms=""ORA-27029:skgfrtrv:sbtrestorereturnederrorORA-19511:Errorreceivedfrommediamanag......
  • 2023-11-07 如何删除navicat 注册表
    注:我只删掉了Registration12XCS,其它没有删,我怕给pc整崩了。1.win+r打开运行窗口并输入regedit: 2.找到路径:计算机\HKEY_CURRENT_USER\SOFTWARE\PremiumSoft\NavicatPremium\Registration12XCS 删除Registration12XCS,如果有Update也一并删除,3.再开路径:计算机\HKEY_CURREN......
  • oracle函数大全-字符串处理函数
    字符函数——返回字符值这些函数全都接收的是字符族类型的参数(CHR除外)并且返回字符值.除了特别说明的之外,这些函数大部分返回VARCHAR2类型的数值.字符函数的返回类型所受的限制和基本数据库类型所受的限制是相同的,比如:VARCHAR2数值被限制为2000字符(ORACLE8中为4000字符),......
  • Oracle 日期时间函数
    常用的时间格式在oracle中有yyyy-mm-ddhh24:mi:ss 而在Java中有些区别为yyyy-MM-ddHH:mm:ss这点还是经常容易模糊的。相信很多人都有过统计某些数据的经历,比如,要统计财务的情况,可能要按每年,每季度,每月,甚至每个星期来分别统计。那在oracle中应该怎么来写sql语句呢,这个时候Or......
  • oracle 删除表空间错误 提示:ora-02429:无法删除用于强制唯一/
    sql>droptablespacezfxfzb;ora-01549:表空间非空,请使用INCLUDINGCONTENTS选项sql>droptablespacezfxfzbINCLUDINGCONTENTSanddatafiles;ora-00604:递归sql层1出现错误。ora-02429:无法删除用于强制唯一/主键的索引。sql>droptablespacezfxfzbinclud......
  • Oracle 创建和删除维
    --createsalestableCREATETABLEsales(trans_dateDATE,cust_idINT,sales_amountNUMBER);--insertsalerowsINSERT/*+APPEND*/INTOSALESSELECTTRUNC(SYSDATE,'year')+MOD(ROWNUM,366)TRANS_DATE,MOD(ROWNUM,......
  • Oracle EXP导出指定的一个表
     expuserid=zf/j@oracle9itables=xsxkbn file=xsxkb20110825_2.dmp     expuserid=zf/j@oracle9itables=(table1,table2,table3)file=xsxkb20110825_2.dmp   REF:https://community.oracle.com/thread/841934https://community.oracle.com/thread/1119117http:/......
  • Oracle查前几条记录方法
    Oralce的示例:1.最佳选择:利用分析函数      row_number()over(partitionbycol1orderbycol2)                              比如想取出100-150条记录,按照tname排序              selecttname,tabtypefrom(  ......
  • ASP.NET和Oracle连接问题的解决方法 - Unable to load DLL (oci.dll)
    以下适用于Windows2003:不少人在做ASP.NET+Oracle开发的时候都会碰到连接问题,提示“UnabletoloadDLL(oci.dll)”,但这个文件在系统中是存在的,很多人为此焦头烂额,我看到很多的帖子都是求助这个问题的。其实并非所有的人都会碰到这个问题,只在于用硬盘分区格式为NTFS的用户,既然oci.......