1. 程式人生 > >oracle的閃回

oracle的閃回

lsi int ack update open manager 備份恢復 事物 場景

本文前半部分是一個plsql程序,程序實現了對不同職位的員工加薪,更改了數據庫的數據.並且commit了事務;後半分結合前面的例子介紹了對oracle中的數據恢復,即如何撤銷這個已經commit過的操作.,也由於本人技術水平和表達能力有限,對於概念性的部分和總結引自摘自: http://www.cnblogs.com/chengxiao/p/5860823.html,如果想更詳細的了解oracle中的閃回機制可以訪問該地址的博文,本文是重點是實例演示

一、首先需求是在emp表中實現:

給員工漲工資,總裁漲1000 經理漲800 其他漲400

再沒有執行該程序前先查詢一下emp表中的數據如圖所示:

Jobs為clerk的員工薪資是800

Jobs為President的員工薪資是5000

技術分享

按照給員工漲工資,總裁漲1000 經理漲800 其他漲400的需求寫如下plsql程序語句如下:

set serveroutput on

declare

vjob emp.jobs%type;

vmpno emp.empno%type;

--定義光標mysur

cursor mysur is select jobs,empno from emp;

begin

open mysur;

loop

fetch mysur into vjob,vmpno;

exit when mysur%notfound;

--循環換判斷,給不同職位的員工加薪

if vjob=‘PRESIDENT‘ then update emp set sal=sal+1000 where empno=vmpno;

elsif vjob=‘MANAGER‘ then update emp set sal=sal+800 where empno=vmpno;

else update emp set sal=sal+400 where empno=vmpno;

end if;

end loop;

close mysur;

--提交事務

commit;

dbms_output.put_line(‘執行完畢‘);

end;

/

執行程序之後emp表中的數據為:

可以看到jobs為clerk的薪資是1200漲了400

jobs為president的薪資是6000漲了1000

技術分享

二、以上是plsql程序這裏不再累述下面通過以上emp表的數據具體演示oracle的數據恢復:

  基於作者技術水平有限,本小結暫時先講一下閃回查詢中的閃回表,對於閃回的其它類型可以在最後的ps內容部分下查看

  閃回表:是將某個數據表閃回到過去的某個時間點

一下步驟是結合上文中emp數據表進行操作的,根據上面的操作emp表的數據已

經被更改,並且commit了事務;這個時候我們考慮到使用oracle的閃回機制去撤銷

已經提交事物的操作:

步驟

      首先需求是在emp表中實現,給員工漲工資,總裁漲1000 經理漲800 其他漲400

      還及得再沒有執行該需求前emp表中的數據是怎樣的吧這裏再給大家看一下:

技術分享

      :

 

  

(一)首先是先閃回到某個時間點去查詢一下表中的數據確定是否要閃回到該時間點:

  (sql1:)select * from emp

  as of timestamp to_timestamp(‘2017-9-16 00:30:00‘,‘yyyy-MM-dd hh24:mi:ss‘);

  該語句將表閃回到了2017-9-16 00:30:00這個時間點然後看一下數據表中

  的數據是否是你想要的結果:

  可以看到在這個時間點emp表中的數據是沒有被修改的狀態

技術分享

  (二)如果確定這個時間點查詢到的表中的數據是你想要的結果就進行閃回表操作:

  但是首先要設置表支持行移動:

  (sql1:)alter table emp enable row movement;

  然後執行閃回操作:

  (sql2:) flashback table emp

  to timestamp to_timestamp(‘2017-9-15 08:00:00‘,‘yyyy-MM-dd hh24:mi:ss‘);

     這樣對於emp表的撤銷就完成了:

     以上兩行語句執行結果為:

      table EMP已變更。

      table EMP 成功。

  查詢一下emp表中的數據可以看到:

    Jobs為clerk的員工薪資是800

    Jobs為President的員工薪資是5000

技術分享

    大功告成!

PS:介紹一下oracle的閃回機制:

閃回

概念:閃回技術是Oracle強大數據庫備份恢復機制的一部分,在數據庫發生邏輯錯誤的時候,閃回技術能提供快速且最小損失的恢復.

撤銷段

在講閃回技術前,需要先了解Oracle中一個邏輯結構--撤銷段。因為大部分閃回技術都需要依賴撤銷段中的撤銷數據。撤銷數據是反轉DML語句結果所需的信息,只要某個事務修改了數據,那麽更新前的原有數據就會被寫入一個撤銷段。(事務回滾也會用到撤銷段中的數據)。事務啟動時,Oracle 會為其分配一個撤銷段,事務和撤銷段存在多對一的關系,即一個事務只能對應一個撤銷段,多個事務可以共享一個撤銷段(不過在數據庫正常運行時一般不會發生這種情況)

閃回技術:

 Oracle提供了四種可供使用的閃回技術(閃回查詢,閃回刪除,閃回歸檔,閃回數據庫),每種都有不同的底層體系結構支撐,但其實這四種不同的閃回技術部分功能是有重疊的,使用時也需要根據實際場景合理選擇最合適的閃回功能。

PS內容摘自: http://www.cnblogs.com/chengxiao/p/5860823.html

oracle的閃回