整理有關Flashback的相關資料
簡單概括
閃回功能 |
使用條件 |
Flashback query |
Undo採用自動管理 |
Flashback Version query |
Undo採用自動管理 |
Flashback transaction query |
1.Undo採用自動管理 |
Flashback table |
方法一、開啟recyclebin(預設開啟),適用於drop table後的恢復 |
Flashback database |
開啟閃回區Flashback Recovery Area |
先建立一張表,以下示例均以這張表為例
Create table flash_tbl(id,vl) as select rownum,oname from (select
substr(object_name,1,1) oname from all_objects
group by substr(object_name,1,1) order by 1)
where rownum<=20;一、 Flashback Query
1.1基於時間的查詢
Delete Flash_tbl where id<10;
Commit;
假設5分鐘後,發現使用者發現誤刪了資料,則可以通過如下語句查出5分鐘前,flashback_tbl中的記錄
Select * from flashback_tbl as of timestamp sysdate-5/1440
1.2基於SCN的查詢
獲取資料庫當前的SCN號
方法一:通過DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER函式,此時需給使用者分配許可權(grant execute on DBMS_FLASHBACK TO scott;)
方法二:查詢V$DATABASE中的CURRENT_SCN列,此時需給使用者分配許可權(grant select on v_$database to scott);
刪除前查詢下資料庫的SCN號
Select dbms_flashback.get_system_change_number from dual;
----------------------------
1613083
Delete Flash_tbl where id<10;
Commit;
此時可以通過指定SCN號來進行SCN=1613083時資料的查詢
SELECT * FROM FLASH_TBL AS OF SCN 1613083;
備註:1. Flashback query 不會更改資料,只是顯示某個時間點上表中的資料
2.使用SCN查詢會比TIMESTAMP 更精確,實際上指定TIMESTAMP查詢,Oracle也是將其轉換成SCN。具體轉換規則是通過SYS.SMON_SCN_TIME實現的,可以通過兩個函式進行轉換
Select timestamp_to_scn(sysdate) from dual
Select to_char(SCN_TO_TIMESTAMP(1613168),’yyyy-mm-dd’) from dual
3.並非可以查詢到任何時間點的資料,需受undo_retention和undo空間大小限制。
4.如果更改表結構(drop/modify 列、move表、drop分割槽、
Truncate Table/分割槽)是不能使用閃回查詢
一、 FLASHBACK Version Query
適用於檢視一段時間內某一物件多次修改的記錄
語法格式:SELECT ID,VL,VERSIONS_STARTSCN,
VERSIONS_ENDSCN,VERSIONS_OPERATION,VERSIONS_XID FROM FLASH_TBL VERSIONS BETWEEN SCN 1613083 AND 1613819;
備註:Flashback Query 中Version Query的偽列說明
VERSIONS_STARTSCN |
該條記錄操作時的SCN或時間,如果為空,表示該行記錄是在查詢範圍外建立的 |
VERSIONS_ENDSCN |
該條記錄失效時的SCN或時間,如果為空,說明記錄當前時間在當前表內部存在,或者已經被刪除,可以配合著VERSION_OPERATION列來看,如果VERSION_OPERATION列值為D,說明該列已被刪除;如果該列為空,則說明記錄在這段時間無操作 |
VERSIONS_XID |
該操作的事務ID |
VERSIONS_OPERATION |
對該行執行的操作:I表示INSERT,D表示DELETE,U表示UPDATE |
假設上述SQL查詢出的結果如下,解釋如下
ID |
VL |
VERSIONS_STARTSCN |
VERSIONS_ENDSCN |
VERSIONS_OPERATION |
VERSIONS_XID |
含義 |
201 |
A1 |
1636927 |
|
I |
05000C0029050000 |
在SCN=1636927時insert,至現在還有效 |
4 |
C |
1636904 |
|
D |
06001300D7050000 |
記錄在SCN=1636904時被刪除 |
3 |
B |
1636904 |
|
D |
06001300D7050000 |
記錄在SCN=1636904時被刪除 |
2 |
A |
1636904 |
|
D |
06001300D7050000 |
記錄在SCN=1636904時被刪除 |
1 |
/ |
1636904 |
|
D |
06001300D7050000 |
記錄在SCN=1636904時被刪除 |
120 |
S |
1636892 |
|
U |
400120077040000 |
記錄在SCN=1636892時被更新,至現在還有效 |
119 |
R |
1636892 |
|
U |
400120077040000 |
記錄在SCN=1636892時被更新,至現在還有效 |
118 |
Q |
1636892 |
|
U |
400120077040000 |
記錄在SCN=1636892時被更新,至現在還有效 |
117 |
P |
1636892 |
|
U |
400120077040000 |
記錄在SCN=1636892時被更新,至現在還有效 |
116 |
O |
1636892 |
|
U |
400120077040000 |
記錄在SCN=1636892時被更新,至現在還有效 |
1 |
/ |
|
1636904 |
|
|
記錄在SCN=1636904失效 |
2 |
A |
|
1636904 |
|
|
記錄在SCN=1636904失效 |
3 |
B |
|
1636904 |
|
|
記錄在SCN=1636904失效 |
4 |
C |
|
1636904 |
|
|
記錄在SCN=1636904失效 |
5 |
D |
|
|
|
|
記錄在SCN範圍外建立,至現在未有任何操作,還有效 |
6 |
E |
|
|
|
|
記錄在SCN範圍外建立,至現在未有任何操作,還有效 |
7 |
F |
|
|
|
|
記錄在SCN範圍外建立,至現在未有任何操作,還有效 |
8 |
G |
|
|
|
|
記錄在SCN範圍外建立,至現在未有任何操作,還有效 |
9 |
H |
|
|
|
|
記錄在SCN範圍外建立,至現在未有任何操作,還有效 |
10 |
I |
|
|
|
|
記錄在SCN範圍外建立,至現在未有任何操作,還有效 |
11 |
J |
|
|
|
|
記錄在SCN範圍外建立,至現在未有任何操作,還有效 |
12 |
K |
|
|
|
|
記錄在SCN範圍外建立,至現在未有任何操作,還有效 |
13 |
L |
|
|
|
|
記錄在SCN範圍外建立,至現在未有任何操作,還有效 |
14 |
M |
|
|
|
|
記錄在SCN範圍外建立,至現在未有任何操作,還有效 |
15 |
N |
|
|
|
|
記錄在SCN範圍外建立,至現在未有任何操作,還有效 |
16 |
O |
|
1636892 |
|
|
記錄在SCN=1636892失效 |
17 |
P |
|
1636892 |
|
|
記錄在SCN=1636892失效 |
18 |
Q |
|
1636892 |
|
|
記錄在SCN=1636892失效 |
19 |
R |
|
1636892 |
|
|
記錄在SCN=1636892失效 |
20 |
S |
|
1636892 |
|
|
記錄在SCN=1636892失效 |
一、 使用FLASHBACK Transaction Query
查詢某表修改記錄,並給出回滾SQL,但不能檢視當時修改的SQL,只能通過回滾SQL猜測。
示例如下
delete flash_tbl where id = 401;
從FLASHBACK_TRANSACTION_QUERY查詢
select xid, commit_scn, commit_timestamp, operation, undo_sql
from flashback_transaction_query q
where q.xid in
(select versions_xid
from flash_tbl versions between scn 1643896 and 1643905)
XID |
COMMIT_SCN |
COMMIT_TIMESTAMP |
OPERATION |
UNDO_SQL |
06000D00D9050000 |
1643902 |
2015/3/19 9:51 |
DELETE |
insert into "XXCARA"."FLASH_TBL"("ID","VL") values ('401','A1'); |
06000D00D9050000 |
1643902 |
2015/3/19 9:51 |
BEGIN |
|
一、 Flashback Table
4.1 從Recycle bin中恢復
適用於不小心drop 掉table的情形
簡單示例如下
Drop table flash_tbl;
可以從recycle bin中查詢到
select * from recyclebin where original_NAME='FLASH_TBL';
我們可以直接利用以下語句直接閃回
Flashback table flash_tbl to before drop;
複雜示例如下
情景一:待閃回的表名(例flash_tbl)在資料庫中已又有了相同名字的表,這時候需要對待閃回的表進行rename
Flashback table flash_tbl to before drop rename to flash_tbl_new;
情景二:多個同名物件均被刪除多次,預設情況下是最先刪除的表最先被恢復,但是我們可以通過指定Recycle Bin中的物件名來恢復
Flashback table “BIN$EZwIUFv2DOXgUwEAAH+rmg==$0” to before drop;
備註:如果刪除分割槽表的某一分割槽,則無法通過此方法恢復已刪除的分割槽。
4.2 從UNDO中恢復
適用於處理的表不是被意外刪除,而是被反覆修改,希望回到某個時間點
Flashback語句:Flashback table Flash_tbl to scn 1666152
五、閃回資料庫
有關閃回資料庫部分暫不整理
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30158401/viewspace-1465794/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 運維相關的資料整理運維
- SOA相關資料整理分享
- iOS相關學習資料的整理iOS
- 非常全的大資料相關資源整理大資料
- 前端面試資料整理【相關知識篇】前端面試
- 資料庫相關知識點(秋招整理)資料庫
- 大資料相關技術有哪些?大資料
- Spring相關整理Spring
- ArcGIS GP地理處理相關資料收集整理
- 記錄資料相關的演算法整理(持續更新)演算法
- 資料庫相關資料庫
- 大資料相關大資料
- dtrace 相關資料
- Retrofit相關資料
- DNN 相關資料DNN
- 遊戲相關資料遊戲
- [perl]資料相關
- Java相關問題整理Java
- 資料卷的相關命令
- 效能優化的相關策略整理優化
- 資料庫的FLASHBACK 與ARCHIVELOG模式的關係資料庫Hive模式
- c++ 相關的技術資源整理歸類C++
- 一季度大資料熱門工具相關事件整理大資料事件
- 表單資料相關
- 蒐集到的Weex 相關資料
- PL/SQL相關的資料字典SQL
- 多執行緒相關整理執行緒
- oracle字符集相關整理Oracle
- flashback總結二之相關的三個檢視
- 資料的相關性或因果關係 - KDnuggets
- 資料關係比較:相關性 vs 因果關係
- 資料分析相關軟體
- 資料庫 (相關練習)資料庫
- java相關資料下載Java
- python http 相關資料PythonHTTP
- Python相關資料收集Python
- Android 支付相關資料Android
- dbms_scheduler 相關資料