WEB开发网
开发学院数据库Oracle Oracle 10g数据库中闪回表特性剖析 阅读

Oracle 10g数据库中闪回表特性剖析

 2007-05-13 12:29:16 来源:WEB开发网   
核心提示: 诸如 SCOTT 等用户可以使用以下命令来清空自己的回收站:PURGE RECYCLEBIN;DBA 可以使用以下命令清除任何表空间中的所有对象:PURGE DBA_RECYCLEBIN;可以看到,可以通过多种不同方法来管理回收站,Oracle 10g数据库中闪回表特性剖析(4),以满足特

诸如 SCOTT 等用户可以使用以下命令来清空自己的回收站:  PURGE RECYCLEBIN;

DBA 可以使用以下命令清除任何表空间中的所有对象:  PURGE DBA_RECYCLEBIN;

可以看到,可以通过多种不同方法来管理回收站,以满足特定的需要。

表版本和闪回功能

用户可能会经常多次创建和删除同一个表,如:  CREATE TABLE TEST (COL1 NUMBER);
  INSERT INTO TEST VALUES (1);
  commit;
  DROP TABLE TEST;
  CREATE TABLE TEST (COL1 NUMBER);
  INSERT INTO TEST VALUES (2);
  commit;
  DROP TABLE TEST;
  CREATE TABLE TEST (COL1 NUMBER);
  INSERT INTO TEST VALUES (3);
  commit;
  DROP TABLE TEST;

此时,如果您要对表 TEST 执行闪回操作,那么列 COL1 的值应该是什么?常规想法可能认为从回收站取回表的第一个版本,列 COL1 的值是 1。实际上,取回的是表的第三个版本,而不是第一个。因此列 COL1 的值为 3,而不是 1。

此时您还可以取回被删除表的其他版本。但是,表 TEST 的存在不允许出现这种情况。您有两种选择:

使用重命名选项:  FLASHBACK TABLE TEST TO BEFORE DROP RENAME TO TEST2;
  FLASHBACK TABLE TEST TO BEFORE DROP RENAME TO TEST1;

这些语句将表的第一个版本恢复到 TEST1,将第二个版本恢复到 TEST2。 TEST1 和 TEST2 中的列 COL1 的值将分别是 1 和 2。或者,使用表的特定回收站名称进行恢复。为此,首先要识别表的回收站名称,然后执行:FLASHBACK TABLE "BIN$04LhcpnoanfgMAAAAAANPw
==$0" TO BEFORE DROP RENAME TO TEST2;
FLASHBACK TABLE "BIN$04LhcpnqanfgMAAAAAANPw
==$0" TO BEFORE DROP RENAME TO TEST1;

这些语句将恢复被删除表的两个版本。

警告

取消删除特性使表恢复其原始名称,但是索引和触发器等相关对象并没有恢复原始名称,它们仍然使用回收站的名称。在表上定义的源(如视图和过程)没有重新编译,仍然保持无效状态。必须手动得到这些原有名称并应用到闪回表。

信息保留在名为 USER_RECYCLEBIN 的视图中。在对表进行闪回操作前,请使用以下查询来检索原有名称。  SELECT OBJECT_NAME, ORIGINAL_NAME, TYPE
  FROM USER_RECYCLEBIN
  WHERE BASE_OBJECT = (SELECT BASE_OBJECT FROM USER_RECYCLEBIN
  WHERE ORIGINAL_NAME = 'RECYCLETEST')
  AND ORIGINAL_NAME != 'RECYCLETEST';
  OBJECT_NAME          ORIGINAL_N TYPE
  ------------------------------ ---------- --------
  BIN$04LhcpnianfgMAAAAAANPw==$0 IN_RT_01  INDEX
  BIN$04LhcpnganfgMAAAAAANPw==$0 TR_RT   TRIGGER

在表进行闪回操作后,表 RECYCLETEST 上的索引和触发器将按照 OBJECT_NAME 列中所示进行命名。根据以上查询,可以使用原始名称重新命名对象,如下所示:  ALTER INDEX "BIN$04LhcpnianfgMAAAAAANPw==$0" RENAME TO IN_RT_01;
  ALTER TRIGGER "BIN$04LhcpnganfgMAAAAAANPw==$0" RENAME TO TR_RT;

一个值得注意的例外情况是位图索引。当删除位图索引时,它们并不放置在回收站中 — 因此无法检索它们。约束名称也无法从视图中检索。必须从其他来源对它们进行重命名。

上一页  1 2 3 4 

Tags:Oracle 数据库 特性

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接