Oracle Flashback(一)
閃回表(Flashback Table)
使用該特性,可以確保資料庫表能夠被恢復到之前的某一個時間點上。注意,該功能與最早的9i中的Flashback Query不同,Flashback Query僅僅是得到了表在之前某個時間點上的快照而已,並不改變當前表的狀態;而Falshback Table卻能夠將表及附屬物件一起恢復到以前的某個時間點。該功能基於撤銷資料(undodata)。
使用閃回表,可將一個或多個表恢復到特定的時間點,而不需要還原備份;從還原表空間檢索資料後可執行閃回表操作;執行閃回表操作需要flashback any table許可權;必須對要執行閃回操作的表啟用行移動。
閃回表示例如下:
首先查詢undo引數資訊:
SQL> show parameter undo;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS1
1.基於時間戳的閃回表
現不小心刪除scott使用者下的myemp表,演示基於時間戳的閃回表操作
1)賦予scott使用者flashback any table許可權,使表myemp能夠行移動
SQL> grant flashback any table to scott;
Grant succeeded.
SQL> conn scott/tiger;
Connected.
SQL> select * from tab;
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
MYEMP TABLE
DEPT TABLE
EMP TABLE
BONUS TABLE
SALGRADE TABLE
SQL> alter table myemp enable row movement;
Table altered.
2)更新表myemp 如下:
SQL> set time on;
00:02:25 SQL> select count(*) from myemp;
COUNT(*)
----------
14
00:02:44 SQL> insert into myemp select * from myemp;
14 rows created.
00:03:16 SQL> commit;
Commit complete.
00:03:20 SQL> select count(*) from myemp;
COUNT(*)
----------
28
00:03:27 SQL> insert into myemp select * from myemp;
28 rows created.
00:03:36 SQL> commit;
Commit complete.
00:03:46 SQL> select count(*) from myemp;
COUNT(*)
----------
56
3)執行閃回表操作
00:03:55 SQL> select sysdate from dual;
SYSDATE
---------
18-JUN-14
00:08:45 SQL> flashback table myemp to timestamp to_timestamp('2014-06-18 00:03:46','yyyy-mm-dd hh24:mi:ss');
Flashback complete.
00:09:23 SQL> select count(*) from myemp;
COUNT(*)
----------
28
00:08:45 SQL> flashback table myemp to timestamp to_timestamp('2014-06-18 00:03:46','yyyy-mm-dd hh24:mi:ss');
Flashback complete.
00:09:23 SQL> select count(*) from myemp;
COUNT(*)
----------
28
批註:最好在之前設定的時間點3s之後執行閃回操作
00:09:27 SQL> flashback table myemp to timestamp to_timestamp('2014-06-18 00:03:50','yyyy-mm-dd hh24:mi:ss');
Flashback complete.
00:10:10 SQL> select count(*) from myemp;
COUNT(*)
----------
56
批註:只要在設定的UNDO保留的900s之內,可以執行任意基於時間點的表閃回操作。
2.基於SCN的閃回表
1)對scoot使用者下的myemp表執行如下操作:
SQL> conn / as sysdba
Connected.
SQL> select count(*) from scott.myemp;
COUNT(*)
----------
56
SQL> select current_scn from v$database; --檢視當前資料庫的SCN號
CURRENT_SCN
-----------
606722
SQL> insert into scott.myemp select * from scott.myemp;
56 rows created.
SQL> commit;
Commit complete.
SQL> select count(*) from scott.myemp;
COUNT(*)
----------
112
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
606736
SQL> delete from scott.myemp;
112 rows deleted.
SQL> commit;
Commit complete.
SQL> select count(*) from scott.myemp;
COUNT(*)
----------
0
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
606756
2)基於SCN號的閃回表
SQL> flashback table scott.myemp to scn 606722;
Flashback complete.
SQL> select count(*) from scott.myemp;
COUNT(*)
----------
56
SQL> flashback table scott.myemp to scn 606736;
Flashback complete.
SQL> select count(*) from scott.myemp;
COUNT(*)
----------
112
SQL> flashback table scott.myemp to scn 606756;
Flashback complete.
SQL> select count(*) from scott.myemp;
COUNT(*)
----------
0
批註:只要在設定的UNDO保留的900s之內,可以執行任意基於SCN的表閃回操作。
閃回刪除(Flashback Drop)
閃回刪除類似於作業系統的垃圾回收站功能,可以從中恢復被drop的表或者索引。該功能基於回收站(RecycleBin)。 如果使用drop table指令刪除表,該表不會從資料庫中立即刪除,而是儲存原表的位置,但是將刪除的表重新命名,並將刪除的表資訊儲存在回收站中,回收站記錄了被刪除表的新名字和原名字,記錄在回收站中資訊會保留一段時間,直到回收站空間不足或者使用purge指令刪除回收站中的記錄。回收站是一個邏輯結構,不具有物理資料結構,只要刪除的表資訊記錄在回收站中,就可以透過閃回技術恢復誤刪除的表。
資料字典檢視USER_RECYCLEBIN和DBA_RECYCLEBIN供使用者查詢資料庫中回收站中記錄的資訊。
閃回刪除不適用於:駐留在system表空間中的表;使用細粒度級審計或虛擬專用資料庫的表; 駐留在字典管理表空間中的表;已清除的表,無論是手動刪除的,還是在空間壓力下自動刪除的。
閃回刪除示例1如下:
首先,要啟動閃回刪除,關鍵是啟動recyclebin,預設情況下是啟動的
SQL> show parameter recyclebin;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
recyclebin string on
1.刪除scott使用者下的myemp表
SQL> drop table myemp;Table dropped.
SQL> show recyclebin; --此時recyclebin是user_recyclebin的同義詞
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
MYEMP BIN$/ArGYSO8X4TgQKjACgoP7Q==$0 TABLE 2014-06-18:00:38:34
批註:在重新命名被刪除的表時,也會重新命名該表的依賴物件如涉及的索引、觸發器等,在恢復表時,該表涉及的依賴物件會自動恢復,但是會保留系統名稱。
2.恢復刪除的表
SQL> flashback table "BIN$/ArGYSO8X4TgQKjACgoP7Q==$0" to before drop;
Flashback complete.
批註:如果知道刪除之前的表名,也可以如下方式恢復誤刪除的表 flashback table myemp to before drop;
SQL> select tname,tabtype from tab where tname like '%MYEMP%'; --驗證表是否恢復
TNAME TABTYPE
------------------------------ -------
MYEMP TABLE
批註:閃回的時候也可以為表重新命名,如下
SQL> flashback table "BIN$/ArGYSO8X4TgQKjACgoP7Q==$0" to before drop rename to emp;
閃回刪除示例2如下:
1.在scott使用者下建立mydept表,
SQL> create table mydept as select * from dept;
2.建立基於表mydept下欄位dname的索引
SQL> create index mydept_dname on mydept(dname);
Index created.
SQL> select table_name,index_name from user_indexes where table_name like '%MYDEPT%'; --檢視索引是否建立成功
TABLE_NAME INDEX_NAME
------------------------------ ------------------------------
MYDEPT MYDEPT_DNAME
3.現在刪除mydept表,然後閃回,檢視基於該表的索引名稱的變化,如下:
SQL> drop table mydept;
Table dropped.
SQL> show recyclebin;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
MYDEPT BIN$/AwWTga9PSHgQKjACgoQJA==$0 TABLE 2014-06-18:01:00:55
SQL> select table_name,index_name from user_indexes where table_name like '%MYDEPT%'; --查詢可知基於表mydept中欄位dname的索引已經刪除
no rows selected
4.執行閃回表操作
SQL> flashback table "BIN$/AwWTga9PSHgQKjACgoQJA==$0" to before drop;
Flashback complete.
查詢基於表mydept的索引閃回情況,如下:
SQL> select table_name,index_name from user_indexes where table_name like '%MYDEPT%';
TABLE_NAME INDEX_NAME
------------------------------ ------------------------------
MYDEPT BIN$/AwWTga8PSHgQKjACgoQJA==$0
批註:我們看到mydept的索引閃回成功,但是名稱依然是在閃回表時的為該索引起的名字,所以需要使用者自己修改該索引的名字。
SQL> drop index "BIN$/AwWTga8PSHgQKjACgoQJA==$0";
Index dropped.
SQL> create index mydept_dname on mydept(dname);
Index created.
SQL> select table_name,index_name from user_indexes where table_name like '%MYDEPT%';
TABLE_NAME INDEX_NAME
------------------------------ ------------------------------
MYDEPT MYDEPT_DNAME
補充:回收站相關操作
1.回收站:手動回收空間
使用 PURGE 命令可從回收站中永久地刪除物件。從回收站中清除某個物件時,會從資料庫中永久地刪除該物件及其相關物件。因此,將無法再使用閃回刪除功能恢復從回收站中清除的物件。下面是可能使用的一些 PURGE 命令:
PURGE TABLE 清除指定表。
PURGE INDEX 清除指定索引。
PURGE TABLESPACE 清除駐留在指定表空間內的所有物件。另外,如果駐留在其它表空間內的物件是相關的,則這些物件也可能被清除。此外,還可以指定 USER 子句,以僅清除屬於指定使用者的那些物件,這些物件對於指定表空間執行於較低的磁碟限額上。
PURGE RECYCLEBIN 清除屬於當前使用者的所有物件。RECYCLEBIN 與 USER_RECYCLEBIN 功能相同。
PURGE DBA_RECYCLEBIN 清除所有物件。要發出此命令,必須具有足夠的系統許可權或 SYSDBA 系統許可權。
批註:對於 PURGE TABLE 和 PURGE INDEX 命令,如果指定原始名稱且回收站包含多個具有該名稱的物件,則首先清除位於回收站中時間最長的物件 (FIFO)。
2.繞過回收站
可以使用 DROP TABLE PURGE 命令從資料庫中永久地刪除表及其相關物件。使用此命令時,對應的物件不會移動到回收站中。此命令的功能與 DROP TABLE 在先前版本中提供的功能相同。
發出 DROP TABLESPACE ...INCLUDING CONTENTS 命令後,表空間中的物件不會移到回收站中。而且,回收站中屬於該表空間的物件也將被清除。發出沒有 INCLUDING CONTENTS 子句的相同命令時,要使命令能夠成功地得以執行,表空間必須是空的。但回收站中可以有屬於該表空間的物件。在這種情況下,這些物件將被清除。
發出 DROP USER ...CASCADE 命令後,將從資料庫中永久地刪除該使用者及其擁有的所有物件。回收站中屬於已刪除使用者的所有物件都將被清除。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29634949/viewspace-1185670/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle FlashbackOracle
- 【FLASHBACK】Oracle flashback data archive 介紹OracleHive
- [Flashback]Oracle flashback儲存過程Oracle儲存過程
- oracle的flashbackOracle
- Oracle Flashback(二)Oracle
- 【原創】Oracle Flashback 知行合一Oracle
- oracle flashback特性(2.1)--Flashback Table之RECYCLEBINOracle
- oracle flashback特性(3.2)--Flashback Database操作示例OracleDatabase
- 應用oracle flashback--Flashback Database介紹OracleDatabase
- 應用oracle flashback--Flashback Table之RECYCLEBINOracle
- Oracle Flashback Data ArchiveOracleHive
- oracle 閃回 flashbackOracle
- Oracle的flashback功能Oracle
- oracle recyclebin和flashbackOracle
- Oracle -- flashback database基於ARC+flashback_log還是flashback_logOracleDatabase
- Oracle10g的Flashback之Flashback Transaction QueryOracle
- 【徵文】應用oracle flashback(3.2)--Flashback Database操作示例OracleDatabase
- 【徵文】應用oracle flashback(2.1)--Flashback Table之RECYCLEBINOracle
- ORACLE Flashback Query偽列Oracle
- Oracle 10g flashbackOracle 10g
- flashback總結一之Flashback_DatabaseDatabase
- 全面學習oracle flashback特性(3.2)--Flashback Database操作示例OracleDatabase
- 全面學習oracle flashback特性(2.1)--Flashback Table之RECYCLEBINOracle
- Oracle 10g FlashBack簡單應用一則Oracle 10g
- oracle flashback特性(2.2)--Flashback Table之從UNDO中恢復Oracle
- 【徵文】應用oracle flashback(2.3)--Flashback Table之注意事項Oracle
- oracle 10g flashback databaseOracle 10gDatabase
- oracle flashback技術詳解Oracle
- Flashback Data Archive (Oracle Total Recall)HiveOracle
- Oracle 閃回特性(FLASHBACK DATABASE)OracleDatabase
- Oracle FlashBack 學習筆記Oracle筆記
- Oracle Flashback 技術 總結Oracle
- Flashback [Oracle SQL] 使用方法OracleSQL
- Overview of Oracle Flashback Query I (366)ViewOracle
- Overview of Oracle Flashback Query II (367)ViewOracle
- Oracle Flashback技術總結Oracle
- oracle實驗記錄 (flashback)Oracle
- oracle 10g flashback version query 和 flashback transaction query實驗Oracle 10g