说一说ORACLE FLASHBACK TABLE的一个有趣问题

数据库 Oracle
从Oracle10g起,引入了回收站的机制,将drop掉的数据表保存在回收站中。当发现误删除的时候,可以通过回收站回收数据表。本文从实验得出ORACLE限制了在表空间SYSTEM下使用回收站机制,下面我们就介绍这一过程,希望能对您有所帮助。

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

  1. SQL> CONNECT SYSDBA/***** AS SYSDBA   
  2.  
  3. 已连接。  
  4.  
  5. SQL> CREATE TABLE TEST (T VARCHAR2(10) ) ;   
  6.  
  7. 表已创建。  
  8.  
  9. SQL> DROP TABLE TEST;   
  10.  
  11. 表已删除。  
  12.  
  13. SQL> FLASHBACK TABLE TEST TO BEFORE DROP;    
  14.  
  15. FLASHBACK TABLE TEST TO BEFORE DROP    
  16.  
  17. *   
  18.  
  19. 第 1 行出现错误:  
  20.  
  21. ORA-38305: 对象不在回收站中 

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

说一说ORACLE FLASHBACK TABLE的一个有趣问题 

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

  1. SQL> CREATE TABLE TEST(T VARCHAR2(10)) TABLESPACE USERS;  
  2.  
  3. 表已创建。  
  4.  
  5. SQL> DROP TABLE TEST;  
  6.  
  7. 表已删除。  
  8.  
  9. SQL> SHOW RECYCLEBIN;  
  10.  
  11. ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME  
  12.  
  13. ---------------- ------------------------------ ------------ -------------------  
  14.  
  15. TEST             BIN$gVtRcd2NTqihW6yM4vs0Hw==$0 TABLE        2011-07-24:12:40:42  
  16.  
  17. SQL> FLASHBACK TABLE TEST TO BEFORE DROP;  
  18.  
  19. 闪回完成。  
  20.  
  21. SQL> SELECT * FROM TEST;  
  22.  
  23. 未选定行 

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

关于Oracle数据库的FLASHBACK TABLE的知识就介绍到这里,希望能对您有所帮助。

【编辑推荐】

  1. 一些很实用的Oracle数据库优化策略总结篇
  2. Oracle数据库使用存储过程创建自动增长列
  3. Oracle、MySQL和PostgreSQL的比较与选择
  4. 一个利用Oracle表的主外键关系实现级联删除的实例
  5. Oracle数据库Guid作主键时执行速度超慢的原因在哪里
责任编辑:赵鹏 来源: 博客园
相关推荐

2021-06-27 21:10:12

Linux 进程控制

2024-02-27 00:10:06

语言Javascript

2021-07-31 22:20:00

线程池系统参数

2020-10-30 10:38:50

Python开发语法

2011-07-26 09:04:44

MySQL Repli数据库负载均衡

2015-10-23 11:40:08

SaaS应用开发

2011-07-25 17:38:32

数据存储一致性模型

2018-01-17 15:15:22

虚拟化IO半虚拟化

2021-01-06 17:28:00

MySQL数据库缓存池

2023-12-29 10:28:24

SPIJava灵活性

2021-03-09 10:05:06

5G运营商技术

2018-04-09 15:10:50

测试方法新手软件

2023-03-13 22:09:59

JavaSpring机制

2010-08-18 08:53:53

Scala

2024-10-24 08:31:26

2017-08-14 10:05:50

开发者App Store

2021-05-04 16:38:54

Linux数学游戏

2023-10-08 09:42:41

GitHubDataTable​Fill

2023-12-01 11:10:13

CMS开源

2017-07-02 17:39:00

数据结构计算机系统
点赞
收藏

51CTO技术栈公众号