`
itspace
  • 浏览: 979046 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Oracle 10g flashback table 索引名带来的变化

阅读更多
今天在做测试时,无意中发现索引名出现异常:
引用
SQL> set autot traceonly exp stat
SQL> select * from zhoultest where obj#=1023;

56 rows selected.


Execution Plan
----------------------------------------------------------
Plan hash value: 2999462806

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

| Id  | Operation                   | Name                           | Rows  | B
ytes | Cost (%CPU)| Time     |

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

|   0 | SELECT STATEMENT            |                                |    54 |
4266 |    55   (0)| 00:00:01 |

|   1 |  TABLE ACCESS BY INDEX ROWID| ZHOULTEST                      |    54 |
4266 |    55   (0)| 00:00:01 |

|*  2 |   INDEX RANGE SCAN          | BIN$oeMDlvXEdhjgQBCsowQz5w==$0 |    54 |
     |     3   (0)| 00:00:01 |


该索引名类似于表格被删除之后,在回收站中的名字,但是在回收站并没有该索引对象:
引用
SQL> show recyclebin

情况回收站,也不影响该索引
引用
SQL> purge recyclebin;

Recyclebin purged.

SQL> select INDEX_NAME,INDEX_TYPE from user_indexes where table_name='ZHOULTEST';

INDEX_NAME                     INDEX_TYPE
------------------------------ ---------------------------
BIN$oeMDlvXDdhjgQBCsowQz5w==$0 NORMAL
BIN$oeMDlvXEdhjgQBCsowQz5w==$0 NORMAL
BIN$oeMDlvXFdhjgQBCsowQz5w==$0 NORMAL

后来仔细回忆原来是zhoultest这张表格前几天在做测试时,曾经删除过,后来又将其闪回了。原来Oracle在做表格闪回时,默认将其索引也闪回,但是名字还保留回收站里的名字。
于是可以用以下语法将索引名改名:
引用
SQL> alter index "BIN$oeMDlvXDdhjgQBCsowQz5w==$0" rename to indx1;

Index altered.

在很多系统中,索引名字的命名都有其一套规则,闪回表格之后Oracle为什么不顺便把索引名也附带闪回呢?如果采用系统命名,在以后的管理上会带来诸多的不便。
继续研究:
首先将其余索引重命名
引用
SQL> alter index "BIN$oeMDlvXEdhjgQBCsowQz5w==$0" rename to indx2;

Index altered.

SQL> alter index "BIN$oeMDlvXFdhjgQBCsowQz5w==$0" rename to indx3;

Index altered.

再次将表格删除
引用
SQL> drop table zhoultest;

Table dropped.

观察recyclebin$,我们可以得到很多信息:
引用
SQL> col ORIGINAL_NAME for a30
SQL> col dropscn for 999999999999999
SQL> select OBJ#,OWNER#,ORIGINAL_NAME,DROPSCN,FLAGS from recyclebin$;

      OBJ#     OWNER# ORIGINAL_NAME                           DROPSCN      FLAGS
---------- ---------- ------------------------------ ---------------- ----------
     72817         60 INDX1                            10995361920804         18
     73071         60 INDX2                            10995361920806         18
    246364         60 INDX3                            10995361920808         18
     72659         60 ZHOULTEST                        10995361920813         30

1、从DROPSCN可以看出,Oracle删除表格时先进行索引删除操作。
2、索引在recyclebin$表格中的flag标记是18,table的flag标记是30。
通过查看sql.bsq(在$ORACLE_HOME/rdbms/admin下)可以查看该表格各字段的定义
引用
create table recyclebin$
(
  obj#                  number not null,           /* original object number */
  owner#                number not null,                /* owner user number */
  original_name         varchar2(32),                /* Original Object Name */
  operation             number not null,            /* Operation carried out */
                                                                /* 0 -> DROP */
                                            /* 1 -> TRUNCATE (not supported) */
  type#                 number not null,          /* object type (see KQD.H) */
  ts#                   number,                         /* tablespace number */
  file#                 number,                /* segment header file number */
  block#                number,               /* segment header block number */
  droptime              date,                /* time when object was dropped */
  dropscn               number,           /* SCN of Tx which caused the drop */
  partition_name        varchar2(32),       /* Name of the partition dropped */
                                                           /* NULL otherwise */
  flags                 number,               /* flags for undrop processing */
  related               number not null,    /* obj one level up in heirarchy */
  bo                    number not null,                      /* base object */
  purgeobj              number not null,   /* obj to purge when purging this */
  base_ts#              number,            /* Base objects Tablespace number */
  base_owner#           number,                 /* Base objects owner number */
  space                 number,       /* number of blocks used by the object */
  con#                  number,       /* con#, if index is due to constraint */
  spare1                number,
  spare2                number,
  spare3                number
)

可以看到recyclebin$有4条记录,但show recyclebin只有1条表格记录,可见show recyclebin进行了过滤。用10046跟踪show recyclebin过程
引用
SQL> conn zhoul/zhoul
Connected.
SQL> ALTER SESSION SET EVENTS '10046 trace name context forever, level 12';

Session altered.

SQL> show recyclebin
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
ZHOULTEST        BIN$ogYyR9j5/3/gQBCsowRnLQ==$0 TABLE        2011-04-29:10:11:48
SQL>  ALTER SESSION SET EVENTS '10046 trace name context off';

Session altered.

打开跟踪文件,可以看到在选择数据时对USER_RECYCLEBIN进行了CAN_UNDROP='YES'过滤。
引用
PARSING IN CURSOR #2 len=240 dep=0 uid=60 oct=3 lid=60 tim=1273480412774274 hv=2786599706 ad='25dfe610'
SELECT ORIGINAL_NAME ORIGNAME_PLUS_SHOW_RECYC,OBJECT_NAME OBJECTNAME_PLUS_SHOW_RECYC,TYPE OBJTYPE_PLUS_SHOW_RECYC,DROPTIME DROPTIME_PLUS_SHOW_RECYC FROM USER_RECYCLEBIN WHERE CAN_UNDROP='YES' ORDER BY ORIGINAL_NAME,DROPTIME DESC,OBJECT_NAME
END OF STMT


引用
SQL> SELECT ORIGINAL_NAME ORIGNAME_PLUS_SHOW_RECYC,OBJECT_NAME OBJECTNAME_PLUS_SHOW_RECYC,TYPE OBJTYPE_PLUS_SHOW_RECYC,DROPTIME DROPTIME_PLUS_SHOW_RECYC FROM USER_RECYCLEBIN WHERE CAN_UNDROP='YES' ORDER BY ORIGINAL_NAME,DROPTIME DESC,OBJECT_NAME;

ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
ZHOULTEST        BIN$ogYyR9j5/3/gQBCsowRnLQ==$0 TABLE        2011-04-29:10:11:48

如果不加过滤条件,默认的话,会将索引和表格全部展示:
引用
SQL> SELECT ORIGINAL_NAME ORIGNAME_PLUS_SHOW_RECYC,OBJECT_NAME OBJECTNAME_PLUS_SHOW_RECYC,TYPE OBJTYPE_PLUS_SHOW_RECYC,DROPTIME DROPTIME_PLUS_SHOW_RECYC FROM USER_RECYCLEBIN ;

ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
INDX1            BIN$ogYyR9j2/3/gQBCsowRnLQ==$0 INDEX        2011-04-29:10:11:48
INDX2            BIN$ogYyR9j3/3/gQBCsowRnLQ==$0 INDEX        2011-04-29:10:11:48
INDX3            BIN$ogYyR9j4/3/gQBCsowRnLQ==$0 INDEX        2011-04-29:10:11:48
ZHOULTEST        BIN$ogYyR9j5/3/gQBCsowRnLQ==$0 TABLE        2011-04-29:10:11:48

再次将表格闪回,可以看到索引名是系统命名的,忍不住想问Oracle,既然都将索引闪回了,闪回时为什么不把索引名也重名命一下?

引用
SQL> flashback table zhoultest to before drop;

Flashback complete.

SQL> select INDEX_NAME,INDEX_TYPE from user_indexes where table_name='ZHOULTEST';

INDEX_NAME                     INDEX_TYPE
------------------------------ ---------------------------
BIN$ogYyR9j2/3/gQBCsowRnLQ==$0 NORMAL
BIN$ogYyR9j3/3/gQBCsowRnLQ==$0 NORMAL
BIN$ogYyR9j4/3/gQBCsowRnLQ==$0 NORMAL



分享到:
评论

相关推荐

    oracle 10g flashback(数据恢复)

    ### Oracle 10g Flashback 数据恢复功能详解 Oracle 10g 引入了强大的 Flashback 技术,这是一系列旨在帮助管理员和开发者在出现数据丢失或损坏时能够快速恢复数据的功能集合。该技术从 Oracle 9i 开始引入,并在 ...

    oracle flashback技术总结

    在Oracle 10g及后续版本中,Flashback技术主要包括以下几个方面: 1. **Flashback Database** - **定义**:类似于RMAN的不完全恢复,能够将整个数据库恢复到过去某个时间点的状态。 - **实现方式**:依赖于...

    Oracle 闪回特性 FLASHBACK & RECYCLEBIN

    Flashback Table 的实现是基于 Oracle 的 Flashback Table Log(FTL),该日志记录了表中的所有变化,可以追溯到某个特定的时间点或 SCN。 5. Flashback Drop Flashback Drop 是 Flashback 系列中的一种功能,允许...

    用oracle10g的flashback闪回功能快速恢复oracle中被删除的表

    - **Oracle 10g**:增强了闪回功能,加入了闪回表(Flashback Table)特性,使得恢复被删除的表变得非常简单。 ##### 2. **Flashback 表的工作原理** 当表被删除时,Oracle 10g 并不会立即将表彻底删除,而是将其...

    Oracle10g DBA培训PPT

    这份Oracle10g DBA培训PPT将全面覆盖上述知识点,通过案例研究和实践操作,使学习者能掌握Oracle数据库的核心管理技能,成为一名合格的Oracle DBA。在实际工作中,这些知识将帮助你更好地管理和维护Oracle数据库,...

    oracle11g 百度盘下载

    6. ** flashback技术**:Flashback功能允许用户回溯到数据库的某个历史状态,包括Flashback Query(查询历史数据)、Flashback Transaction(回滚事务)和Flashback Table(回滚表)。 7. **分区技术**:Oracle 11g...

    第16章Oracle闪回(Flashback)技术.pptx

    "Oracle 闪回(Flashback)技术" Oracle 闪回(Flashback)技术是 Oracle...Oracle 11g 的 FLASHBACK 命令可以对表级进行恢复,也可以对数据库级进行恢复。要对数据库级进行恢复,就要用到 FLASHBACK DATABASE 命令。

    Oracle中有后悔药卖吗?Oracle中的回闪查询: Oracle 10g 回闪实验文档

    Oracle 10g的回闪技术为数据库管理和维护带来了革命性的改变,极大地提高了数据安全性。无论是对于误操作的修复还是对数据变更的追溯,这些特性都提供了强有力的支持。通过合理的配置和使用,可以大大减少数据丢失的...

    oracle 10g ppt课件

    8. ** flashback技术**:Oracle 10g引入了闪回功能,如Flashback Query(查询历史状态)、Flashback Table(恢复表到过去状态)和Flashback Transaction Query(查看回滚事务),增强了数据库的恢复能力。...

    Oracle10g数据库管理与应用系统开发光盘

    Oracle10g数据库管理系统是Oracle公司推出的一款强大的关系型数据库管理系统,主要应用于企业级的数据存储、管理和分析。在Oracle10g中,有许多关键的知识点和特性,对于数据库管理员(DBA)和应用开发者来说,深入...

    Oracle_Flashback家族

    这一技术在Oracle 10g版本中得到了极大的增强和发展,形成了一个完整的“Flashback家族”,其中包括Flashback Database、Flashback Drop、Flashback Query(进一步细分为Flashback Query、Flashback Version Query、...

    Oracle10g培训教材sg2

    同时,Oracle10g还引入了Flashback技术,这是一组用于数据恢复的特性,如Flashback Query、Flashback Drop和Flashback Table,它们能够在不影响数据库正常运行的情况下恢复数据至某个时间点的状态。 ### 结论 ...

    Oracle 11g 王二暖ppt文件

    "王二暖ppt文件"可能是一位名叫王二暖的专家或讲师分享的关于Oracle 11g的教程或讲解资料。下面我们将深入探讨Oracle 11g的关键知识点。 1. **RAC(Real Application Clusters)** Oracle 11g的RAC技术允许数据库...

    oracle 9i & 10g

    Oracle数据库是全球广泛使用的大型企业级关系型数据库管理系统之一,其9i和10g版本在21世纪初尤其流行。这两个版本引入了许多创新特性,增强了数据库的性能、可用性和可扩展性。以下是对"Expert Oracle Database ...

    Oracle 11g课件

    10. ** flashback技术**:包括Flashback Query、Flashback Transaction、Flashback Table等功能,用于数据恢复和历史数据分析。 11. **数据库链接与分布式数据库**:允许在不同数据库之间建立链接,实现跨数据库的...

    oracle 11g ,navicat使用

    7.闪回技术:Oracle 11g引入了闪回功能,如闪回查询(Flashback Query)、闪回表(Flashback Table)、闪回事务(Flashback Transaction)等,允许用户查看或恢复到过去某个时间点的数据状态。 8. 安全性:Oracle...

    Oracle11g 考试

    - Flashback技术:理解Flashback Query、Flashback Table和Flashback Transaction的概念和用法。 - Data Guard:设置和管理物理、逻辑和远端备用数据库,实现高可用性。 5. **安全性** - 用户和角色管理:创建、...

    oracle10g学习,

    Oracle 10g是Oracle公司推出的数据库管理系统的一个版本,它在2003年发布,提供了许多增强功能和性能优化,对于数据库管理员(DBA)和开发者来说,它是一个重要的学习平台。本教程旨在帮助您从零基础开始,逐步掌握...

Global site tag (gtag.js) - Google Analytics