oracle中闪回和回滚,oracle闪回操作详解
Oracle的閃回
oracle中為什么會有閃回呢!它的作用是什么呢?我們來學習一下閃回吧!閃回和回滾異曲同工之妙。
一閃回的介紹
(1)在Oracle的操作工程中,會不可避免地出現操作失誤或者用戶失誤,例如不小心刪除了一個表等,這些失誤和錯誤可能會造成重要數據的丟失,最終導致Oracle數據庫停止允許。
(2)在傳統意義上,當發生數據丟失、數據錯誤問題時,解決的主要辦法是數據的導入導出、備份恢復技術,這些方法都需要在發生錯誤前,有一個正確的備份才能進行恢復。
(3)為了減少這方面的損失,Oracle提供了閃回技術。有了閃回技術,就可以實現數據的快速恢復,而且不需要數據備份。
有了閃回,那他的優點是什么呢?
(1)恢復中,閃回技術是革命性的進步
(2)傳統的恢復技術緩慢:
它是整個數據庫或者一個文件恢復,不只恢復損壞的數據
在數據庫日志中每個修改都必須被檢查
(3)閃回速度快:
通過行和事務把改變編入索引
僅僅改變了的數據會被恢復
(4)閃回命令很容易:
沒有復雜棘手的多步程序
閃回的類型:
閃回表(flashback table)、閃回刪除(flashback drop)、閃回版本查詢(flashback version query)、閃回事務查詢(flashback transaction query)
閃回的益處
(1)恢復中,閃回技術是革命性的進步
(2)傳統的恢復技術緩慢:
?它是整個數據庫或者一個文件恢復,不只恢復損壞的數據
?在數據庫日志中每個修改都必須被檢查
(3)閃回速度快:
?通過行和事務把改變編入索引
?僅僅改變了的數據會被恢復
(4)閃回命令很容易:
?沒有復雜棘手的多步程序
二閃回表的使用
1.閃回表
閃回表,實際上是將表中的數據快速恢復到過去的一個是焦點或者系統改變號SCN上。實現表的閃回,需要使用到與撤銷表空間相關的undo信息,通過show parameter undo命令可以了解這些信息。
用戶對表數據的修改操作,都記錄在撤銷表空間中,這為表的閃回提供了數據恢復的基礎。例如,某個修改操作在提交后被記錄在撤銷表空間中,保留時間為900秒,用戶可以在這900秒的時間內對表進行閃回操作,從而將表中的數據恢復到修改之前的狀態。
執行表的閃回,需要有flashback any table的權限
2.舉例
(1)查詢閃回信息
SQL> show parameter undo;
NAMETYPEVALUE
------------------------------------ ----------- ------------------------------
undo_managementstringAUTO
undo_retentioninteger900
undo_tablespacestringUNDOTBS1
(2)修改閃回信息
在修改時首先要切換用戶,為conn system/orcl,然后再修改為:
SQL> alter system set undo_retention=1200 scope=both;
System altered
(3)在修改密碼的時候要先打開比表的行移動開關
打開行移動開關
SQL> alter table flashbacktable enable row movement;
Table altered
(4)閃回的應用
通過temestamp閃回
首先要先創建表來存儲數據:
SQL> create table flashbacktable(id number,ename varchar2(20));
Table created
然后向其中插入數據
SQL> insert into flashbacktable values(5,'sdf');
1 row inserted
commit;
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
TO_CHAR(SYSDATE,'YYYY-MM-DDHH2
------------------------------
2012-03-23 15:24:53
SQL> flashback table flashbacktable to timestamp to_date('2012-03-23 15:24:53','yyyy-mm-dd hh24:mi:ss');
Done
在查詢數據的時候剛才插入的數據沒有了,注意是在提交之后執行的閃回
通過scn號閃回
首先查詢出當前日期的scn號
SQL> select timestamp_to_scn(sysdate) from dual;
TIMESTAMP_TO_SCN(SYSDATE)
-------------------------
1335034
然后向表中插入數據
SQL> insert into flashbacktable values(12,'dfds');
1 row inserted
SQL> insert into flashbacktable values(13,'dfds');
1 row inserted
SQL> select timestamp_to_scn(sysdate) from dual;
TIMESTAMP_TO_SCN(SYSDATE)
-------------------------
1335053
SQL> update flashbacktable set ename='aaaaaaaaaa' where id=12;
1 row updated
SQL> select timestamp_to_scn(sysdate) from dual;
TIMESTAMP_TO_SCN(SYSDATE)
-------------------------
1335088
因為有三個階段的scn,所以可以指定那個scn來閃回
執行的語句為:
SQL> flashback table flashbacktable to scn(1335053);
Done
三閃回刪除
閃回刪除,實際上從系統的回收站中將已刪除的對象,恢復到刪除之前的狀態。
系統的回收站只對普通用戶有作用
1.閃回表刪除的介紹
(1)回收站是所有被刪除對象及其相依對象的邏輯存儲容器,例如當一個表被刪除(drop)時,該表及其相依對象并不會馬上被數據庫徹底刪除,而是被保存到回收站中。
(2)回收站將用戶執行的drop操作記錄在一個系統表中,也就是將被刪除的對象寫到一個數據字典中。如果確定不再需要該對象,可以使用purge命令對回收站進行清空。
(3)被刪除的對象的名字可能是相同的,例如用戶創建了一個test表,使用drop命令刪除該表后,又創建了一個test表,這時,如果再次刪除該表就會導致向回收站中添加了個相同的表
(4)為了確保添加到回收站中的對象的名稱都是唯一的,系統會對這些保存到回收站中的對象進行重命名
2.程序講解
通過show recyclebin命令可以查詢oracle回收站的刪除的信息
如果要閃回,則執行命令:
flashback table backtable to before drop;
注,如果兩個命名相同,不能夠閃回,可以起別名:為:
flashback table backtable to before drop rename to a;
四閃回版本查詢
閃回版本查詢,提供了一個審計行改變的查詢功能,通過它可以查找到所有已經提交了的行記錄
1.首先來創建一個表
create table version_table(id number,content varchar2(20));
2.向表中插入數據和更新數據
insert into version_table values(1,'Tom');
insert into version_table values(2,'Tom');
向表中更新數據
update version_table set ename='tom11' where id=2;
3.通過閃回版本的查詢獲取該歷史的記錄
select id,ename,versions_operation,versions_starttime,versions_endtime from version_table versionsbetween timestamp minvalue and maxvalue;
4.通過時間段來閃回
select empno,ename,versions_operation,versions_starttime,versions_endtime from version_table versions between timestamp to_date('2012-03-22 14:42:19','yyyy-mm-dd hh24:mi:ss')
and to_date('2012-03-22 14:43:28','yyyy-mm-dd hh24:mi:ss');
五閃回事務查詢
1.查詢事務的信息
desc flashback_transaction_query;
2.創建表
create table transaction_table (id number,ename varchar(20));
3.向表中插入數據
insert into transaction_table values(1,'tom');
insert into transaction_table values(2,'tom');
update transaction_table set ename='Tom123' where id=1;
4.先通過閃回版本查詢獲取事務相關信息
SQL> select id,ename,versions_operation,versions_xid from transaction_table versions between timestamp minvalue and maxvalue;
ID ENAMEVERSIONS_OPERATION VERSIONS_XID
---------- -------------------- ------------------ ----------------
2 sdfdU04001400EE010000
1 Tom123I020022002F020000
2 tomI020022002F020000
5.執行閃回事務查詢select xid,operation,table_name,undo_sql from flashback_transaction_query where xid='04001400EE010000';
總結
以上是生活随笔為你收集整理的oracle中闪回和回滚,oracle闪回操作详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 国家航天局发布嫦娥八号国际合作机遇公告,
- 下一篇: Oracle 分页语句解释,oracle