亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2469 | 回復(fù): 8
打印 上一主題 下一主題

oracle工作機制問題 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2008-10-13 15:08 |只看該作者 |倒序瀏覽
請教高手!~~
  在對數(shù)據(jù)庫表進行update且未commit時,這時進行的update是否已經(jīng)修改了數(shù)據(jù)文件,rollback時是從回滾段中把修改前的數(shù)據(jù)再重新寫回數(shù)據(jù)文件。

論壇徽章:
0
2 [報告]
發(fā)表于 2008-10-15 11:35 |只看該作者
未commit時update并未修改數(shù)據(jù)文件,只是修改了內(nèi)存中的一個鏡像塊,dbwr運行時才會修改數(shù)據(jù)文件,

論壇徽章:
0
3 [報告]
發(fā)表于 2008-10-15 15:30 |只看該作者
看了一些資料,個人認為在未進行commit時,也有可能已經(jīng)更新將數(shù)據(jù)文件更新,因為雖然在未commit時修改的是db buffer中的數(shù)據(jù)塊,假如更新的數(shù)據(jù)塊很多,臟數(shù)據(jù)列表達到一定長度時會觸發(fā)DBWR將數(shù)據(jù)塊寫入數(shù)據(jù)文件,不知道是否是這樣的。下邊是個人總結(jié)的oracle執(zhí)行update時的工作流程,請高人指點是否正確。

假如update語句影響的數(shù)據(jù)塊在db buffer沒有
第一步:從數(shù)據(jù)文件提前數(shù)據(jù)塊
第二步:將讀入的數(shù)據(jù)塊的頭部事務(wù)列表及SCN信息及被影響的行數(shù)據(jù)原值寫入回滾段
第三步:將update語句影響的被讀入DB BUFFER塊中的這些行的ROWID及將要更新的原值和新值及SCN等信息寫入log buffer
第四步:修改DB BUFFER中的數(shù)據(jù)塊
第五步:服務(wù)器進程在臟數(shù)據(jù)列表中建立一條指向此DB BUFFER緩沖塊的指針
第六步:假如update語句影響的數(shù)據(jù)塊比較多,則重復(fù)執(zhí)行1至5步
第七步:commit
在執(zhí)行上述步驟時,LGWR根據(jù)一定機制將log buffer的日志寫入日志文件,DBWR根據(jù)一定機制將db buffer中修改過的數(shù)據(jù)塊里的信息寫入數(shù)據(jù)文件

論壇徽章:
0
4 [報告]
發(fā)表于 2008-10-16 00:26 |只看該作者
你看Oracle官方文檔的Concepts了么?
這里邊有關(guān)于各種概念的標準答案

論壇徽章:
0
5 [報告]
發(fā)表于 2008-10-16 00:32 |只看該作者
原帖由 bjup 于 2008-10-13 15:08 發(fā)表
請教高手!~~
  在對數(shù)據(jù)庫表進行update且未commit時,這時進行的update是否已經(jīng)修改了數(shù)據(jù)文件,rollback時是從回滾段中把修改前的數(shù)據(jù)再重新寫回數(shù)據(jù)文件。


是否修改數(shù)據(jù)文件重要么?

在update的時候, oracle會修改buffer cache中的數(shù)據(jù)塊, 原數(shù)據(jù)塊的內(nèi)容被復(fù)制到了rollback segment的buffer cache中, rollback時rollback segment的buffer cache中的原數(shù)據(jù)塊被復(fù)制到數(shù)據(jù)段的baffer cache中.

致于buffer cache中的數(shù)據(jù)是否被寫到數(shù)據(jù)文件, 則要看DBWR的了.

論壇徽章:
0
6 [報告]
發(fā)表于 2008-10-16 10:40 |只看該作者
贊同3樓的說法,即便不commit,對數(shù)據(jù)的修改也可能寫入數(shù)據(jù)文件,commit包含兩種方式:直接執(zhí)行commit屬于顯式提交,還有一種試隱式提交的。

論壇徽章:
0
7 [報告]
發(fā)表于 2008-10-18 13:41 |只看該作者
在同一個session下,執(zhí)行update后未commit,在當前session下查詢的數(shù)據(jù)為甚么顯示已經(jīng)更新。步驟如下:
1.select * from test;
num         date
1        2008-10-9 15:13:08
2        2008-10-9 15:13:08
3        2008-10-9 15:13:12
4        2008-10-9 15:13:13
5        2008-10-9 15:13:19
6        2008-10-9 15:13:25
7        2008-10-9 15:33:05
8        2008-10-9 15:33:06
9        2008-10-9 16:53:01
10        2008-10-9 16:53:09

2.執(zhí)行uptate test set num=num+1;
3.查詢select * from test;
num         date
2        2008-10-9 15:13:08
3        2008-10-9 15:13:08
4        2008-10-9 15:13:12
5        2008-10-9 15:13:13
6        2008-10-9 15:13:19
7        2008-10-9 15:13:25
8        2008-10-9 15:33:05
9        2008-10-9 15:33:06
10        2008-10-9 16:53:01
11        2008-10-9 16:53:09

4.重新打開一個session,查詢select * from test;
num         date
1        2008-10-9 15:13:08
2        2008-10-9 15:13:08
3        2008-10-9 15:13:12
4        2008-10-9 15:13:13
5        2008-10-9 15:13:19
6        2008-10-9 15:13:25
7        2008-10-9 15:33:05
8        2008-10-9 15:33:06
9        2008-10-9 16:53:01
10        2008-10-9 16:53:09

目前可以理解步驟4查詢的結(jié)果為甚么不更新。步驟3為甚么執(zhí)行update未commit后,查詢的數(shù)據(jù)為甚么做了更新,請高手指點。

論壇徽章:
0
8 [報告]
發(fā)表于 2008-10-18 22:34 |只看該作者
當前session做的更新當然應(yīng)該可以馬上被當前session看到!

關(guān)于讀一致性,多版本,并發(fā)等問題,最好先看看Oracle® Database Concepts中相關(guān)的章節(jié)
http://download.oracle.com/docs/ ... /b14220/consist.htm

這個問題也可以參考各種關(guān)系數(shù)據(jù)庫管理系統(tǒng)的教材,特別是大學教材。在教材中會對各種機制進行學術(shù)上的討論,而不拘泥于某種單一的數(shù)據(jù)庫技術(shù)。

論壇徽章:
0
9 [報告]
發(fā)表于 2008-10-19 10:09 |只看該作者
多謝blue_stone指點!
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP