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

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


咨詢(xún)
建站咨詢(xún)
