天天看点

ORACLE FLASHBACK TABLE 的一个有趣问题

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

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

ORACLE FLASHBACK TABLE 的一个有趣问题

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

如果不指定创建表的表空间,那么它会使用默认的表空间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为什么有这限制。

上一篇: Xcode调试LLDB