ORACLE FLASHBACK TABLE 的一个有趣问题

大家都知道ORACLE 10G新增了FLASHBACK特性,其中FLASHBACK TABLE用来对误删的表进行修复。但是今天却发现了FLASHBACK TABLE的一个有趣问题,请看下面慢慢道来:下面我用一个例子来说明我的遇到的有趣的问题,欢迎大家探讨。

SQL> CONNECT SYSDBA/***** AS SYSDBA
已连接。

SQL> CREATE TABLE TEST (T VARCHAR2(10) ) ;

表已创建。

SQL> DROP TABLE TEST;

表已删除。

SQL> FLASHBACK TABLE TEST TO BEFORE DROP;
FLASHBACK TABLE TEST TO BEFORE DROP
*
第 1 行出现错误:
ORA-38305: 对象不在回收站中

出现ORA-38305错误,起初我以为是回收站机制参数OFF引起的,Oracle10g起,引入了回收站的机制,将drop掉的数据表保存在回收站中。当发现误删除的时候,可以通过回收站回收数据表。回收站机制类似于我们在Windows系统上的回收站。在Windows中,当我们选择删除一个文件时,本质上并没有将文件从硬盘上删除,只是将文件以一种形式改名,这样就能从回收站中看到。于是我查看了RECYCLEBIN参数

 

奇怪的是回收站参数是开启的,SQL> SHOW RECYCLEBIN; 也看不到删除的表。这到底是咋回事呢?折腾了很久。后来修改了创建表的表空间,竟然一切都OK

SQL> CREATE TABLE TEST(T VARCHAR2(10)) TABLESPACE USERS;

表已创建。

SQL> DROP TABLE TEST;

表已删除。

SQL> SHOW RECYCLEBIN;
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
TEST             BIN$gVtRcd2NTqihW6yM4vs0Hw==$0 TABLE        2011-07-24:12:40:42
SQL> FLASHBACK TABLE TEST TO BEFORE DROP;

闪回完成。

SQL> SELECT * FROM TEST;  未选定行

如果不指定创建表的表空间,那么它会使用默认的表空间SYSTEM,你可以通过SELECT
TABLESPACE_NAME FROM USER_TABLES WHERE
TABLE_NAME='TEST'查看。后来我有多次重复了这个实验,结果都是如此,开来在表空间SYSTEM下是无法使用FLASHBACK
TABLE特性的,很有趣的,后来查了下资料才知道: You
cannot 'flashback table to before drop' a table which has been created
in the SYSTEM tablespace. The table is sent to the recyclebin only if it
existed in some other tablespace other than SYSTEM tablespace and that
tablespace must be locally managed.看来ORACLE限制了在表空间SYSTEM下使用回收站机制,不知道ORACLE为什么有这限制。

 

时间: 2024-11-29 09:59:33

ORACLE FLASHBACK TABLE 的一个有趣问题的相关文章

Oracle Flashback table使用示例

确保recyclebin是打开的 SQL> show parameter recyclebin NAME                                 TYPE        VALUE ------------------------------------ ----------- ------------------------------ recyclebin                           string      ON 创建一张表 SQL> cre

Oracle 闪回特性(Flashback Query、Flashback Table)

--================================================== -- Oracle 闪回特性(Flashback Query.Flashback Table) --==================================================       Oracle 闪回查询是指针对特定的表来查询特定的时间段内的数据变化情况来确定是否将表闪回到某一个特定的时刻以保证数据无讹误存在. 这个特性大大的减少了采用时点恢复所需的工作量以及

Oracle的flashback table简介

因为被flashback回来的数据的rowid可能会发生变化 SQL> create table tt (id int,name varchar2(4000)) tablespace users; 表已创建. SQL> alter table tt pctfree 50; 表已更改. SQL> insert into tt values(1,rpad('a',4000,'+')); 已创建 1 行. SQL> commit; 提交完成. SQL> insert into tt

Oracle Flashback Database简介

Flashback 技术是以Undo segment中的内容为基础的,因此受限于UNDO_RETENTON参数.要使用flashback的特性,必须启用自动撤销管理表空间. 在Oracle 10g中, Flash back家族分为以下成员: Flashback Database, Flashback Drop,Flashback Query(分Flashback Query,Flashback Version Query, Flashback Transaction Query 三种) 和Fla

oracle flashback详解2

这部分的内容,其实早在10年年初就学习过,也记录了相关的笔记.但很多知识不用就慢慢被遗忘了.今天无意中听到同事在讨论问题:为什么删除了一个占用空间大的表后,表空间并没有释放呢? 职业的原因,自己在想Oracle Drop table的过程是怎么实现的,是不是要做个跟踪看下.后来想起在10g后,Oracle有了Flashback的功能,删除表的时候会先放在RecycleBin中,并不真正的物理删除,所以表空间dba_free_space是不是不会有变化? 今天重新翻了下之前的笔记,并做了试验,发现

Oracle Flashback 技术大解密

Oracle Flashback 技术大解密                                                                                                          作者:吴伟龙   Flashback 技术是以Undo segment中的内容为基础的,因此受限于UNDO_RETENTON参数.要使用flashback的特性,必须启用自动撤销管理表空间.   在Oracle 10g中, Flash back

三大关系数据库字段值超长的一个有趣对比

三大关系数据库字段值超长的一个有趣对比   在开发中,我们可能会遇到插入字段值超长的情况,前阵子遇到这样一个案例,结果一对比后发现一个有趣的现象,如果插入字段值超长,ORACLE.SQL Server.MySQL它们会提示那个字段值超长吗?下面看看实验吧:   ORACLE数据库   SQL> create table test(id number(10), name varchar2(12));   Table created.   SQL> insert into test   2  se

为什么要开启行移动?flashback table肯定会造成rowid跟着修改

flashback table肯定会造成rowid跟着修改,为什么要开启行移动,就是这个原因 下面我马上做个实验来验证一下: SQL> drop tablespace tp2 including contents and datafiles; Tablespace dropped. SQL> create tablespace tp2 datafile '/u01/app/oracle/oradata/tp2.dbf' size 512K; Tablespace created. SQL>

Oracle Flashback闪回机制简介

Flashback的目的 在有Flashback之前,如果你对数据误操作,并已提交,这时想 回退该误操作,将会是很件麻烦的事情.有人可能会说可以用备份恢复到误操作之前,但正 确的操作数据也一起没了.唯一可能的办法就是日志挖掘,但日志挖掘非常繁琐,很难定位 . 因此,Oracle推出了Flashback技术,主要目的就是为了恢复误操作. Flashback家族介绍 数据库级别:Flashback Database 表级别: Flashback Drop和Flashback Table,Flashb