[20171115]redo and commit.txt

lfree發表於2017-11-16

[20171115]redo and commit.txt

--//參考Jonathan Lewis的
--//很早以前的帖子,自己覺得很有意思,重複測試:

--//事務已經提交,但是redo log buffer還沒有寫到磁碟.看看發生什麼情況?

1.環境:
SCOTT@book> @&r/ver1
PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

2.建立測試環境:
--//session 1:
create table t1(n1 number);
insert into t1 values(1);
commit;

--//session 2:
$ ps -ef  | grep ora_lgwr_boo[k]
oracle    9275     1  0 08:29 ?        00:00:00 ora_lgwr_book

SYS@book> oradebug setospid 9275
Oracle pid: 13, Unix process pid: 9275, image: oracle@xxxx (LGWR)

SYS@book> oradebug suspend
Statement processed.

--//這樣做的目的認為掛起寫redo日誌檔案.

3.測試:
--//session 1:
update t1 set n1 = 2;
commit;
--//掛起!!

--//session 2:
SYS@book> select * from scott.t1;

        N1
----------
         2

SYS@book> @ &r/wait
P1RAW            P2RAW            P3RAW  P1         P2  P3  SID  SERIAL#  SEQ# EVENT         STATE   WAIT_TIME_MICRO SECONDS_IN_WAIT
---------------- ---------------- ----- --- ---------- --- ---- -------- ----- ------------- ------- --------------- ---------------
00000000000001B8 0000000017701BD7 00    440  393223127   0  274        5    84 log file sync WAITING        26787924              27


--//可以發現session 1的提交已經生效,做一個shutdown abort.  然後重啟資料庫
SYS@book> shutdown abort
ORACLE instance shut down.
SYS@book> startup
ORACLE instance started.
Total System Global Area  634732544 bytes
Fixed Size                  2255792 bytes
Variable Size             197133392 bytes
Database Buffers          427819008 bytes
Redo Buffers                7524352 bytes
Database mounted.
Database opened.

SYS@book> select * from scott.t1;
        N1
----------
         1

--//回到原來的值.

--//也許你認為提交根本就是掛起了,根本沒有完成.
--//但是你簡單做一個放大,假設commit時間很長,commit主要操作修改塊,做一個快速提交,然後修改undo 事務槽標識,標識事務已經提交,然後將
--//這些修改從日誌快取寫入日誌檔案.

--//提交的當中還沒有完成前(至少認為寫入日誌檔案才會完成),這個時候你另外的會話已經可以看到提交的結果.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2147329/,如需轉載,請註明出處,否則將追究法律責任。

相關文章