Oracle redo,
What is it?
Oracle redo日誌是由 redo record組成的,而redo record記錄的是oraclesegment中單個block的改變,把這些改變記錄下來,用於重建oracle 數據庫,redo record還有記錄的是:undo segment中的block的改變,redo也可以用來恢復oracle undosegment。
Commit之後的信息是什麼?
Commit是提交:
從邏輯上來說,把你對數據庫的修改提交給數據庫,告訴數據庫這些改動我提交了,表裏的改變確定了。
物理上來說發生了什麼?
1:oracle會把redo log buffer中的信息都sync到disk中,把redo的信息都同步到硬盤中
2:oracle會自動生成一個SYSTEM CHANGENUMBER ,記錄數據庫的改變
下面是另外一個問題:commit是什麼?
我的理解是:如果你對數據庫做了一個修改,update或者是insert,如果你不commit的話,你的修改結果只能在你的這個session中看到,如果你退出了這些修改就作廢了,沒用了
爲什麼是這樣?
這樣又延伸出了另外的一個問題,commit之後並沒有如我之前認爲的一樣,把緩存中的東西都sync到disk中,而是把redo log buffer中的內容sync到disk中,然後生成一個scn。
但是你在select 做查詢的時候,數據是同步的,但是此時硬盤並沒有同步,這說明是在BUFFER CACHE中取得block,取得的數據。
Oracle undo
和oracleredo是相同的,有一個oracle undorecord記錄對oracle database的修改。
記錄在undo segment中,和redo相似。
Undo是用來rollback,邏輯的rollback,比如說,oracle執行的對數據庫的修改,邏輯上執行一個邏輯上相反的命令比如說:
Insert----delete
Update----update
Undo是如何實現這些功能的?
我現在發現了一個很有意思的東西:oracle中的undo和rollback可以結合在一塊
而oracle的redo和commit可以很有效的結合在一塊
這真的非常奇怪,而且很有意思。Veryfunny stuff
And another thing ,transaction
Do you have to define a transaction beforeyou are there ?
Transaction和這些DML的關係式什麼?
Transaction和SCN的關係式什麼?
Transaction?如果我沒有定義transaction的話,那麼rollback又會有什麼問題?
Lots and lots of things