偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

全面講解Oracle鎖存器

數(shù)據(jù)庫(kù) Oracle
這里介紹主要的Oracle鎖存器有SHARED POOL鎖存器,LIBRARY CACHE鎖存器,CACHE BUFFERS LRU CHAIN鎖存器,CACHE BUFFERS CHAINS鎖存器,REDO ALLOCATION鎖存器,REDO COPY鎖存器。

Oracle有很多值得學(xué)習(xí)的地方,這里我們主要介紹Oracle鎖存器,包括介紹Oracle的讀一致性機(jī)制等方面。Oracle鎖的機(jī)制,分Oracle鎖存器和鎖兩種。鎖存器是用來(lái)保護(hù)對(duì)內(nèi)存結(jié)構(gòu)的訪問(wèn),比如對(duì)DB BUFFER中塊的鎖存器申請(qǐng),只有在DBWN完成后,這些DB BUFFER塊被解鎖。然后用于其它的申請(qǐng)。

Oracle鎖存器不可以在進(jìn)程間共享,鎖存器的申請(qǐng)要么成功要么失敗,沒(méi)有鎖存器申請(qǐng)隊(duì)列。主要的Oracle鎖存器有SHARED POOL鎖存器,LIBRARY CACHE鎖存器,CACHE BUFFERS LRU CHAIN鎖存器,CACHE BUFFERS CHAINS鎖存器,REDO ALLOCATION鎖存器,REDO COPY鎖存器。

Oracle的鎖是用來(lái)保護(hù)數(shù)據(jù)訪問(wèn)的,鎖的限制比鎖存器要更寬松,比如,多個(gè)用戶在修改同一表的不同行時(shí),可以共享一個(gè)表上的一個(gè)鎖,鎖的申請(qǐng)可以按照被申請(qǐng)的順序來(lái)排隊(duì)等候,然后依次應(yīng)用,這種排隊(duì)機(jī)制叫做隊(duì)列(ENPUEUE),如果兩個(gè)服務(wù)器進(jìn)程試圖對(duì)同一表的同一行進(jìn)行加鎖,則都進(jìn)入鎖的申請(qǐng)隊(duì)列,先進(jìn)的加鎖成功,后面的進(jìn)程要等待,直到前一個(gè)進(jìn)程解鎖才可以加鎖,這叫做鎖的爭(zhēng)用,而且一旦加鎖成功,這個(gè)鎖將一直保持到用戶發(fā)出COMMIT或ROOLBACK命令為止。

如果兩個(gè)用戶鎖定各自的一行并請(qǐng)求對(duì)方鎖定的行的時(shí)候?qū)l(fā)生無(wú)限期等待即死鎖,死鎖的發(fā)生都是由于鎖的爭(zhēng)用而不是鎖存器的爭(zhēng)用引起的,Oracle在遇到死鎖時(shí),自動(dòng)釋放其中一個(gè)用戶的鎖并回滾此用戶的改變。正常情況下發(fā)生鎖的爭(zhēng)用時(shí),數(shù)據(jù)的最終保存結(jié)果由SCN來(lái)決定哪個(gè)進(jìn)程的更改被最終保存。兩個(gè)用戶的服務(wù)器進(jìn)程在申請(qǐng)同一表的多個(gè)行的鎖的時(shí)候是可以交錯(cuò)進(jìn)入鎖的申請(qǐng)隊(duì)列的。只有其中發(fā)生爭(zhēng)用才會(huì)進(jìn)行等待。創(chuàng)建表時(shí)指定的MAXTRANS參數(shù)決定了表中的一個(gè)數(shù)據(jù)塊同時(shí)最多可以被幾個(gè)事務(wù)鎖定。

下面來(lái)講一下Oracle的讀一致性機(jī)制,Oracle的讀一致性保證了事務(wù)之間的高度隔離性。下面是幾個(gè)關(guān)于回滾段讀一致性和死鎖的事例:

一、大SELECT,小UPDATE
A會(huì)話----Select * from test;----設(shè)scn=101----執(zhí)行時(shí)間09:10:11
B會(huì)話-----Update test set id=9999999 where id=1000000----設(shè)scn=102-----執(zhí)行時(shí)間09:10:12

我們會(huì)發(fā)現(xiàn)B會(huì)話會(huì)在A會(huì)話前完成,A會(huì)話中顯示的ID=100000是從回滾段中讀取的,因?yàn)锳會(huì)話在讀到ID=1000000所在的BLOCK時(shí)發(fā)現(xiàn)BLOCK上有事務(wù)信息,因此要從回滾段中讀,如果UPDATE在SELECT讀到此BLOCK之前已經(jīng)COMMIT,則SELECT讀到此BLOCK時(shí)發(fā)現(xiàn)其BLOCK上沒(méi)有事務(wù)信息,但是會(huì)發(fā)現(xiàn)其BLICK的SCN比SELECT自己的SCN大,因此也會(huì)利用回滾段進(jìn)行重構(gòu)。根據(jù)當(dāng)前塊上所有的itl找到相應(yīng)的undo地址,重構(gòu)出之前的block image,之前的那個(gè)block又含有自己的itl信息.如果這個(gè)before image中對(duì)應(yīng)的scn不滿足查詢,又會(huì)根據(jù)undo生成beforebeforeimage,這樣不斷往復(fù),直到構(gòu)造出符合查詢的scn的block返回結(jié)果,或者系統(tǒng)實(shí)在無(wú)法根據(jù)undo構(gòu)造出符合查詢的block,,報(bào)ora-01555的錯(cuò)誤為止....。需要強(qiáng)調(diào)的是讀一致性是通過(guò)對(duì)當(dāng)前整個(gè)塊利用回滾段(當(dāng)前塊上的所有ITL記錄的所有回滾段地址)進(jìn)行遞歸重構(gòu)到過(guò)去某一時(shí)間點(diǎn)或某一SCN的塊的一致性快照。而不是只針對(duì)塊中一部分ITL記錄在回滾段中遞歸查找來(lái)完成的,一定要理解遞歸重構(gòu)與遞歸查找是完全不同的兩個(gè)概念。Oracle回滾段確保了事務(wù)的高度的隔離性。即只要回滾段足夠大,那么一個(gè)SELECT不管執(zhí)行多長(zhǎng),它讀取的所有數(shù)據(jù)都將是在這條SELECT語(yǔ)句開(kāi)始執(zhí)行瞬間這個(gè)時(shí)間點(diǎn)的值,而不會(huì)被其它用戶在SELECT讀取期間對(duì)數(shù)據(jù)是否做過(guò)修改而影響。

二、大UPDATE,小SELECT
A會(huì)話----Update test set id=1;----設(shè)scn=101----執(zhí)行時(shí)間09:10:11
B會(huì)話-----select * from test where id=1000000----設(shè)scn=102-----執(zhí)行時(shí)間09:10:12

我們會(huì)發(fā)現(xiàn)B會(huì)話會(huì)在A會(huì)話前完成,B會(huì)話中顯示的ID=1000000是從BLOCK中直接讀取的,因?yàn)锽會(huì)話在讀到ID=1000000所在的BLOCK時(shí),A會(huì)話還沒(méi)有來(lái)得及對(duì)其鎖定,因此B會(huì)話既不會(huì)發(fā)現(xiàn)BLOCK上有事務(wù)信息,也不會(huì)發(fā)現(xiàn)BLOCK上的SCN比SELECT的大,因此會(huì)從BLOCK中直接讀取,如果SELECT在UPDATE鎖定此BLOCK后才發(fā)出,B會(huì)話讀到此BLOCK時(shí)發(fā)現(xiàn)其BLOCK上有事務(wù)信息,因此會(huì)從回滾段中讀取。

三、大UPDATE,小UPDATE
A會(huì)話----Update test set id=1;----設(shè)scn=101----執(zhí)行時(shí)間09:10:11
B會(huì)話1-----Update test set id=999999 where id=1000000----設(shè)scn=102-----執(zhí)行時(shí)間09:10:12
B會(huì)話2----- select * from test where id=2----設(shè)scn=103-----執(zhí)行時(shí)間09:10:14
B會(huì)話3----- update test set id=3 where id=2----設(shè)scn=104-----執(zhí)行時(shí)間09:10:15

我們會(huì)發(fā)現(xiàn)B會(huì)話1會(huì)完成,A會(huì)話將一直等待,因?yàn)锽會(huì)話1會(huì)先于A會(huì)話鎖定ID=1000000所在的BLOCK,并改寫頭部的事務(wù)信息,A會(huì)話在試圖鎖定此BLOCK時(shí),發(fā)現(xiàn)其上有事務(wù)信息,將會(huì)一直等待B會(huì)話1事務(wù)結(jié)束后再行鎖定,B會(huì)話2查詢到的ID=2是從回滾段中讀取的而不是從BLOCK中直接讀出來(lái)的。因?yàn)锳會(huì)話已將ID=2的BLOCK鎖定,并寫入了回滾段,從B會(huì)話3可以證明這一點(diǎn),B會(huì)話3發(fā)出后,B會(huì)話3會(huì)收到死鎖的信息,死鎖的原因是A會(huì)話在等待B會(huì)話對(duì)ID=1000000所在的BLOCK解鎖,現(xiàn)在B會(huì)話又在等待A會(huì)話對(duì)ID=2所在的BLOCK解鎖,因此形成死鎖,因此證明ID=2所在的BLOCK已被A會(huì)話鎖定,然后A會(huì)話也會(huì)收到死鎖的信息。以上介紹Oracle鎖存器。

【編輯推薦】

  1. 簡(jiǎn)單描述Oracle物化視圖日志
  2. 簡(jiǎn)要概述Oracle客戶端
  3. 五分鐘掌握Oracle調(diào)優(yōu)
  4. 探討Oracle primary索引
  5. 高手討論Oracle物化視圖
責(zé)任編輯:佚名 來(lái)源: 博客園
相關(guān)推薦

2009-10-21 16:03:06

Oracle查詢用戶表

2010-01-06 10:02:10

Linux服務(wù)器

2009-12-02 15:58:55

Cisco路由器配置命

2010-09-16 10:34:58

2009-12-14 16:19:03

2009-11-13 14:59:16

2009-12-01 17:01:17

備份路由器

2009-09-29 10:12:03

Hibernate A

2009-09-24 10:50:31

Hibernate主鍵

2009-09-23 15:50:21

Hibernate u

2009-12-03 09:49:00

河南網(wǎng)通路由器

2009-12-15 17:43:44

寬帶路由器

2010-02-23 15:09:58

CentOS FTP

2010-04-27 11:32:41

2009-12-23 10:13:20

WPF體系架構(gòu)

2010-01-05 18:08:11

2009-11-09 12:59:56

寬帶路由器

2009-10-28 11:09:59

2010-03-16 15:28:40

Ubuntu linu

2009-10-19 17:10:37

Linux文件命令
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)