在oracle10g中,如果不小心drop掉一张表,能不能恢复呢?
答案是肯定的,在oracle10g中,当使用命令drop table tablename 命令时,其实不会真正的删除该表,而是把表放到了回收站中(回收站的概念类似
windows中的回收站),所以我们可以通过flashback命令来恢复drop掉的表,下面就该问题做一个小小的研究
我们先创建一张表
Create table test (
Id int,
Name varchar(20)
)
再插入几条数据
insert into test(id,name) values(1,'a');
insert into test(id,name) values(2,'b');
commit;
好了,为了更好观察,我们先执行下面的命令清空一下回收站
Purge recyclebin;
SQL> select original_name,dropscn from recyclebin;
未选定行
好了,回收站已经清空了
下面再把上面创建的test表drop掉,再看下回收站
SQL> drop table test;
表已删除。
SQL> select original_name,dropscn from recyclebin;
ORIGINAL_NAME DROPSCN
-------------------------------- ----------
TEST 1742491
SQL> select * from test;
select * from test
*
第 1 行出现错误:
ORA-00942: 表或视图不存在
SQL>
这时候从回收站中查到了被drop表的,而且使用select语句也找不到表了,好了,下面我们再使用flashback恢复一下
SQL> flashback table test to before drop;
闪回完成。
SQL> select * from test;
ID NAME
---------- --------------------
1 a
2 b
恢复以后,表结构和数据都被找了回来
那么好,下面我们再出个考题,这是OCP考试里的题,在上面的实验基本上再执行下面的操作,想想会发生什么事呢?
drop table test; --drop表test表
以相同的名字再次创建test表,但字段不同
Create table test (
a int,
b varchar(20),
c varchar(30)
)
drop table test --然后再次drop掉test表
再执行flashback恢复
flashback table test to before drop;
这时候大家想想会恢复哪个表呢?是第一次创建的?还是第二次创建的?好了做实验,让实事来说话
SQL> drop table test;
表已删除。
SQL> create table test(
2 a int,
3 b varchar(20),
4 c varchar(30)
5 );
表已创建。
SQL> drop table test;
表已删除。
SQL> select original_name,dropscn from recyclebin;
ORIGINAL_NAME DROPSCN
-------------------------------- ----------
TEST 1743515
TEST 1743435
SQL> flashback table test to before drop;
闪回完成。
SQL> select * from test;
未选定行
SQL> desc test;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
A NUMBER(38)
B VARCHAR2(20)
C VARCHAR2(30)
通过以上实验,我们可以看到,虽然名字相同,但flashback恢复的只是最后一次创建的表
请注意上面的查询回收站的语句,从回收站中,可以看到,共有两个test表,但dropscn不一样,使用flashback命令只恢复dropscn大的哪个表,以前的都是垃圾了
关于flashback命令还有一个需要注意的,如果在drop表时,加上了purge选项,则无法恢复,看下面实验
SQL> drop table test purge; www.2cto.com
表已删除。
SQL> select original_name,dropscn from recyclebin;
ORIGINAL_NAME DROPSCN
-------------------------------- ----------
TEST 1743435
SQL> flashback table test to before drop;
闪回完成。
SQL> select * from test;
ID NAME
---------- --------------------
1 a
2 b
drop时使用了purge选项,所以该drop没有放入回收站,那为什么执行flashback table时又恢复成功了呢?
能过上面的实验可以看到,恢复的是我们第一次创建的test表,而第二次创建的test表就无法恢复了
分享到:
相关推荐
在数据库管理领域,误操作是常见的问题之一,尤其是在执行如DROP TABLE这样的命令时,一旦不慎,就可能导致数据丢失。然而,现代的数据库管理系统(DBMS)提供了多种机制来帮助恢复被误删除的表和记录,其中Oracle...
其中,系统触发器是Oracle提供的一种强大工具,能够帮助管理员监控并干预特定的数据库操作,有效防止误操作导致的数据丢失。 #### 问题描述 当DBA或其他用户具有足够的权限时,可能会因为输入错误等原因执行`DROP ...
### Oracle误删除表恢复 ...通过了解其工作原理和掌握相关操作命令,可以有效地解决由于误操作带来的问题。在实际应用中,建议定期备份数据,并合理利用回收站功能,以确保数据的安全性和完整性。
Oracle 恢复误删除数据 Oracle 数据库是企业级的关系数据库管理系统,广泛应用于各种行业。然而,在实际操作中,误删除数据是一种常见的错误。因此,了解如何恢复误删除数据是非常重要的。本文将详细介绍 Oracle ...
### Oracle数据库误删除数据的不同恢复方法 ...通过对这些方法的理解和应用,可以有效地避免因误操作而导致的数据丢失问题。同时,在日常维护中,合理地管理回收站和及时回收不再需要的空间也是十分必要的。
- **恢复表**:如果还记得表的原名,可以直接使用`FLASHBACK TABLE`命令恢复: ```sql FLASHBACK TABLE 原表名 TO BEFORE DROP; ``` 如果忘记了原表名,可以使用回收站中的表名进行恢复,然后重命名: ```sql ...
在日常操作中,有时可能会发生误操作,如误删除数据或锁定问题,本篇文章将详细讲解如何在Oracle中恢复误删除数据以及解锁相关操作。 1. **恢复误删除数据** 当你不小心删除了数据库表中的数据时,Oracle提供了一...
在Oracle数据库环境中,数据丢失可能由多种原因引起,如误操作、系统故障、硬件损坏等。为了最大限度地减少这些意外事件的影响,Oracle提供了丰富的工具和技术来帮助恢复数据。具体到“恢复刚删除的数据”这一场景,...
Oracle数据库在面临误删除或更新数据时,有一个...总的来说,Oracle的数据恢复机制提供了一定程度的保护,但最佳实践始终是预防优于治疗,例如使用事务控制、定期备份和严格的权限管理,以减少误操作导致的数据损失。
然而,在日常操作中,由于误操作或其他原因导致的数据丢失是不可避免的。本文将深入探讨Oracle数据库中"drop table"后数据恢复的方法,主要关注Oracle的回收站功能和闪回技术。 首先,当用户执行`DROP TABLE`命令时...
### Oracle 9i以上版本中的闪回功能及误操作后的数据恢复 在Oracle数据库系统中,数据的安全性和完整性至关重要。为了应对可能出现的数据误删除、更新等意外情况,Oracle自9i版本起引入了闪回技术(Flashback)。该...
- **时间戳查询**: 如果只需要恢复表中的部分数据,可以使用带有时间戳的查询来获取特定时间点之前的数据。例如,为了获取两小时前的数据,可以使用如下查询: ```sql SELECT * FROM 表名 AS OF TIMESTAMP ...
6. **删除表并Purge**:模拟误操作,删除表并立即执行Purge操作。 ```sql drop table hsql.drop_1 purge; ``` #### 三、信息收集与分析 为了进行恢复操作,我们需要收集有关被删除表的一些关键信息,包括表的...
在实际的数据库管理工作中,可能会遇到因误操作导致的数据丢失或损坏的情况。在这种情况下,如何有效地利用备份数据完成数据库的恢复工作至关重要。本实验模拟了一种场景,在主机A上误删除了一个名为`test`的数据表...
在实际应用中,当发生误操作时,例如误删了表中的记录,可以首先确认有无开启闪回功能,然后使用闪回查询验证能否恢复所需数据,最后执行相应的闪回操作,如闪回表或闪回事务。在完成恢复后,记得分析并修复导致问题...
时点恢复则意味着可以选择将表空间恢复到一个特定的时间点,这通常用于处理误操作、错误的数据输入或需要撤销的数据定义语言(DDL)操作,如误删表或改变表结构。与全库级别的闪回相比,TSPITR对数据库的影响更小,...
31.支持对误删除数据的恢复,即使被删除数据的表中有LOB列,即使被删除数据的表中对应row directory中所有记录的offset都已经完全被Oracle清除 赤兔Oracle数据库恢复软件软件安装 把下载好的安装包解压到...
` 可以根据 SCN 或时间戳来恢复表到特定的时间点。这要求表必须启用 `row movement` 功能。 示例代码如下: ```sql SQL> alter table A enable row movement; SQL> flashback table A to timestamp 'YYYY-MM-...