標籤:總結 博文 lte ack 邏輯錯誤 程式實現 詳細 資訊 復原
本文前半部分是一個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強大Database Backup恢複機制的一部分,在資料庫發生邏輯錯誤的時候,閃回技術能提供快速且最小損失的恢複.
撤銷段
在講閃回技術前,需要先瞭解Oracle中一個邏輯結構--撤銷段。因為大部分閃回技術都需要依賴撤銷段中的撤銷資料。撤銷資料是反轉DML語句結果所需的資訊,只要某個事務修改了資料,那麼更新前的原有資料就會被寫入一個撤銷段。(交易回復也會用到撤銷段中的資料)。事務啟動時,Oracle 會為其分配一個撤銷段,事務和撤銷段存在多對一的關係,即一個事務只能對應一個撤銷段,多個事務可以共用一個撤銷段(不過在資料庫正常運行時一般不會發生這種情況)
閃回技術:
Oracle提供了四種可供使用的閃回技術(閃回查詢,閃回刪除,閃迴歸檔,閃回資料庫),每種都有不同的底層體繫結構支撐,但其實這四種不同的閃回技術部分功能是有重疊的,使用時也需要根據實際情境合理選擇最合適的閃回功能。
PS內容摘自: http://www.cnblogs.com/chengxiao/p/5860823.html
oracle的閃回