rollback與flashback的區別

2021-06-17 00:15:55 字數 3403 閱讀 8448

1、flashback---閃回:實現閃回資料庫的基礎是閃回日誌,配置了閃回資料庫後會自動建立閃回日誌,只要資料庫裡資料發生變化,就會將資料被修改前舊址放入閃回日誌。閃回主要用於出現邏輯錯誤時比如誤刪除表,誤刪除使用者等,快速完成對業務資料的恢復。

flashback具體來說有

4種常用的操作,這幾種操作雖然都冠以

flashback

,但是還是有著一些較大的差別

ø flashback database(閃回資料庫

)對應flashback database

來說,一般用來處理誤刪除了

user

或者一些錯誤的資料操作。

要使用flash database

的特性。我們一定要啟動

flashback

功能,sql>alter database flashback on; 如果要關閉使用

alter database flashback off;

同時要配置和檢查引數db_flashback_retention_target

,這個是控制

flashback log

的保留時間的引數,預設是

1440

分鐘,即

24小時。我們也只能恢復到這個時間之內。

使用如下

sql>shutdown immediate;

sql>startup open exclusive;

sql>flashback database to timestamp to_date(』2009-05-13 00:35:50′, 『yyyy-mm-dd hh24:mi:ss』);

或者基於scn

號sql>flashback database to scn 5342420;

先用read only

模式開啟資料庫,確定恢復的正確性,如果不對,調整時間或者

scn,直到確認資料恢復正確。以

resetlogs

的方式開啟資料庫,由於

flashback log

和redo log

是分開的,所以即使

resetlogs

,閃回區的內容依然存在,我們一樣能夠能夠閃回到以

resetlog

開啟資料庫點之錢的那個狀態上,只有當

flashback

的開關關掉以後,閃回區的內容將自動刪除。

ø flashback drop(閃回刪除)

用來恢復被誤drop

掉的表的恢復,這裡有乙個我以前錯誤理解的乙個地方,其實這裡的

flash drop

已經脫離了

flashback log

,在10g

的版本裡,

oracle

在表刪除以後,並沒有真的把這個表刪除,而是對刪除表做了重新命名,並且用

recycle bin

來對其進行管理,我們可以通過

user_recyclebin

和dba_recyclebin

來進行查詢

.sql>select * from user_recyclebin或者是

select * from dba_recyclebin;

通過flashback table testtable to before drop.

有時可能乙個表被反覆的建立和drop

,這樣在

recycle

乙個origianl name

的有多個記錄相對,預設將是恢復最後乙個,如果要指定恢復乙個可以用他們的可以通過指定

name

的方式

ø flashback table(閃回表)

有時,不小心,對錶進行了錯誤的update

,那麼我們就可以通過這個

feature

來進行恢復,比如,我們

update … set … where ..

或者delete

了表裡不應該的資料,我們可以使用

flashback table testtable to timestamp to_date

((』2009-05-13 00:35:50′, 『yyyy-mm-dd hh24:mi:ss』)

),這裡要注意和前兩個不同的,這裡是利用

undo

表做恢復的基準,所以有關

undo

的引數undo_management

和undo_retention

對這個有影響。具體可以看看這兩個引數的說明文件。注,

flashback table

是只能處理

dml操作過後的語句的恢復,如果在期間有

ddl語句操作到這個表上,做

flashback table

時將報錯

ora-01466: unable to read data - table definition has changed

。在做flashback table

時先要alter table t enable row movement。

ø flashback query(閃回查詢)

閃回查詢好像以前版本有過,在10g

裡。使用

select * from t as of timestamp

或者select * from t as of scn .flash query

也是利用

unod

表空間裡的

undo

資料,所以和

3一樣,

原來對這幾個flashback

的feature

的理解是一致的,都是基於

flashback log

的,通過以上的描述可以看到,只有

flashback database

是基於flashback log

的,所以只有在

flashback on

的時候才能使用,而其他幾個分別和

undo

以及資料庫字典

dba_recyclebin/user_recyclebin,

所以flashback

不考慮flashback_on

的狀況。

可以通過sql>select * from v$database;

來查詢flashback_no

的值。

2、rollback---回滾:用回滾段作為恢復依據,

執行dml

以後,發出

rollback

命令撤銷

dml所作變化。

oracle

利用記錄在資料快

itl槽裡的

undo

位址找到對應

undo

塊,取出資料完成對事物所作的變化回滾。

3、區別:回滾適用於dml,

閃回操作一般對應於

ddl。

佇列Rollback的設計

有乙個佇列包含了n個block,每個block是佇列中的乙個元素。block很大,乙個block中可以容納m個item m 1 這個佇列的基本使用模式就是 不斷的有item過來,往block裡面填充,一旦block滿,就建立乙個新的block,後繼item都填往新block。rollback的定義 ...

oracle中rollback的使用

rollback使用 sql create table tbl name varchar2 10 table created.sql insert into tbl values zhiqiao 1 row created.sql select from tbl name zhiqiao sql d...

jdbc實現批量提交rollback

最近上了乙個老專案,要修改一些業務,具體的思路是在jsp中實現對資料的某些批量操作,因此做一下筆記。1.整體jdbc建立連線 關閉連線 conn dbutil.getconnection statement conn.createstatement resultset null 儲存當前提交狀態 b...