Oracle的flashback drop与索引

今天在跟朋友讨论了如下话题:

《有一张表上建立索引,DROP该表,又闪回删除回来,请问,这张表上的索引还能用吗?如果有变化那是什么?》

我进行了如下测试:

sys@MAA> select * from v$version;

BANNER

----------------------------------------------------------------------------------------------------

Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

PL/SQL Release 11.2.0.3.0 - Production

CORE    11.2.0.3.0      Production

TNS for Linux: Version 11.2.0.3.0 - Production

NLSRTL Version 11.2.0.3.0 - Production

-- 我的TEST2表上有两个索引

luocs@MAA> select index_name, status from user_indexes where table_name='TEST2';

INDEX_NAME                                                   STATUS

------------------------------------------------------------ ----------------

INX_TEST2_ZH                                                 VALID

INX_TEST2                                                    VALID

luocs@MAA> set autot trace exp stat

luocs@MAA> select count(*) from test2 where id=1;

Execution Plan

----------------------------------------------------------

Plan hash value: 3565898414

----------------------------------------------------------------------------------

| Id  | Operation         | Name         | Rows  | Bytes | Cost (%CPU)| Time     |

----------------------------------------------------------------------------------

|   0 | SELECT STATEMENT  |              |     1 |     5 |     2   (0)| 00:00:01 |

|   1 |  SORT AGGREGATE   |              |     1 |     5 |            |          |

|*  2 |   INDEX RANGE SCAN| INX_TEST2_ZH |     2 |    10 |     2   (0)| 00:00:01 |

----------------------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

2 - access("ID"=1)

Statistics

----------------------------------------------------------

1  recursive calls

0  db block gets

2  consistent gets

0  physical reads

0  redo size

  525  bytes sent via SQL*Net to client

  523  bytes received via SQL*Net from client

2  SQL*Net roundtrips to/from client

0  sorts (memory)

0  sorts (disk)

1  rows processed

-- DROP 表TEST2

luocs@MAA> drop table test2;

Table dropped.

-- 索引也被删除

luocs@MAA> select index_name, status from user_indexes where table_name='TEST2';

no rows selected

-- 这时候查看回收站,我们看到表的删除记录,却没有看到索引的

luocs@MAA> show recyclebin

ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME

---------------- ------------------------------ ------------ -------------------

TEST2            BIN$048hXdZTf0HgQwEAAH/4UQ==$0 TABLE        2013-01-18:19:20:06

-- 进行闪回删除

luocs@MAA> flashback table test2 to before drop;

Flashback complete.

-- 这时候又能看到索引信息,也是可用状态,却索引名称改变,依然使用回收站里的名字

luocs@MAA> select index_name, status from user_indexes where table_name='TEST2';

INDEX_NAME                                                   STATUS

------------------------------------------------------------ ----------------

BIN$048hXdZSf0HgQwEAAH/4UQ==$0                               VALID

BIN$048hXdZRf0HgQwEAAH/4UQ==$0                               VALID

-- 我们也看到该索引能够正常使用

luocs@MAA> set autot trace exp

luocs@MAA> select count(*) from test2 where id=1;

Execution Plan

----------------------------------------------------------

Plan hash value: 3980542661

----------------------------------------------------------------------------------------------------

| Id  | Operation         | Name                           | Rows  | Bytes | Cost (%CPU)| Time     |

----------------------------------------------------------------------------------------------------

|   0 | SELECT STATEMENT  |                                |     1 |     5 |     2   (0)| 00:00:01 |

|   1 |  SORT AGGREGATE   |                                |     1 |     5 |            |          |

|*  2 |   INDEX RANGE SCAN| BIN$048hXdZSf0HgQwEAAH/4UQ==$0 |     2 |    10 |     2   (0)| 00:00:01 |

----------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

2 - access("ID"=1)

时间: 2024-08-03 10:42:52

Oracle的flashback drop与索引的相关文章

oracle Flashback DROP简介

Flashback Drop 是从Oracle 10g 开始出现的, 用于恢复用户误删除的对象(包括表,索引等), 这个技术依赖于Tablespace Recycle Bin(表空间回收站),这个功能和windows的回收站非常类似. Flashback 不支持sys用户. system表空间下的对象,也不能从回收站里拿到.故使用SYS 或者SYSTEM用户登陆时, show recyclebin 为空. 1. Tablespace Recycle Bin 从Oracle 10g 开始, 每个表

Oracle 闪回特性(FLASHBACK DROP & RECYCLEBIN)

--============================================== -- Oracle 闪回特性(FLASHBACK DROP & RECYCLEBIN) --==============================================       FLASHBACK DROP 特性允许在不丢失任何数据库的情况下将指定的表恢复至其被删除的时间点,并保持数据库为当前状态.闪回删除并不是 真正的删除表,而是把该表重命名并放入回收站,类似于Windows的

Oracle回收站及flashback drop(上)

Oracle回收站及flashback drop(上)   一.1  BLOG文档结构图 Oracle回收站及flashback drop - 3 - 1.1 BLOG文档结构图 - 3 - 1.2 前言部分 - 3 - 1.2.1 导读和注意事项 - 3 - 1.2.2 相关参考文章链接 - 4 - 1.2.3 本文简介 - 4 - 1.3 相关知识点扫盲(摘自网络+个人总结) - 5 - 1.3.1 闪回 - 5 - 1.3.2 闪回技术分类 - 6 - 1.3.3 闪回删除(Flashba

Oracle回收站及flashback drop(下)

Oracle回收站及flashback drop(下) 本文接着上篇文章继续讲解:http://blog.itpub.net/26736162/viewspace-2121136/ 第二章 实验部分 二.1  实验环境介绍 项目 primary db db 类型 单实例 db version 11.2.0.2.0 db 存储 ASM     二.2  实验目标 本次我们模拟2个实验: 1.系统表空间的对象不能闪回 2.在版本为11.2.0.3及以下的情况下,当回收站对象过多时查询表空间大小时涉及

Oracle10g的flashback drop特性

为了加快用户错误操作的恢复,Oracle10g提供了flashback drop的功能. 而在以往的版本中,除了不完全恢复,通常没有一个好的解决办法.目前,Oracle10g为了加快用户错误操作的恢复,提供了flashback drop新特性. flashback drop功能可以允许你从当前数据库中恢复一个被drop了的对象,在执行drop操作时,现在Oracle不是真正删除它,而是将该对象自动将放入回收站.对于一个对象的删除,其实这就是简单的重令名操作. "回收站"我们可以理解为一

【oracle 性能优化】组合索引查询。

在Oracle中可以创建组合索引,即同时包含两个或两个以上列的索引.组合索引的使用存在着一定的局限,只有在谓词中出现全部索引列时才能使用效率最高的index unique scan, 否则谓词中必须包含前导列,否则会走Index full scan或者FTS. SQL> create index idx_test on yangtest (object_type,object_name); 索引已创建. SQL> exec dbms_stats.gather_table_stats(user,

Oracle Local VS Global分区索引简介

在Oracle中,索引和表一样也可以分区.有两种类型的分区索引,本地分区索引(Local )和全局分区索引(Global). 1.本地索引(Local) 本地分区索引使用 LOCAL关键字创建,其分区边界与表相同(即与每个表分区相关联都有一个索引分区),下面 是一个本地分区索引的例子: create table sales_par partitioned by range (year) ( partition p_2009 values less than (2010) partition p_

Oracle学习(三) 索引

在查中文字典的时候,我们之所以能够很快的查到所要查找的字是因为字典建立了索引.同样,为了 高效的获取数据,在数据量比较大的时候,我们需要给表中的某一列建立索引. 建立索引的作用是明显的,主要有: 1.快速存取数据 2.改善数据库性能,保证列值的唯一性 3.在使用order 按照存储方法可以将索引分为B*树索引和位图索引. B*树索引:顾名思义其存储类型就是一棵树,有分支和叶,分支相当于书的大目录,叶则相当于具体 的书页.Oracle用B*树机制存储索引条目,可以保证用最短路径访问键值.默认情况下

oracle点知识7——本地索引+全局索引

以下内同整理自网络: 分区索引分为本地(local index)索引和全局索引(global index). 1.本地索引: 其中本地索引又可以分为有前缀(prefix)的索引和无前缀(nonprefix)的索引.而全局索引目前只支持有前缀的索引. B*树索引和位图索引都可以分区,但是HASH索引不可以被分区.位图索引必须是本地索引(也就是说必须分区).下面就介绍本地索引以及全局索引各自的特点来说明区别: 本地索引特点: 1. 本地索引一定是分区索引,分区键等同于表的分区键,分区数等同于表的分区