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...