`

Oracle 10g 中误删除(drop)表的恢复处理

 
阅读更多
在9i中Oracle引入了flashback的概念,可以将数据返回到某个时间点,
但对于诸如drop/truncate等DDL语句却尚不支持。进入Oracle10g,这一
缺陷得到了弥补。可以将丢失掉的表,通过flashback命令直接找回。
非常简单且易用。
首先,可以查看当前schema中的表:
SQL> select * from tab;

TNAME                    TABTYPE  CLUSTERID
------------------------ ------- ----------
RECYCLETEST              TABLE

然后删除该表:
SQL> drop table recycletest;

Table dropped.
检查表状态:
SQL> select * from tab;

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
BIN$04LhcpndanfgMAAAAAANPw==$0 TABLE

由此可知,Oracle将drop掉的表重命名了。而且对应的触发器,索引
等对象,所涉及到的表名,都已经对应修改。

假设现在有N个表都被drop掉了,那么如何查看被drop掉的表和在回收
站里面被重新命名后的名称呢?如下:
SQL> show recyclebin

ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ ------------------
RECYCLETEST      BIN$04LhcpndanfgMAAAAAANPw==$0 TABLE        2004-02-16:21:13:31
或者:
select * from dba_recyclebin;
select * from user_recyclebin;

该命令需要在10g以上的版本的sqlplus中执行方可查看。
然后恢复该表:
SQL> FLASHBACK TABLE RECYCLETEST TO BEFORE DROP;

FLASHBACK COMPLETE.

可以看到删除的表已经被恢复了:
SQL> SELECT * FROM TAB;

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
RECYCLETEST                    TABLE

记住,将删除的表放在回收站中不会释放原有的表空间,要释放这些空
间,需要执行:
purge recyclebin;

那么如果10g中要彻底删除一个表,而不要将该表回收放入回收站中呢:
drop table recycletest purge;

由于drop一个表在Oracle中只是对该表重命名,而并没有迁移该表对应
的表空间,因此删除后的表如果没有purge,则会一直占用该表空间。
直到表空间不足时,Oracle首先会去回收站中按照先进先出的原则来清
理回收站中的表。
当然,也可以用手动的方式来清理指定的表:
purge table recycletest;
或者使用该对象在回收站中的名字:
purge table "BIN$04LhcpndanfgMAAAAAANPw==$0";
该命令将清除掉所有跟该表相关的对象,包括索引、约束、触发器等。如果想永
久的删除一个索引,则可以:
purge index in_test_01;
这个命令仅仅删除该表的索引,而不影响该表(回收站中的)。

有一种情况,drop表emp后,又创建了emp表,然后再次drop后再创建emp表,再drop:
create table emp(id number(10));
drop table emp;
create table emp(id number(10), name varchar2(100));
drop table emp;
create table emp(id number(10), name varchar2(100), sex varchar2(2));
drop table emp;
当执行purge table emp后,是purge掉哪个表呢?还是全部purge掉?
答案是跟前面自动清理的原理一样,每次清除第一个被drop掉的emp表,判断的依据是user_recyclebin.dropscn,根据该值的大小决定purge的顺序。

另外,如果要对drop掉的表做恢复处理,而此时又已经创建了表emp,那么如何恢复该表呢(由于已经存在该表名,不能直接恢复)。方法:
flashback table emp to before drop rename to emp_old;
即将恢复的表命名为其他名称的一个表。
恢复的时候跟purge的顺序是相反的,即最后一个被drop掉的最先被恢复。

更多内容可以参考该文档:
http://download.oracle.com/docs/cd/B19306_01/backup.102/b14192/flashptr004.htm#sthref634
http://www.oracle.com/technology/pub/articles/10gdba/week5_10gdba.html


分享到:
评论

相关推荐

    oracle 误删除表恢复

    ### Oracle误删除表恢复 在Oracle数据库管理过程中,误删表是常见的操作失误之一,而如何有效、快速地恢复这些被误删的表对于DBA(数据库管理员)来说至关重要。本文将详细介绍如何在Oracle环境下利用回收站功能...

    Oracle数据库误删除数据的不同恢复方法整理

    通过本文介绍的方法,我们可以有效应对Oracle数据库中数据误删除的问题。无论是单条记录的误删还是整张表的删除,Oracle都提供了多种恢复手段。合理利用这些工具和技术,不仅可以避免数据丢失的风险,还能最大限度地...

    利用 Oracle 系统触发器防止误删除表操作

    ### 利用Oracle系统触发器防止误删除表操作 #### 背景介绍 在企业级应用中,数据库的安全性和稳定性至关重要。Oracle作为一款广泛使用的数据库管理系统,提供了丰富的功能来保障数据安全。其中,系统触发器是Oracle...

    Oracle数据库误删除数据的不同恢复方法整理(超级实用)

    在Oracle数据库管理中,误删除数据是一种常见的错误操作,可能导致重要的业务数据丢失。为了应对这种情况,Oracle提供了多种数据恢复的方法,包括闪回恢复、从回收站恢复等。本文将详细介绍这些方法,并给出具体的...

    Oracle恢复误删除数据

    Oracle 恢复误删除数据 Oracle 数据库是企业级的关系数据库管理系统,广泛应用于各种行业。然而,在实际操作中,误删除数据是一种常见的错误。因此,了解如何恢复误删除数据是非常重要的。本文将详细介绍 Oracle ...

    Oracle Database 10g删除表的程序.rar_oracle 10g

    删除表是数据库管理中的常见操作,本压缩包包含的是关于在Oracle 10g中如何删除表的相关程序和资源。 在Oracle 10g中,删除表有几种不同的方法,主要通过SQL语句实现。最常用的是`DROP TABLE`语句,用于永久性地从...

    用oracle10g的flashback闪回功能快速恢复oracle中被删除的表

    Oracle Database 10g 引入了一项非常强大的特性——Flashback,该特性使得数据库管理员(DBA)能够轻松地恢复误删除的数据表。在之前的版本中,如果误删了表,DBA需要通过繁琐的过程来恢复数据,比如使用表空间的时间...

    恢复drop的表和记录

    然而,现代的数据库管理系统(DBMS)提供了多种机制来帮助恢复被误删除的表和记录,其中Oracle数据库的闪回功能尤为突出。本文将围绕“恢复drop的表和记录”这一主题,深入探讨如何利用Oracle数据库的闪回技术来恢复...

    Oracle恢复误删除数据,解除锁定的等SQL语句

    在Oracle 10g及更高版本中,你可以使用`AS OF TIMESTAMP`子句查询到特定时间点的数据。例如,要查询两个小时以前的表数据,可以执行如下SQL语句: ```sql SELECT * FROM 表名 AS OF TIMESTAMP SYSDATE - 1/12; ``...

    oracle数据文件被误删除后的灾难处理

    ### Oracle 数据文件误删除后的灾难恢复策略 在日常的数据库管理工作中,误删除重要的 Oracle 数据文件是一种常见的且可能带来严重后果的操作失误。本文将详细探讨当遇到 Oracle 数据文件被误删除的情况时,如何...

    数据库误删除东西恢复

    在 Oracle 10g 中,我们可以使用 Flashback 语句来恢复误删除的数据。Flashback 语句可以将数据库恢复到之前的某个时间点。例如,我们可以使用以下语句来恢复两个小时前的数据: select * from 表名 as of ...

    oracle 10g flashback(数据恢复)

    该技术从 Oracle 9i 开始引入,并在 10g 版本中得到了显著增强和完善。Flashback 技术不仅仅是一种简单的数据恢复工具,它提供了一系列功能,使得用户能够在多种情况下恢复数据,包括但不限于误删除、数据损坏、错误...

    Oracle回滚表空间数据文件误删除处理

    总的来说,Oracle回滚表空间数据文件误删除的处理涉及到了数据库管理的多个方面,包括参数配置、故障恢复、表空间管理以及回滚段的重建。这个过程需要数据库管理员对Oracle数据库的内部机制有深入的理解,以便能够...

    Oracle中有后悔药卖吗?Oracle中的回闪查询: Oracle 10g 回闪实验文档

    **Oracle Flashback Database**是Oracle 10g中最强大的回闪特性之一。它可以通过简单的SQL命令将整个数据库恢复到某个特定的时间点或系统更改编号(SCN)。该命令可以指定目标时间为日期格式、SCN或者序列号等。 ```...

    oracle10g的用户和表空间重建

    本文将详细介绍Oracle 10g中用户和表空间重建的相关命令、方法以及注意事项。 #### 一、表空间重建 表空间是Oracle数据库中的一个逻辑存储单元,用于组织和管理数据文件。重建表空间通常包括以下步骤: 1. **查询...

    oracle中误删除表后恢复语句(FLASHBACK)

    您可能感兴趣的文章:Oracle误删除表数据后的数据恢复详解Oracle7.X 回滚表空间数据文件误删除处理方法Oracle7.X 回滚表空间数据文件误删除处理方法Oracle7.X 回滚表空间数据文件误删除处理方法误删除$ORACLE_HOME/...

    Oracle 10g Flashback 概述

    这是Oracle 10g中最强大的恢复选项,能够将整个数据库恢复到过去某个时间点。这需要数据库运行在归档日志模式下,并且需要足够的还原空间来存储日志文件。 5. **Flashback Drop** 有时我们可能不小心删除了重要的...

    Oracle RMAN异机不完全恢复

    本实验模拟了一种场景,在主机A上误删除了一个名为`test`的数据表,需要借助于RMAN工具在另一台机器B上完成对该表的不完全恢复。 #### 实验目的 本实验的主要目的是展示如何使用Oracle RMAN工具实现跨机器的不完全...

    oracle 9i误删除表空间的解决办法(造成ORA-01033.txt

    通过上述步骤,可以有效地解决Oracle 9i中因误删除表空间导致的ORA-01033和ORA-01110等错误。值得注意的是,在处理这类问题时,应尽量避免对生产环境造成进一步的影响,并在必要时寻求高级数据库管理员的帮助。

    Oracle 误删除后的闪回方法

    "Oracle 误删除后的闪回方法"是解决这类问题的关键技术。Oracle提供了多种强大的工具和功能,帮助用户在数据丢失后迅速恢复,其中最常用的就是闪回(Flashback)技术。以下将详细介绍Oracle中的闪回恢复机制及其相关...

Global site tag (gtag.js) - Google Analytics