oracle 恢复table删除数据 恢复package(使用闪回)

    好久没写东西了,今天写一篇凑个数吧,来公司一年多了,感觉自己到了一个小瓶颈期了。 以前每天很多新东西,都是忙着学,感觉没时间写博客总结一下,大部分都是写笔记,现在又是没东西可以写,每天干着95%都是重复的工作,大部分时间在运维,但我内心是把自己当做dba的,毕竟当初老大把我从java开发拉倒系统组^_^
    上次一个技术把表中的数据删除,这次是另一个技术把正确的包给覆盖了,我给恢复了,哈哈哈---有用的话看一下

参考博客:https://blog.csdn.net/wyzxg/article/details/6761458

虽然包恢复原理一样,但是操作差异一点,因为我的数据是12.2c的

正文1:表数据删除恢复

--1、查询删除数据时间点之前的数据
select * from 表名 as of timestamp to_timestamp(‘2016-08-11 16:12:11‘,‘yyyy-mm-dd hh24:mi:ss‘); --(若没有数据 ,将时间继续提前)
--2、启用行移动功能
alter table 表名 enable row movement;
--3、恢复数据(激动人心的时刻)
flashback table 表名 to timestamp to_timestamp(‘2016-08-11 16:12:11‘,‘yyyy-mm-dd hh24:mi:ss‘);
大功告成,数据恢复成功;

正文2:包被覆盖错了,想要闪回package

注意这里需要使用dba权限,否则查看不到

--错误包:XXX_PKG 正确时间:中午12点
SELECT OBJECT_ID
  FROM all_objects
 WHERE OBJECT_NAME = ‘XXX_PKG‘;
 --如果包直接被删除了,不是被覆盖,那只能先闪回查询对象表
 SELECT OBJECT_ID
  FROM all_objects AS OF TIMESTAMP TO_TIMESTAMP(‘2018-06-26 12:00:00‘, ‘YYYY-MM-DD HH24:MI:SS‘)
 WHERE OBJECT_NAME = ‘XXX_PKG‘;
 --查到2个对象id,一个包头,一个包体
93163
94602
--根据对象id查询包头和包体内容
SELECT source
  FROM source$ AS OF TIMESTAMP TO_TIMESTAMP(‘2018-06-26 12:00:00‘, ‘YYYY-MM-DD HH24:MI:SS‘)
 where obj# = 93163;
 SELECT source
  FROM source$ AS OF TIMESTAMP TO_TIMESTAMP(‘2018-06-26 12:00:00‘, ‘YYYY-MM-DD HH24:MI:SS‘)
 where obj# = 94602;
 --然后确认没问题,用查到的sql内容重新覆盖就好
注意:一般package body的内容比较多,怎么复制下来呢?
spool  /home/oracle/xxx_pkg.sql

SELECT source
  FROM source$ AS OF TIMESTAMP TO_TIMESTAMP(‘2018-06-26 12:00:00‘, ‘YYYY-MM-DD HH24:MI:SS‘)
 where obj# = 93163;

spool off
exit
ll /home/oracle/

知识点

简单总结一下,这里就是利用了oracle的闪回查询功能,非常的简单,一看就懂了,但是oracle闪回有很多种包括删除表和数据库,闪回事务等等。

最重要的是要理解

SQL> show parameter undo_retention;

NAME TYPE VALUE

------------------------------------ --------------------------------- ------------------------------

undo_retention integer 900

这是默认的900,其中undo保留900s,后面undo磁盘不够就可能回收,那样闪回可能会失败,当然也可以强制保留更久,更详细的解释自行百度,下面是我的对闪回的为知笔记的一点点简单记录:http://8840743b.wiz03.com/share/s/28g7gX2-0A_U21N5531o6XTR1JE9nV1SfQc52nk8DX1zamut

谢谢阅读,有兴趣交流的留言

原文地址:https://www.cnblogs.com/xcg-yg/p/9231653.html

时间: 2024-10-07 03:07:42

oracle 恢复table删除数据 恢复package(使用闪回)的相关文章

oracle中关于删除表purge语句和闪回语句的基本使用

语法: drop table ... purge; 例子:drop table test purge; purge是直接删除表,不保留到回收站,10G开始默认drop表式改名移动到回收站; 闪回(flashback)语句: 1.能在一个语句中把表恢复到指定的时间点: 2.恢复表数据连同索引与约束信息: 3.能返回表及其内容到指定时间点或系统变更号(SCN): 4.修复表的误操作 闪回简单示例: SQL> drop table emp2; Table dropped SQL> select or

Oracle闪回查询恢复delete删除数据

Flashback query(闪回查询)原理 Oracle根据undo信息,利用undo数据,类似一致性读取方法,可以把表置于一个删除前的时间点(或SCN),从而将数据找回. Flashback query(闪回查询)前提: SQL> show parameter undo; NAME                                TYPE       VALUE ------------------------------------ ----------- --------

Oracle恢复已删除数据

Oracle恢复已删除的数据,主要有两种方法:SCN和时间戳. 一.通过SCN恢复删除且已提交的数据 1.获得当前数据库的scn号 select current_scn from v$database; (切换到sys用户或system用户查询) 查询到的scn号为:1499223 2.查询当前scn号之前的scn select * from 表名 as of scn 1499220; (确定删除的数据是否存在,如果存在,则恢复数据:如果不是,则继续缩小scn号) 3.恢复删除且已提交的数据 f

oracle数据库误删数据后,及时闪回恢复数据

删除数据后最好不要进行其他无关操作 ①确定删除数据的时间 ②此语句找出删除的数据:select * from 表名 as of timestamp to_timestamp('删除时间点','yyyy-mm-dd hh24:mi:ss') ③删除的数据重新插入原表:insert into 表名 (select * from 表名 as of timestamp to_timestamp('删除时间点','yyyy-mm-dd hh24:mi:ss')); 要保证主键不重复.

Oracle 11g R2 Rman、数据泵、闪回备份与恢复

Oracle 11g R2 Rman备份备份与恢复的定义及分类 备份的定义及分类: 备份就是把数据库复制到转储设备的过程.其中,转储设备是指用于放置数据库副本的磁带或磁盘.通常也将存放于转储设备中的数据库的副本称为原数据库的备份或转储.备份是一份数据副本,从不同的角度分类如下: 从物理与逻辑的角度来分类: 从物理与逻辑的,备份可以分为物理备份和逻辑备份. 物理备份:对数据库操作系统的物理文件(数据文件,控制文件和日志文件)的备份.物理备份又可以分为脱机备份(冷备份)和联机备份(热备份),前者是在

Oracle闪回技术详解

概述: 闪回技术是Oracle强大数据库备份恢复机制的一部分,在数据库发生逻辑错误的时候,闪回技术能提供快速且最小损失的恢复(多数闪回功能都能在数据库联机状态下完成).需要注意的是,闪回技术旨在快速恢复逻辑错误,对于物理损坏或是介质丢失的错误,闪回技术就回天乏术了,还是得借助于Oracle一些高级的备份恢复工具如RAMN去完成(这才是Oracle强大备份恢复机制的精髓所在啊)  撤销段(UNDO SEGMENT) 在讲闪回技术前,需要先了解Oracle中一个逻辑结构--撤销段.因为大部分闪回技术

Oracle 11g R2 闪回技术

为了使数据库能够从任何逻辑错误中迅速恢复,oracle推出了闪回技术.采用该技术,可以对行级和事物级的数据变化进行恢复,减少了数据恢复的时间,而且操作简单.通过SQL语句就可以实现数据的恢复,大大提高了数据库恢复的效率.闪回技术是数据库恢复技术历史上一次重大的进步,从根本上改变了数据恢复. 闪回技术包括以下各项: 闪回查询:(FLASHBACK QUERY):查询过去某个时间点或某个SCN值时表中的数据信息 闪回版本查询(FLASHBACK Version query):查询过去某个时间段或某个

Oracle闪回技术之一Oracle 11g 利用FlashTable (闪回表)恢复(用delete)误删的数据

闪回表,实际上就是将表中的数据快速恢复到过去的一个时间点或者系统改变号SCN上.实现表的闪回,需要用到撤销表空间相关的UNDO信息,通过SHOW PARAMETER UNDO命令就可以了解这些信息.用户对表的数据的修改操作,都记录在撤销表空间中,这为表的闪回提供的数据恢复的基础. 修改记录被提交到undo表空间中的默认保留时间为900秒,用户可以在这900秒的时间内对表的进行闪回操作,从而将表中的数据恢复的修改前的状态. 如上图显示的默认900秒,我们通过sql来修改这个默认时间为1200: f

Oracle数据库中闪回恢复的详细分析

Oracle9i开始提供闪回查询,以便能在需要的时候查到过去某个时刻的一致性数据,这是通过Undo实现的.这个功能有很大的限制,就是相关事务的undo不能被覆盖,否则就无力回天了.oracle10g大大的增强了闪回查询的功能,并且提供了将整个数据库回退到过去某个时刻的能力,这是通过引入一种新的flashback log实现的. flashback log有点类似redo log,只不过redo log将数据库往前滚,flashback log则将Oracle数据库往后滚.为了保存管理和备份恢复相