欢迎光临
一个有态度、有温度的分享型博客

Oracle Flashback Drop:撤销表删除操作

Oracle中的flashback drop可以挽回DROP TABLE操作的影响。它可以被用于意外删除表操作之后的恢复。Flashback Drop比其他可以在这种情形下使用的恢复机制要快的多,比如point-in-time,而且不会导致事务的丢失和宕机。

当你删除表时,数据库并不会立即删除和表相关联的空间。而是,把表和它相关联的对象重命名,然后放置到数据库的“Recycle Bin” — 回收站。 Flashback Drop操作会将删除的表从回收站中恢复。

为了理解如何使用Oracle Flashback Drop,你必须理解回收站是如何工作的,以及如何访问和管理回收站的内容。

这部分包含了以下话题:

  • 什么是回收站?
  • 表和其他对象在回收站中是如何存储的?
  • 回收站中对象的命名规范
  • 在回收站中查看和查询对象
  • 回收站的容量和空间压力
  • 清除回收站中的对象

一、什么是回收站?

回收站是所有被删除的表及其相关对象的逻辑容器。当一个表被删除了,数据库会将表以及表所依赖的对象存储到回收站中,从而可以在以后得以恢复。表所依赖的对象包括索引、约束、触发器、嵌套表、LOB段和LOB索引段。

二、表和其他对象在回收站中是如何存储的?

当执行了一个DROP TABLE操作后,表及其相关对象会被放置到回收站。例如,执行下面的语句就会把EMPLOYEE_DEMO表以及相关的索引、约束或前面列出的其他对象都放置到回收站中。

SQL> DROP TABLE EMPLOYEE_DEMO;
Table Dropped

表及其相关对象将会留在回收站中,直到它们被从回收站中清除。你可以在SQL*Plus中使用PURGE语句来明确的从回收站中清除表或对象,详见描述Purging Objects from the Recycle Bin。如果你确定不想以后再恢复需要删除的表了,那么你就可以使用DROP TABLE语句的PURGE选项来立即并永久删除这个表,而不是放到回收站中。示例如下:

DROP TABLE employee_demo PURGE;

即使你不从回收站中清除对象,由于表空间的限制数据库也会从回收站中清除对象。详见Recycle Bin Capacity and Space Pressure

三、回收站中对象的命名规范

当一个表和它所依赖的对象被放进回收站,为了避免在某些情况下导致名字冲突,放进回收站的这些表和对象会被指定唯一的名字,可能会产生冲突的情形有:

  • 用户删除了一张表,然后创建了一张相同名字的表,然后又把新创建的表给删除了;
  • 两个用户有两张相同名字的表,而且这两个用户把这个相同名称的表给删除了;

在回收站中,对象的名字是全局唯一的,而且可以被用来和回收站中的其他对象进行区分。对象的名字是按照如下格式形成的

BIN$$globalUID$version

参考文章:

1.Database Backup and Recovery Basics

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址