Backup And Recovery User's Guide-執行閃回刪除操作

LuiseDalian發表於2014-02-28

執行閃回刪除操作

使用FLASHBACK TABLE…TO BEFORE DROP語句從回收站恢復物件。

可以指定表在回收站中的名稱或原始的名稱。

場景:

假設錯誤地刪除了表。

許多次你被請求在測試庫中刪除表,但這次你意外地連線到了生產庫並刪除了hr.employee_demo表。

規劃:使用FLASHBACK TABLE獲取刪除的物件

練習:獲取刪除的表

--1. 使用SQL*Plus連線到目標資料庫,並從回收站獲取被刪除的表的名稱

--1.1 ORIGINAL NAMERRECYCLEBIN NAME分別為物件的原始名稱和在回收站中的名稱

SHOW RECYCLEBIN;

ORIGINAL NAME    RECYCLEBIN NAME                   TYPE         DROP TIME

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

EMPLOYEE_DEMO    BIN$gk3lsj/3akk5hg3j2lkl5j3d==$0  TABLE    2005-04-11:17:08:54

--1.2 也可以檢視USER_RECYCLEBINDBA_RECYCLEBIN來獲取表的名稱

SELECT object_name AS recycle_name, original_name, type FROM recyclebin;

RECYCLE_NAME                      ORIGINAL_NAME          TYPE

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

BIN$gk3lsj/3akk5hg3j2lkl5j3d==$0  EMPLOYEE_DEMO          TABLE

BIN$JKS983293M1dsab4gsz/I249==$0  I_EMP_DEMO             INDEX

-- 如果你計劃手動地還原依賴物件的原始名稱,則在還原表之前要確保清楚每個依賴的物件的系統產生的回收站的名稱

-- 注意物件檢視例如DBA_OBJECTS不顯示回收站物件

-- 2. (可選),查詢在回收站中的表.必須在查詢中使用物件的回收站名稱而不是原始名稱

SELECT * FROM   "BIN$gk3lsj/3akk5hg3j2lkl5j3d==$0";

-- 注意:如果你具有必須的許可權,則也可以在回收站中的表上使用閃回查詢,但只能使用回收站名稱而不是原始名稱。

--       不能在回收站中的物件上執行DMLDDL操作。

--3. 獲取刪除的表. 使用FLASHBACK TABLE ... TO BEFORE DROP

--3.1 使用回收站物件名稱,要用雙引號引起來,因為在名稱中有特殊字元

FLASHBACK TABLE "BIN$gk3lsj/3akk5hg3j2lkl5j3d==$0" TO BEFORE DROP;

--3.2 使用原始名稱

FLASHBACK TABLE HR.EMPLOYEE_DEMO TO BEFORE DROP;

--3.3 給還原後的表指定新的名稱

FLASHBACK TABLE "BIN$KSD8DB9L345KLA==$0" TO BEFORE DROP RENAME TO hr.emp_demo;

--4. (可選)驗證所有依賴的物件仍然是系統產生的回收站物件名稱

SELECT INDEX_NAME FROM   USER_INDEXES WHERE  TABLE_NAME = 'EMPLOYEE_DEMO';

INDEX_NAME

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

BIN$JKS983293M1dsab4gsz/I249==$0

--5. 將獲取的索引改名為原始的名稱

ALTER INDEX "BIN$JKS983293M1dsab4gsz/I249==$0" RENAME TO I_EMP_DEMO;

--6. 如果獲取的表在它被放入回收站之前具有引用約束,則重建約束。這步必須手動完成,因為回收站不會保留引用約束。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17013648/viewspace-1096758/,如需轉載,請註明出處,否則將追究法律責任。

相關文章