新聞中心
Oracle為了保證用戶檢索數(shù)據(jù)的一致性, 通過UNDO記錄,當(dāng)用戶檢索數(shù)據(jù)庫數(shù)據(jù)時,Oracle總是使用戶只能看到被提交過的數(shù)據(jù)或特定時間點的數(shù)據(jù)(select語句時間點),UNDO記錄會被存放到回滾段中,假如該數(shù)據(jù)未提交,用戶檢索數(shù)據(jù)時,都是從UNDO記錄中取得的.(如下圖:)

在連山等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站設(shè)計制作、網(wǎng)站設(shè)計 網(wǎng)站設(shè)計制作按需網(wǎng)站制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),營銷型網(wǎng)站建設(shè),外貿(mào)網(wǎng)站制作,連山網(wǎng)站建設(shè)費用合理。
1. ORACLE檢索數(shù)據(jù)一致性
先打開一個SecureCRT.(第一個session)
先建一個表
- SQL> create table c(a int);
- Table created.
- SQL> alter table c add b number;
- Table altered.
- SQL> desc c
- Name Null? Type
- ----------------------------------------- -------- --------------------------------------------
- A NUMBER(38)
- B NUMBER
表中插入數(shù)據(jù)并提交
- SQL> insert into c values(1,2);
- 1 row created.
- SQL> insert into c values(3,4);
- 1 row created.
- SQL> select * from c;
- A B
- ---------- -----------------------------
- 1 2
- 3 4
- SQL> commit;
- Commit complete.
再打開一個SecureCRT.(第二個session)
查詢
- SQL> select * from c;
- A B
- ---------- --------------------------
- 1 2
- 3 4
第一個session更改表中的數(shù)據(jù)但不提交
- SQL> update c set b=10 where a=1;
- 1 row updated.
第二個session查詢(修改但沒有提交檢索的是UNDO中的數(shù)據(jù))
- SQL> select * from c;
- A B
- ---------- --------------------------
- 1 2
- 3 4
第一個session提交
- SQL> commit;
- Commit complete.
第二個會話查詢(可見只有提交后才能檢索到數(shù)據(jù)段的數(shù)據(jù))
- SQL> select * from c;
- A B
- ---------- -------------------------
- 1 10
- 3 4
結(jié)論:如果用戶修改數(shù)據(jù)但沒有提交,其它用戶檢索的都是UNDO段的數(shù)據(jù),這樣就保證了數(shù)據(jù)的一致性
2.回滾數(shù)據(jù)(事務(wù)恢復(fù))
1.當(dāng)用戶updata數(shù)據(jù)但還沒有提交
- SQL> select * from c;
- A B
- ---------- -----------------------------
- 1 10
- 3 4
- SQL> update c set b=2 where a=1;
- SQL> select * from c;
- A B
- ---------- -----------------------------
- 1 2
- 3 4
這時用戶突然后悔了,想恢復(fù)到原來的狀態(tài)
- SQL> rollback;
- Rollback complete.
- SQL> commit;
- SQL> select * from c;
- A B
- ---------- -----------------------
- 1 10
- 3 4
可見當(dāng)用戶用命今rollback還能回滾到初始狀態(tài).
2.當(dāng)用戶updata數(shù)據(jù)且已提交
當(dāng)用戶updata數(shù)據(jù)且已提交后,可以根據(jù)SCN記錄把數(shù)據(jù)還源.
先查看原始數(shù)據(jù)
- SQL> select * from c;
- A B
- ---------- ----------
- 1 10
- 3 4
找到SCN
- SQL> select current_scn from v$database;
- CURRENT_SCN
- -----------
- 693636
現(xiàn)在刪除表中的數(shù)據(jù)并提交
- SQL> delete from c;
- 2 rows deleted.
- SQL> commit;
- Commit complete.
查詢(現(xiàn)在表中已沒有數(shù)據(jù)了)
- SQL> select * from c;
- no rows selected
檢索特定SCN的數(shù)據(jù)
- SQL> select * from c as of scn 693636;
- A B
- ---------- ----------
- 1 10
- 3 4
恢復(fù)數(shù)據(jù)
- SQL> insert into c select * from c as of scn 693636;
- 2 rows created.
- SQL> commit;
- Commit complete.
現(xiàn)在再查詢
- SQL> select * from c;
- A B
- ---------- ----------------------
- 1 10
- 3 4
可見可以根據(jù)SCN恢復(fù)到某一檢查點的數(shù)據(jù),如果把SCN轉(zhuǎn)換成時間,,就可以把數(shù)據(jù)恢復(fù)到某一時間點.
以上,介紹了ORACLE檢索數(shù)據(jù)一致性與事務(wù)恢復(fù)的方法。本文出自 “追求” 博客,欲與本文博主交流,請點擊這里。
【編輯推薦】
- 超大型Oracle數(shù)據(jù)庫應(yīng)用系統(tǒng)的設(shè)計方法
- 創(chuàng)建Oracle數(shù)據(jù)庫索引的三個標(biāo)準(zhǔn)
- Oracle性能優(yōu)化借助分區(qū)技術(shù)實現(xiàn)
- Oracle并發(fā)處理機制的簡單看法
- Oracle中被鎖定的解決辦法
當(dāng)前題目:Oracle檢索數(shù)據(jù)一致性與事務(wù)恢復(fù)
轉(zhuǎn)載注明:http://m.fisionsoft.com.cn/article/dpohdsc.html


咨詢
建站咨詢
