我们先创建一张表
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;
表已删除。
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表就无法恢复了
相关推荐
- **操作1:** 使用 `Flashback table tablename to before drop;` 可以恢复被误删除的表。这一操作需要用户具有相应的权限,如 `Flashback any table` 的系统权限或针对特定表的 `Flashback` 权限,以及对该表的 `...
3. 如果找到,使用`FLASHBACK TABLE count776711 TO BEFORE DROP;`命令尝试恢复。 ### 结论 恢复被DROP的表和记录是一项关键的数据库管理技能,尤其是在处理生产环境中的紧急情况时。Oracle数据库的闪回技术为此...
通过`FLASHBACK TABLE table_name TO BEFORE DROP;`语句,可以将表恢复到被删除之前的状态。然而,这仅适用于尚未清理回收站(Recyclebin)的情况,因为Oracle会将删除的表暂时保留在回收站中。 3. **Flashback ...
在提供的"恢复oracle中用plsql误删除drop掉的表.txt"文件中,可能详细介绍了如何使用PL/SQL来执行上述的Flashback操作。通常,当表被误删除后,如果没有启用Recyclebin或者表已被回收站清理,可能需要依赖RMAN...
例如,使用`FLASHBACK TABLE tableName TO BEFORE DROP;`命令,即可将已删除的表恢复回来。 4. **操作步骤**:误删表后,通过查询`DBA_RECYCLEBIN`视图可以查看回收站中的对象。然后使用`FLASHBACK TABLE`命令,...
FLASHBACK TABLE "BIN$KSD8DB9L345KLA==$0" TO BEFORE DROP RENAME TO INT_ADMIN_EMP_OLD; ``` ### 回收站管理 Oracle的回收站(Recycle Bin)用于存储已删除的对象,如表、索引等,提供了恢复这些对象的机会。...
FLASHBACK TABLE my_table TO BEFORE DROP; ``` 执行此命令后,不仅表的结构会被恢复,而且如果可能的话,表中的数据也会一并恢复。但请注意,`FLASHBACK TABLE`并不总是能恢复所有类型的索引,尤其是全文索引。在9i...
Flashback Table 是 Oracle Flashback 特性中的一部分,它允许用户快速地恢复到一个表的过去状态。Flashback Table 需要启用 recycle bin 回收站。 三、Flashback Database Flashback Database 是 Oracle ...
- `SQL> FLASHBACK TABLE TEST TO BEFORE DROP RENAME TO TEST2;` - `SQL> FLASHBACK TABLE TEST TO BEFORE DROP RENAME TO TEST1;` - 这样,原始的`TEST`表将会被恢复为两个不同的表:`TEST1`和`TEST2`,它们...
FLASHBACK TABLE orders TO BEFORE DROP RENAME TO order_old_version; ``` 2. 恢复静态数据(数据错误删除或修改,且无后续变化): 首先启用行迁移: ```sql ALTER TABLE order ENABLE ROW MOVEMENT; ``` 然后...
3. **恢复**:使用Flashback Table或Flashback Database根据需求恢复到特定时间点。 ### 结论 Oracle Flashback 技术为数据库管理和恢复提供了强大的工具,尤其是在应对数据丢失或误操作的情况下。通过合理配置和...
FLASHBACK TABLE table_name TO BEFORE TRUNCATE; ``` 请注意,这仅在`ALTER DATABASE ENABLE FLASHBACK ARCHIVE`已执行且未达到闪回日志空间限制的情况下有效。 **3. 无闪回表时的其他恢复方法** - **时间点恢复...
对于被删除的表,可以使用`flashback table to before drop`来恢复,但需注意,恢复后的索引名可能还在回收站中,需要手动重命名: ```sql SQL> flashback table s_emp1 to before drop; SQL> alter index "BIN$...
FLASHBACK TABLE employees TO BEFORE DROP; ``` #### 2.2 flashbackfromundo **定义**:`flashbackfromundo` 用于从undo表空间中恢复已删除的数据。 **语法**: ```sql FLASHBACK TABLE 表名 TO BEFORE DROP; ``...
FLASHBACK TABLE orders TO BEFORE DROP RENAME TO orders_old_version; ``` 这条命令同样恢复`orders`表,并将其重命名为`orders_old_version`。这在需要保留原表名称的情况下非常有用。 #### 四、闪回表...
用户可以使用 Flashback Table 来恢复表中的数据,或者恢复表的结构。Flashback Table 的实现是基于 Oracle 的 Flashback Table Log(FTL),该日志记录了表中的所有变化,可以追溯到某个特定的时间点或 SCN。 5. ...
FLASHBACK TABLE tablename TO TIMESTAMP to_timestamp('2011-05-07 08:23:48', 'yyyy-mm-dd hh24:mi:ss'); ``` **闪回限制**: - 必须存在对应的undo数据。 - 表必须开启`ROW MOVEMENT`属性。 - `SYS`用户所拥有的...
FLASHBACK TABLE <表名> TO BEFORE DROP; ``` 执行完上述命令后,被删除的表就会被恢复到原来的状态,且不会对现有的表空间造成影响。恢复后的表将恢复其原来的名称。 ##### 4. **管理回收站** - **释放空间**:...