Oracle為了保證用戶檢索數據的一致性, 通過UNDO記錄,當用戶檢索數據庫數據時,Oracle總是使用戶只能看到被提交過的數據或特定時間點的數據(select語句時間點),UNDO記錄會被存放到回滾段中,假如該數據未提交,用戶檢索數據時,都是從UNDO記錄中取得的。
1. Oracle檢索數據一致性
先打開一個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
表中插入數據並提交
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更改表中的數據但不提交
SQL> update c set b=10 where a=1;
1 row updated.
第二個session查詢(修改但沒有提交檢索的是UNDO中的數據)
SQL> select * from c;
A B
---------- --------------------------
1 2
3 4
第一個session提交
SQL> commit;
Commit complete.
第二個會話查詢(可見只有提交後才能檢索到數據段的數據)
SQL> select * from c;
A B
---------- -------------------------
110
3 4
結論:如果用戶修改數據但沒有提交,其它用戶檢索的都是UNDO段的數據,這樣就保證了數據的一致性