數(shù)據(jù)庫(kù)程序員面試分類真題23_第1頁(yè)
數(shù)據(jù)庫(kù)程序員面試分類真題23_第2頁(yè)
數(shù)據(jù)庫(kù)程序員面試分類真題23_第3頁(yè)
數(shù)據(jù)庫(kù)程序員面試分類真題23_第4頁(yè)
數(shù)據(jù)庫(kù)程序員面試分類真題23_第5頁(yè)
已閱讀5頁(yè),還剩38頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

數(shù)據(jù)庫(kù)程序員面試分類真題23一、單項(xiàng)選擇題1.

CREATESEQUENCEseq1STARTWITH100INCREMENTBY10MAXVALUE200CYCLENOCACHE(江南博哥).

ThesequenceSEQ1hasgeneratednumbersuptothemaximumlimitof200.YouissuethefollowingSQLstatement:

SELECTseq1.nextvalFROMdua1.

WhatisdisplayedbytheSELECTstatement?______A.1B.10C.100D.anerror正確答案:A[解析]在很多數(shù)據(jù)庫(kù)系統(tǒng)中,都存在一個(gè)自動(dòng)增長(zhǎng)的列,如果想要在Oracle中實(shí)現(xiàn)自動(dòng)增長(zhǎng)的功能,那么只能依靠序列完成。序列通常具有如下的特性:①自動(dòng)提供唯一的數(shù)值;②共享對(duì)象;③主要用于提供主鍵值;④代替應(yīng)用代碼;⑤將序列值裝入內(nèi)存可以提高訪問(wèn)效率。

關(guān)于序列需要注意以下兩點(diǎn)內(nèi)容:

1)對(duì)于設(shè)置了CYCLE屬性的SEQUENCE來(lái)說(shuō),當(dāng)SEQUENCE的值達(dá)到最大值后會(huì)從1開始循環(huán)。

2)創(chuàng)建序列后,不能使用CURRVAL直接查詢當(dāng)前值,必須使用NEXTVAL先取值才能使用,否則報(bào)ORA-08002:sequenceMY_SEQ.CURRVALisnotyetdefinedinthissession,且第一次執(zhí)行NEXTVAL后當(dāng)前值并不增加。

在本題中,“hasgeneratednumbersuptothemaximumlimitof200”表示序列SEQ1當(dāng)前已經(jīng)是最大值200,且創(chuàng)建屬性是CYCLE的,所以,NEXTVAL的值從1開始。注意:即便是STARTWITH100,使用CYCLE屬性的序列還是從1開始的。

2.

Oracle數(shù)據(jù)庫(kù)中,可以刪除整個(gè)表中的數(shù)據(jù),并且無(wú)法回滾的命令是______A.DROPB.DELETEC.TRUNCATED.CASCADE正確答案:C[考點(diǎn)]對(duì)象[解析]DELETE、DROP和TRUNCATE的異同點(diǎn)見(jiàn)下表。相同點(diǎn)1)TRUNCATE和不帶WHERE子句的DELETE及DROP都會(huì)刪除表內(nèi)的所有數(shù)據(jù)2)DROP和TRUNCATE都是DDL語(yǔ)句,執(zhí)行后會(huì)自動(dòng)提交3)表上的索引大小會(huì)自動(dòng)進(jìn)行維護(hù)不同點(diǎn)分類DROPTRUNCATEDELETE是否刪除表結(jié)構(gòu)刪除表結(jié)構(gòu)及其表上的約束,且依賴于該表的存儲(chǔ)過(guò)程和函數(shù)將保留,但是變?yōu)镮NVALID狀態(tài)只刪除數(shù)據(jù),不刪除表的定義、約束、觸發(fā)器和索引SQL命令類型DDL語(yǔ)句,隱式提交,不能對(duì)TRUNCATE和DROP使用ROLLBACK命令DML語(yǔ)句,事務(wù)提交(COMMIT)之后才生效,可以使用ROLLBACK語(yǔ)句撤銷未提交的事務(wù)刪除的數(shù)據(jù)是否放入回滾段(ROLLBACKSEGMENT)否否是高水位是否下降是是,在宏觀上表現(xiàn)為TRUNCATE操作后,表的大小變?yōu)槌跏蓟拇笮》?,在宏觀上表現(xiàn)為DELETE后表的大小并不會(huì)因此而改變,所以,在對(duì)整個(gè)表進(jìn)行全表掃描時(shí),經(jīng)過(guò)TRUNCATE操作后的表比DELETE操作后的表要快得多日志的產(chǎn)生少量日志少量日志大量日志是否可以通過(guò)閃回查詢來(lái)找回?cái)?shù)據(jù)否否是是否可以對(duì)視圖進(jìn)行操作是否是級(jí)聯(lián)刪除不能DROP一個(gè)帶有ENABLE外鍵的表不能TRUNCATE一個(gè)帶有ENABLE外鍵的表,會(huì)報(bào)錯(cuò)ORA-02266可以DELETE一個(gè)帶有ENABLE外鍵的表執(zhí)行速度一般來(lái)說(shuō),DROP>TRUNCATE>DELETE,DROP和TRUNCATE由于是在底層修改了數(shù)據(jù)字典,所以,無(wú)論是大表還是小表執(zhí)行都非??欤鳧ELETE是需要讀取數(shù)據(jù)到Undo,所以,對(duì)于大表進(jìn)行DELETE全表操作將會(huì)非常慢安全性DROP和TRUNCATE在無(wú)備份的情況下需謹(jǐn)慎使用方面想刪除部分?jǐn)?shù)據(jù)行只能用DELETE且?guī)蟇HERE子句;想刪除表數(shù)據(jù)及其結(jié)構(gòu)則使用DROP;想保留表結(jié)構(gòu)而將所有數(shù)據(jù)刪除則使用TRUNCATE恢復(fù)方法使用回收站恢復(fù),閃回?cái)?shù)據(jù)庫(kù),RMAN備份、DUL工具等閃回?cái)?shù)據(jù)庫(kù),RMAN備份、DUL工具等閃回查詢、閃回事務(wù)、閃回版本、閃回?cái)?shù)據(jù)庫(kù)等

3.

下列不屬于Oracle的邏輯結(jié)構(gòu)的是______A.區(qū)B.段C.數(shù)據(jù)文件D.表空間正確答案:C[考點(diǎn)]邏輯結(jié)構(gòu)[解析]Oracle的邏輯結(jié)構(gòu)圖簡(jiǎn)單如下圖所示。

Oracle數(shù)據(jù)庫(kù)在邏輯上將數(shù)據(jù)存儲(chǔ)在表空間中,在物理上將數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)文件中。

1)數(shù)據(jù)庫(kù)(Database):一個(gè)數(shù)據(jù)庫(kù)是由多個(gè)表空間組成的,也可以說(shuō),多個(gè)不同類型的表空間組成了一個(gè)數(shù)據(jù)庫(kù)。

2)表空間(Tablespace):表空間是數(shù)據(jù)庫(kù)中的基本邏輯結(jié)構(gòu),一系列數(shù)據(jù)文件的集合。一個(gè)表空間可以包括多個(gè)數(shù)據(jù)文件,這多個(gè)數(shù)據(jù)文件可以分布在不同的磁盤上,這樣可以提高表空間的I/O請(qǐng)求。數(shù)據(jù)庫(kù)的數(shù)據(jù)作為一個(gè)整體存儲(chǔ)在構(gòu)成數(shù)據(jù)庫(kù)每一個(gè)表空間的數(shù)據(jù)文件中。一個(gè)Oracle數(shù)據(jù)庫(kù)必須至少有兩個(gè)表空間(必需的SYSTEM和SYSAUX表空間),每個(gè)表空間包含一個(gè)或多個(gè)數(shù)據(jù)文件。臨時(shí)文件是一個(gè)屬于臨時(shí)表空間的文件,它是使用TEMPFILE選項(xiàng)創(chuàng)建的。臨時(shí)表空間不能包含永久數(shù)據(jù)庫(kù)對(duì)象(例如表),并且通常用于排序。表空間可以分為大文件表空間和小文件表空間。

3)段(Segment):對(duì)象在數(shù)據(jù)庫(kù)中占用的空間。當(dāng)在數(shù)據(jù)庫(kù)中創(chuàng)建表或索引時(shí),系統(tǒng)就會(huì)創(chuàng)建對(duì)應(yīng)的段。段是由多個(gè)可以不連續(xù)的區(qū)組成,所以段是可以跨數(shù)據(jù)文件的。當(dāng)段空間不足時(shí),系統(tǒng)將以區(qū)為單位為段分配空間。段按照類型可以分為數(shù)據(jù)段、索引段、Undo段和臨時(shí)段等,其中:

①數(shù)據(jù)段:每個(gè)非集群的、不按索引組織的表都有一個(gè)數(shù)據(jù)段,但外部表、全局臨時(shí)表和分區(qū)表除外,這些表中的每個(gè)表都有一個(gè)或多個(gè)段。表中的所有數(shù)據(jù)都存儲(chǔ)在相應(yīng)數(shù)據(jù)段的區(qū)中。對(duì)于分區(qū)表,每個(gè)分區(qū)都有一個(gè)數(shù)據(jù)段。每個(gè)集群也都有一個(gè)數(shù)據(jù)段。集群中每個(gè)表的數(shù)據(jù)都存儲(chǔ)在集群的數(shù)據(jù)段中。

②索引段:每個(gè)索引都有一個(gè)索引段,存儲(chǔ)其所有數(shù)據(jù)。對(duì)于分區(qū)索引,每個(gè)分區(qū)都有一個(gè)索引段。

③Undo段:Oracle為每個(gè)數(shù)據(jù)庫(kù)實(shí)例創(chuàng)建一個(gè)Undo表空間,該表空間包含大量用于臨時(shí)存儲(chǔ)還原信息的Undo段。Undo段中的信息用于生成讀一致性數(shù)據(jù)庫(kù)信息,并且在數(shù)據(jù)庫(kù)恢復(fù)過(guò)程中,用于為用戶回滾未提交的事務(wù)處理。

④臨時(shí)段:臨時(shí)段是在需要臨時(shí)工作區(qū)來(lái)執(zhí)行SQL語(yǔ)句時(shí),由Oracle數(shù)據(jù)庫(kù)創(chuàng)建的。在語(yǔ)句執(zhí)行完成后,臨時(shí)段的區(qū)將返回到實(shí)例以備將來(lái)使用。Oracle會(huì)為每個(gè)用戶指定一個(gè)默認(rèn)臨時(shí)表空間,或指定一個(gè)在數(shù)據(jù)庫(kù)范圍內(nèi)使用的默認(rèn)臨時(shí)表空間。

④區(qū)(Extent):區(qū)是為數(shù)據(jù)一次性預(yù)留的一個(gè)較大的存儲(chǔ)空間。區(qū)是一個(gè)空間分配單位,當(dāng)數(shù)據(jù)庫(kù)對(duì)象空間不足時(shí),通常會(huì)以區(qū)為單位進(jìn)行分配空間。區(qū)是由多個(gè)連續(xù)的數(shù)據(jù)塊組成的,由此可知區(qū)是不能跨數(shù)據(jù)文件的。

⑤塊(Block):塊是Oracle最基本的存儲(chǔ)單位,在建立數(shù)據(jù)庫(kù)的時(shí)候指定DB_BLOCK_SIZE值,該參數(shù)表示數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)數(shù)據(jù)塊的大小,默認(rèn)大小為8KB,它是數(shù)據(jù)庫(kù)一次標(biāo)準(zhǔn)I/O的大小,一個(gè)標(biāo)準(zhǔn)的Oracle數(shù)據(jù)塊是由連續(xù)的操作系統(tǒng)數(shù)據(jù)塊組成的。1個(gè)8KB的數(shù)據(jù)塊理論上最多可存儲(chǔ)700多行,所以,塊越大,在相同情況下存儲(chǔ)的行就越多,而Oracle是以塊為單位進(jìn)行訪問(wèn)的,那么產(chǎn)生的邏輯讀就越小。需要注意的是,塊越大,不同的會(huì)話訪問(wèn)不同的數(shù)據(jù)落在同一個(gè)塊的概率就增加了,這就容易產(chǎn)生熱點(diǎn)塊競(jìng)爭(zhēng),所以,在OLAP中,可以適當(dāng)將塊調(diào)大。

本題中,選項(xiàng)A、B、D都屬于數(shù)據(jù)庫(kù)的邏輯結(jié)構(gòu),C選項(xiàng)的數(shù)據(jù)文件是屬于數(shù)據(jù)庫(kù)的物理結(jié)構(gòu),是實(shí)實(shí)在在可以看得見(jiàn)的。

4.

Notethefollowingstructuresinyourdatabaseserver:

1.Extents

2.OSBlocks

3.Tablespace

4.Segments

5.OracleDataBlock

WhichoptionhasthecorrectarrangementofthesestructuresFROMthesmallesttothelargest?______A.2,5,1,4,3B.1,2,3,4,5C.5,2,1,3,4D.2,1,5,4,3正確答案:A[考點(diǎn)]邏輯結(jié)構(gòu)[解析]Oracle中邏輯結(jié)構(gòu)包括表空間、段、區(qū)和塊。說(shuō)明一下:數(shù)據(jù)庫(kù)是由表空間構(gòu)成,表空間又由段構(gòu)成,段又由區(qū)構(gòu)成,而區(qū)又是由Oracle塊構(gòu)成的這樣的一種結(jié)構(gòu),該結(jié)構(gòu)可以提高數(shù)據(jù)庫(kù)的效率,塊→區(qū)→段→表空間→數(shù)據(jù)庫(kù)。題目問(wèn)的是從小到大的排序哪個(gè)是正確的。

本題中,對(duì)于選項(xiàng)A,OSBLOCKS->ORACLEDATABLOCK->EXTENTS->SEGrMENTS->TABLESPACE,排序正確。所以,選項(xiàng)A正確。

5.

下面有關(guān)TABLESPACE和DATAFILE之間的關(guān)系的描述中,說(shuō)法錯(cuò)誤的是______A.一個(gè)TABLESPACE可以有一個(gè)或多個(gè)DATAFILEB.每個(gè)DATAFILE只能在一個(gè)TABLESPACE內(nèi)C.TABLE中的數(shù)據(jù),通過(guò)HASH算法分布在TABLESPACE中的各個(gè)DATAFILE中D.DATAFILE是邏輯上的概念,TABLESPACE則在物理上存儲(chǔ)了數(shù)據(jù)庫(kù)的種種對(duì)象正確答案:D[考點(diǎn)]邏輯結(jié)構(gòu)[解析]關(guān)于數(shù)據(jù)庫(kù)的邏輯結(jié)構(gòu)和物理結(jié)構(gòu),表空間(TABLESPACE)是邏輯上的概念,數(shù)據(jù)文件(DATAFILE)是物理上的概念。一個(gè)表空間可以由一個(gè)或多個(gè)數(shù)據(jù)文件組成,一個(gè)數(shù)據(jù)文件不能跨越多個(gè)表空間。TABLE中的數(shù)據(jù),通過(guò)HASH算法分布在表空間中的各個(gè)數(shù)據(jù)文件中。表空間是Oracle數(shù)據(jù)庫(kù)中最大的邏輯單位與存儲(chǔ)空間單位,數(shù)據(jù)庫(kù)系統(tǒng)通過(guò)表空間為數(shù)據(jù)庫(kù)對(duì)象分配空間。

本題中,對(duì)于選項(xiàng)D,TABLESPACE是邏輯上的概念,DATAFILE是物理上的概念,選項(xiàng)中正好說(shuō)反了。所以,選項(xiàng)D正確。

6.

Identifythememorycomponentfromwhichmemorymaybeallocatedfor:______

1.Sessionmemoryforthesharedserver

2.BuffersforI/Oslaves

3.OracleDatabaseRecoveryManager(RMAN)backupandrestoreoperationsA.LargePoolB.RedoLogBufferC.DatabaseBufFerCacheD.ProgramGlobalArea(PGA)正確答案:A[考點(diǎn)]內(nèi)存結(jié)構(gòu)[解析]題目中的3項(xiàng)均是大池(LargePool)的適用場(chǎng)景。

7.

Youhaveexecutedthiscommandtochangethesizeofthedatabasebuffercache:______

SQL>ALTERSYSTEMSETDB_CACHE_SIZE=2516582;

Systemaltered.

Toverifythechangeinsize,youexecutedthiscommand:

SQL>SHOWPARAMETERDB_CACHE_SIZE

NAMETYPEVALUE

-----------------------------

db_cache_sizebiginteger4194304

Whyisthevaluesetto4194304andnotto25165827A.because4194304isthegranulesizeB.because4194304isthestandardblocksizeC.because4194304isthelargestnonstandardblocksizedefinedinthedatabaseD.because4194304isthetotalsizeofdaaalreadyavailableinthedatabasebuffercache正確答案:A[考點(diǎn)]內(nèi)存結(jié)構(gòu)[解析]Oracle分配內(nèi)存的單位是granule,即粒度。最小的粒度為4MB,設(shè)置大小不到一個(gè)粒度按一個(gè)粒度計(jì)算,通過(guò)如下的SQL可查看粒度的大?。?/p>

SELECT*FROMV$SGAINFOWHERENAME='GranuleSize';

在本題中,設(shè)置的DB_CACHE_SIZE約為2.5MB,不足1個(gè)粒度,所以,Oracle自動(dòng)調(diào)整為4MB大小。

8.

Notethefollowingfunctionalitiesofvariousbackgroundprocesses:

1.Recordthecheckpointinformationindatafileheaders.

2.Performrecoveryatinstancestartup.

3.Cleanupunusedtemporarysegments.

4.Freetheresourcesusedbyauserprocesswhenitfails.

5.Dynamicallyregisterdatabaseserviceswithlisteners.

Whichoptionhasthecorrectfunctionalitieslistedforabackgroundprocess?______A.ArchiverProcess(ARCn):1,2,5B.SystemMonitorProcess(SMON):1,4,5C.ProcessMonitorProcess(PMON):4,5,6D.DatabaseWriterProcess(DBWn):1,3,4正確答案:C[考點(diǎn)]后臺(tái)進(jìn)程[解析]本題描述中的1,將檢查點(diǎn)記錄在文件頭屬于CKPT的作用,2中在數(shù)據(jù)庫(kù)啟動(dòng)的時(shí)候執(zhí)行恢復(fù)操作屬于SMON的作用,3中清理未使用的臨時(shí)段也屬于SMON的作用,4中釋放用戶的資源屬于PMON的作用,5中動(dòng)態(tài)注冊(cè)數(shù)據(jù)庫(kù)屬于PMON的作用,6中監(jiān)控會(huì)話的空閑時(shí)間屬于PMON的作用。

本題中,對(duì)于選項(xiàng)A,1和2不屬于ARCn的作用。所以,選項(xiàng)A錯(cuò)誤。

對(duì)于選項(xiàng)B,4和5不屬于SMON的作用。所以,選項(xiàng)B錯(cuò)誤。

對(duì)于選項(xiàng)C,4、5和6都是PMON的作用。所以,選項(xiàng)C正確。

對(duì)于選項(xiàng)D,1、3和4都不是DBWn的作用。所以,選項(xiàng)D錯(cuò)誤。

9.

不是Oracle的用戶的是______A.SYSDBAB.SYSTEMC.SCOTTD.SYS正確答案:A[考點(diǎn)]權(quán)限

[解析]SYSDBA和SYSOPER屬于系統(tǒng)權(quán)限,也稱為管理權(quán)限,擁有例如數(shù)據(jù)庫(kù)開啟、關(guān)閉等一些系統(tǒng)管理級(jí)別的權(quán)限。SYSDBA擁有最高的系統(tǒng)權(quán)限,SYS用戶必須以SYSDBA的權(quán)限來(lái)登錄,而普通用戶以SYSOPER登錄后用戶是PUBLIC。

SYSDBA和SYSOPER具體的權(quán)限見(jiàn)下表。

本題中,對(duì)于選項(xiàng)A,SYSDBA屬于系統(tǒng)特殊權(quán)限,不屬于用戶,選項(xiàng)A的描述錯(cuò)誤。所以,選項(xiàng)A正確。

對(duì)于選項(xiàng)B,SYSTEM是系統(tǒng)默認(rèn)用戶,擁有DBA角色。所以,選項(xiàng)B錯(cuò)誤。

對(duì)于選項(xiàng)C,SCOTT用戶屬于測(cè)試用戶。所以,選項(xiàng)C錯(cuò)誤。

對(duì)于選項(xiàng)D,SYS用戶具有管理系統(tǒng)的最高權(quán)限,必須以SYSDBA來(lái)登錄。所以,選項(xiàng)D錯(cuò)誤。

10.

下面有關(guān)SQL綁定變量的描述中,錯(cuò)誤的是______A.綁定變量是指在SQL語(yǔ)句中使用變量,改變變量的值來(lái)改變SQL語(yǔ)句的執(zhí)行結(jié)果B.使用綁定變量,可以減少SQL語(yǔ)句的解析,能減少數(shù)據(jù)庫(kù)引擎消耗在SQL語(yǔ)句解析上的資源C.使用綁定變量,提高了編程效率和可靠性,減少訪問(wèn)數(shù)據(jù)庫(kù)的次數(shù)D.使用綁定變量,查詢優(yōu)化器會(huì)預(yù)估得比字面變量更加真實(shí)正確答案:D[考點(diǎn)]綁定變量[解析]通常在高并發(fā)的OLTP系統(tǒng)中,可能會(huì)出現(xiàn)這樣的現(xiàn)象,單個(gè)SQL的寫法、執(zhí)行計(jì)劃、性能都是沒(méi)問(wèn)題的,但整個(gè)系統(tǒng)的性能就是很差,這表現(xiàn)在當(dāng)系統(tǒng)并發(fā)的數(shù)量增加時(shí),整個(gè)系統(tǒng)負(fù)載很高,CPU占用率接近100%。其實(shí),這種系統(tǒng)性能隨著并發(fā)量的遞增而顯著降低的現(xiàn)象,往往是因?yàn)檫@些系統(tǒng)沒(méi)有使用綁定變量而產(chǎn)生了大量的硬解析所致。因?yàn)橥粭lSQL語(yǔ)句僅僅由于謂詞部分變量的不同而在執(zhí)行的時(shí)候就需要重新進(jìn)行一次硬解析,造成SQL執(zhí)行計(jì)劃不能共享,這極大地耗費(fèi)了系統(tǒng)時(shí)間和系統(tǒng)CPU資源。那么怎樣才能降低OLTP應(yīng)用系統(tǒng)的硬解析的數(shù)量呢?答案就是使用綁定變量。高并發(fā)的OLTP系統(tǒng)若沒(méi)有使用綁定變量則會(huì)導(dǎo)致硬解析很大,這在AWR中的LoadProfile部分可以很容易地看出來(lái)。

使用綁定變量能夠有效降低系統(tǒng)硬解析的數(shù)量。對(duì)于同一類型的SQL語(yǔ)句若使用了綁定變量,則SQL文本就變得完全相同了,據(jù)此計(jì)算出來(lái)的哈希值也就完全相同,這就具備了可以重用解析樹和執(zhí)行計(jì)劃的基礎(chǔ)條件。這里的同一類型的SQL語(yǔ)句指的是除SQL文本中對(duì)應(yīng)的輸入值不同外其他部分都一模一樣的SQL語(yǔ)句。例如,銀行的查詢余額的SQL語(yǔ)句,在成千上萬(wàn)次查詢中都只是賬戶名不同,而SQL語(yǔ)句的其他部分都一樣。若沒(méi)有使用綁定變量,則每查詢一次都必須進(jìn)行一次硬解析。如果使用了綁定變量,假設(shè)每次可以節(jié)省0.001s,那么在高并發(fā)下上千萬(wàn)次查詢節(jié)省下來(lái)的時(shí)間將是非常大的,這在無(wú)形中就提高了系統(tǒng)的響應(yīng)時(shí)間。

綁定變量(BindVariable)其實(shí)質(zhì)是變量,類似于經(jīng)常使用的替代變量,只不過(guò)替代變量使用“&”作為占位符,而綁定變量使用英文冒號(hào)(:)作為占位符,替代變量使用方式為&VARIABLE_PARA,相應(yīng)的綁定變量則為:BIND_VARIABLE_PARA。綁定變量通常出現(xiàn)在SQL文本中,用于替換WHERE或VALUES子句中的具體值。

綁定變量的優(yōu)點(diǎn)如下:

1)可以在庫(kù)緩存中共享游標(biāo),避免硬解析以及與之相關(guān)的額外開銷。換句話說(shuō),綁定變量可以有效地減少SQL硬解析的次數(shù),從而減少系統(tǒng)資源開銷,這也是使用綁定變量最大的作用。

2)在大批量數(shù)據(jù)操作時(shí),可以大量減少閂鎖(Latch)的使用,從而避免閂鎖的爭(zhēng)用。

3)提高了代碼的可讀性(避免拼接式的硬編碼)和安全性(防止SQL注入)。

綁定變量的缺點(diǎn)主要體現(xiàn)在當(dāng)使用綁定變量時(shí),查詢優(yōu)化器會(huì)忽略其具體值,因此,其預(yù)估的準(zhǔn)確性遠(yuǎn)不如使用字面量值真實(shí)。當(dāng)表的列上存在數(shù)據(jù)傾斜(表上的數(shù)據(jù)非均勻分布)時(shí),Oracle可能會(huì)提供錯(cuò)誤的執(zhí)行計(jì)劃,從而使得非高效的執(zhí)行計(jì)劃被使用。

需要注意的是,目標(biāo)SQL中的綁定變量個(gè)數(shù)不宜太多,否則可能會(huì)導(dǎo)致目標(biāo)SQL總的執(zhí)行時(shí)間大幅度增長(zhǎng)。增長(zhǎng)的時(shí)間主要耗費(fèi)在執(zhí)行目標(biāo)SQL時(shí)對(duì)每一個(gè)綁定變量都用其實(shí)際的值來(lái)替換(這個(gè)過(guò)程就是所謂的綁定變量值替換),目標(biāo)SQL的SQL文本中的綁定變量的個(gè)數(shù)越多,這個(gè)替換過(guò)程所耗費(fèi)的時(shí)間就越長(zhǎng),該SQL總的執(zhí)行時(shí)間也就越長(zhǎng)。

本題中,對(duì)于選項(xiàng)A,綁定變量就是之前不知道具體的值,只有運(yùn)行的時(shí)候才知道值,改變變量的值來(lái)改變SQL語(yǔ)句的執(zhí)行結(jié)果。所以,選項(xiàng)A錯(cuò)誤。

對(duì)于選項(xiàng)B,使用綁定變量,可以減少SQL語(yǔ)句的解析,說(shuō)法正確。所以,選項(xiàng)B錯(cuò)誤。

對(duì)于選項(xiàng)C,使用綁定變量,減少解析次數(shù),提高了編程效率和可靠性。所以,選項(xiàng)C錯(cuò)誤。

對(duì)于選項(xiàng)D,使用綁定變量,查詢優(yōu)化器不知道具體的值,故其執(zhí)行計(jì)劃也不真實(shí)。所以,選項(xiàng)D正確。

11.

YouhavesetTablespaceFullMetricsThresholdvaluesfortheUSERStablespaceasfollows:

Warning(%):90

Critical(%):95

Whichbackgroundprocessisresponsibleforissuingalertswhenthethresholdiscrossed?______A.Systemmonitor(SMON)B.Processmonitor(PMON)C.Memorymanagerprocess(MMAN)D.ManageabilityMonitorprocess(MMON)正確答案:D[考點(diǎn)]ASH/AWR/ADDM[解析]AWR(AutomaticWorkloadRepository,自動(dòng)負(fù)載信息庫(kù))主要是由MMON(ManageabilityMonitorProcess,可管理性監(jiān)視器進(jìn)程)和它的slave進(jìn)程(Mnnn)來(lái)維護(hù)的。MMON執(zhí)行很多關(guān)于AWR的任務(wù)和各種與可管理性相關(guān)的后臺(tái)任務(wù),具體包括以下功能:

1)啟動(dòng)slave進(jìn)程Mnnn去做AWR快照。

2)當(dāng)某個(gè)測(cè)量值(Metrics)超過(guò)了其度量閾值(ThresholdValue)時(shí)發(fā)出alert告警。

3)為最近改變過(guò)的SQL對(duì)象捕獲指標(biāo)信息。

若系統(tǒng)不能自動(dòng)生成AWR快照,則可以從以下幾個(gè)方面去檢查:

1)參數(shù)STATISTICS_LEVEL的值必須設(shè)置為TYPICAL或者ALL。

2)在“SELECTSNAP_INTERVALFROMDBA_HIST_WR_CONTROL;”的查詢結(jié)果中,SNAP_INTERVAL的值不能無(wú)窮大,一般為1h,可以通過(guò)執(zhí)行如下的SQL語(yǔ)句來(lái)修改自動(dòng)生成AWR快照的時(shí)間間隔:EXECDBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(INTERVAL=>60);。

3)在SQL語(yǔ)句“SELECTD.INSTANCE_NUMBER,(SYSDATE-D.END_INTERVAL_TIME)INTERVALFROMDBA_HIST_SNAPSHOTDWHERED.SNAP_ID=(SELECTMAX(SNAP_ID)FROMDBA_HIST_SNAPSHOT);”的查詢結(jié)果中,INTERVAL列的值需大于0,若小于0,則可以手動(dòng)生成幾次快照來(lái)解決這個(gè)問(wèn)題,SQL語(yǔ)句為EXECDBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();。需要注意的是,在RAC環(huán)境下該命令會(huì)對(duì)數(shù)據(jù)庫(kù)的所有節(jié)點(diǎn)都生成一次快照。

檢查MMON進(jìn)程是否HANG住,若MMON進(jìn)程HANG住,則AWR不可用。

題目說(shuō)為USERS表空間設(shè)置了閾值,問(wèn)的是當(dāng)?shù)竭_(dá)閾值之后哪個(gè)后臺(tái)進(jìn)程會(huì)發(fā)出alert告警。

本題中,對(duì)于選項(xiàng)A,SMON的作用是檢查數(shù)據(jù)庫(kù)的一致性,如有必要還會(huì)在數(shù)據(jù)庫(kù)打開時(shí)啟動(dòng)數(shù)據(jù)庫(kù)的恢復(fù)。所以,選項(xiàng)A錯(cuò)誤。

對(duì)于選項(xiàng)B,PMON的作用是負(fù)責(zé)在一個(gè)Oracle進(jìn)程失敗時(shí)清理資源。所以,選項(xiàng)B錯(cuò)誤。

對(duì)于選項(xiàng)C,MMAN的作用是協(xié)調(diào)內(nèi)存各組成部分的大小。所以,選項(xiàng)C錯(cuò)誤。

對(duì)于選項(xiàng)D,MMON的作用有:①啟動(dòng)slave進(jìn)程Mnnn去做AWR快照;②當(dāng)某個(gè)測(cè)量值超過(guò)了其度量閾值時(shí)發(fā)出alert告警;③為最近改變過(guò)的SQL對(duì)象捕獲指標(biāo)信息。所以,選項(xiàng)D正確。

二、多項(xiàng)選擇題1.

下列關(guān)于AUTHID的說(shuō)法中,正確的是______A.AUTHID子句用于指定哪些用戶被授權(quán)執(zhí)行一個(gè)程序單元B.從Oracle11gR1開始,所有的程序單元都必須指明AUTHID屬性C.一個(gè)PL/SQL程序的AUTHID屬性會(huì)影響該程序在運(yùn)行的時(shí)候發(fā)出的SQL語(yǔ)句所涉及的名字解析和權(quán)限檢查D.AUTHID屬性可以在包頭(PackageSpecification)和對(duì)象類型的頭部(ObjectTypeSpecification)指定,但不能夠在包體(PackageBody)和類型體(ObjectTypeBody)指定正確答案:CD[解析]這里首先需要明白定義者權(quán)限和調(diào)用者權(quán)限的區(qū)別。

定義者權(quán)限(DefinerRight):定義者權(quán)限是程序的默認(rèn)權(quán)限。如果是在用戶A下創(chuàng)建的程序,但其他用戶只要能執(zhí)行這個(gè)程序,那么這個(gè)程序所執(zhí)行的任務(wù)都是以用戶A的名義來(lái)執(zhí)行的。因?yàn)橛脩鬉是程序的定義者。用戶A能做什么,那這個(gè)程序就能做什么。

調(diào)用者權(quán)限(InvokerRight):也叫執(zhí)行者權(quán)限。如果某個(gè)程序中含有創(chuàng)建表的操作,且這個(gè)表只有用戶A有創(chuàng)建權(quán)限,那么這個(gè)程序在用戶A下面才執(zhí)行成功,在其他用戶下是不能成功執(zhí)行的。

程序中沒(méi)有AUTHIDCURRENT_USER表示定義者權(quán)限,以定義者身份執(zhí)行;程序中加上AUTHIDCURRENT_USER表示調(diào)用者權(quán)限,以調(diào)用者身份執(zhí)行。在Oracle8i以前的版本中,所有已編譯存儲(chǔ)對(duì)象,包括PACKAGES、PROCEDURES、FUNCTIONS、TRIGGERS、VIEWS等,只能以定義者(Definer)身份解析運(yùn)行。而從Oracle8i開始,Oracle引入調(diào)用者(Invoker)權(quán)限,使得對(duì)象可以以調(diào)用者身份和權(quán)限執(zhí)行。目前Oracle存儲(chǔ)過(guò)程默認(rèn)都是使用定義者權(quán)限調(diào)用,以定義者身份執(zhí)行;而聲明AUTHIDCURRENT_USER后則是調(diào)用者權(quán)限,以調(diào)用者身份執(zhí)行。

本題中,對(duì)于選項(xiàng)A,AUTHID子句是用于指定一個(gè)程序單元是運(yùn)行于“調(diào)用者權(quán)限”(AUTHIDCURRENT_USER)還是“定義者權(quán)限”(AUTHIDDEFINER)。所以,選項(xiàng)A錯(cuò)誤。

對(duì)于選項(xiàng)B,AUTHID子句是可選的,默認(rèn)設(shè)置為AUTHIDDEFINER。所以,選項(xiàng)B錯(cuò)誤。

對(duì)于選項(xiàng)C,實(shí)際上這就是Oracle文檔中關(guān)于AUTHID的定義。所以,選項(xiàng)C正確。

對(duì)于選項(xiàng)D,AUTHID可以在CREATEFUNCTION、CREATEPACKAGE、CREATEPROCEDURE、CREATETYPE和ALTERTYPE中包含。但不能在CREATEPACKAGEBODY或者CREATETYPEBODY中包含AUTHID。所以,選項(xiàng)D正確。

2.

Whichtwostatementsaretrueaboutcheckpointing?(Choosetwo.)______A.Thecheckpointfrequencydecreaseswiththesmallerredologfilesize.B.Itensuresthatallcommitteddataiswrittentothedatafilesduringnormalshutdown.C.Thefrequentfullcheckpointinadatabasecancausetheoveralldegradationofthedatabaseperformance.D.ItpromptstheCheckpoint(CKPT)processtowritedatatothedatafilesandredoinformationtotheonlineredologfiles.正確答案:BC[考點(diǎn)]后臺(tái)進(jìn)程[解析]本題要求選出關(guān)于檢查點(diǎn)正確的兩項(xiàng)。

對(duì)于選項(xiàng)A,當(dāng)重做日志文件太小的情況下,會(huì)頻繁地切換日志,檢查點(diǎn)信息寫入數(shù)據(jù)文件的頻率會(huì)增加而不是減少。所以,選項(xiàng)A錯(cuò)誤。

對(duì)于選項(xiàng)B,若正常關(guān)庫(kù)則會(huì)觸發(fā)完全檢查點(diǎn),CKPT會(huì)讓DBWn進(jìn)程將所有已經(jīng)提交的都寫進(jìn)數(shù)據(jù)文件。所以,選項(xiàng)B正確。

對(duì)于選項(xiàng)C,頻繁地發(fā)生完全檢查點(diǎn)會(huì)增加I/O的讀寫次數(shù),造成數(shù)據(jù)庫(kù)性能的下降。所以,選項(xiàng)C正確。

對(duì)于選項(xiàng)D,LGWR是將Redo信息寫進(jìn)Redo日志里的進(jìn)程,DBWn是將數(shù)據(jù)寫進(jìn)數(shù)據(jù)文件的進(jìn)程,而不是CKPT。所以,選項(xiàng)D錯(cuò)誤。

3.

Whichthreestatementsregardingtheserverparameterfile(SPFILE)aretrue?(Choosethree.)______A.AnSPFILEisabinaryfile.B.AnSPFILEcannotresideonaclient.C.AnSPFILEcannotcontainstaticparameters.D.AnSPFILEcanstorechangespersistentlyacrossinstancerestarts.

E.AnSPFILEcanbereadbythedatabaseserver,butitisnotwrittentobytheserver.

F.AnSPFILEmustbecreatedmanually,beforecreatingadatabase,evenifyouusetheDatabaseConfigurationAssistant(DBCA)tocreatethedatabase.正確答案:ABD[考點(diǎn)]參數(shù)[解析]參數(shù)文件(ParameterFile)也叫初始化文件,它主要用來(lái)記錄數(shù)據(jù)庫(kù)的配置文件,在數(shù)據(jù)庫(kù)啟動(dòng)時(shí),Oracle讀取參數(shù)文件,并根據(jù)參數(shù)文件中的參數(shù)設(shè)置來(lái)配置數(shù)據(jù)庫(kù),如內(nèi)存的分配,允許打開的進(jìn)程數(shù)和會(huì)話數(shù)等。Oracle的參數(shù)文件主要分為2類:PFILE(ParameterFile)和SPFILE(ServerParameterFile)。SPFILE和PFILE的區(qū)別參考下表。

需要注意的是,Oracle數(shù)據(jù)庫(kù)在啟動(dòng)時(shí)尋找參數(shù)文件的順序如下,如果這些文件都不存在,那么Oracle會(huì)報(bào)錯(cuò):

spfile<SID>.ora-->spfile.ora-->init<SID>.ora

本題中,對(duì)于選項(xiàng)A,SPFILE是一個(gè)二進(jìn)制文件。所以,選項(xiàng)A正確。

對(duì)于選項(xiàng)B,SPFILE不能用在客戶端。所以,選項(xiàng)B正確。

對(duì)于選項(xiàng)C,SPFILE可以包含靜態(tài)參數(shù)。所以,選項(xiàng)C錯(cuò)誤。

對(duì)于選項(xiàng)D,SPFILE可以永久存儲(chǔ)參數(shù)的值。所以,選項(xiàng)D正確。

對(duì)于選項(xiàng)E,SPFILE可以由數(shù)據(jù)庫(kù)進(jìn)行寫入。所以,選項(xiàng)E錯(cuò)誤。

對(duì)于選項(xiàng)F,DBCA創(chuàng)建的數(shù)據(jù)庫(kù)不用手動(dòng)創(chuàng)建SPFILE。所以,選項(xiàng)F錯(cuò)誤。

4.

Whatmethodsofpoint-in-timerecoveryareavailable?(Chooseallthatapply.)______A.Change-basedB.Cancel-basedC.Time-basedD.Sequencenumber-based

E.Transactionnumber-based正確答案:ABCD[考點(diǎn)]RMAN[解析]題目問(wèn)的是不完全恢復(fù)有哪幾種類型?

對(duì)于選項(xiàng)A,Change-based指的是基于SCN的恢復(fù)。所以,選項(xiàng)A正確。

對(duì)于選項(xiàng)B,Cancel-based指的是基于取消的恢復(fù)。所以,選項(xiàng)B正確。

對(duì)于選項(xiàng)C,Time-based指的是基于時(shí)間的恢復(fù)。所以,選項(xiàng)C正確。

對(duì)于選項(xiàng)D,Sequencenumber-based指的是基于日志序列號(hào)的恢復(fù)。所以,選項(xiàng)D正確。

對(duì)于選項(xiàng)E,Transactionnumber-based指的是基于事務(wù)號(hào)的恢復(fù),不完全恢復(fù)不能按照事務(wù)號(hào)來(lái)恢復(fù)。所以,選項(xiàng)E錯(cuò)誤。

5.

WhichtwoactivitiesareNOTsupportedbytheDataRecoveryAdvisor?(Choosetwo.)______A.Diagnoseandrepairadatafilecorruptionoffiine.B.Diagnoseandrepairadatafilecorruptiononline.C.Diagnoseandrepairfailuresonastandbydatabase.D.RecoverfromfailuresintheRealApplicationCluster(RAC)environment.正確答案:CD[考點(diǎn)]RMAN[解析]DRA(DataRecoveryAdvisor,數(shù)據(jù)恢復(fù)顧問(wèn))是Oracle11g新特性,是Oracle顧問(wèn)程序架構(gòu)的一部分,它會(huì)在遇到錯(cuò)誤時(shí)自動(dòng)收集有關(guān)故障信息。如果主動(dòng)運(yùn)行DRA,那么通??梢栽谟脩舨樵兓騻浞莶僮鳈z查到故障前檢測(cè)和修復(fù)故障。DRA可以檢測(cè)到諸如塊受損的相對(duì)較小的錯(cuò)誤,也可以檢測(cè)到導(dǎo)致數(shù)據(jù)庫(kù)無(wú)法成功啟動(dòng)的錯(cuò)誤,如缺少聯(lián)機(jī)重做日志文件、數(shù)據(jù)文件等,DRA都會(huì)主動(dòng)捕獲這些錯(cuò)誤。DEA在確定故障后,可以使用OEM或RMAN界面查看故障詳情。需要注意的是,目前DRA只支持單實(shí)例數(shù)據(jù)庫(kù),而不支持RAC庫(kù)。另外,對(duì)于備庫(kù)上的錯(cuò)誤,DRA依然無(wú)能為力。

題目問(wèn)的是DRA不支持哪兩個(gè)活動(dòng)?A和B選項(xiàng)是數(shù)據(jù)文件的OFFLINE和ONLINE,DRA是支持的,而對(duì)于備庫(kù)和RAC庫(kù),DRA是無(wú)能為力的,所以,本題答案為C和D。[考點(diǎn)]RMAN

三、簡(jiǎn)答題1.

Oracle有哪幾類鎖?正確答案:數(shù)據(jù)庫(kù)是一個(gè)多用戶使用的共享資源。當(dāng)多個(gè)用戶并發(fā)地存取數(shù)據(jù)時(shí),在數(shù)據(jù)庫(kù)中就會(huì)產(chǎn)生多個(gè)事務(wù)同時(shí)存取同一數(shù)據(jù)的情況。若對(duì)并發(fā)操作不加控制就可能會(huì)讀取和存儲(chǔ)不正確的數(shù)據(jù),破壞數(shù)據(jù)庫(kù)的一致性。并發(fā)(Concurrency)的意思是在數(shù)據(jù)庫(kù)中有超過(guò)兩個(gè)以上用戶對(duì)同樣的數(shù)據(jù)做修改,而并行(Parallel)的意思就是將一個(gè)任務(wù)分成很多小的任務(wù),讓每一個(gè)小任務(wù)同時(shí)執(zhí)行,最后將結(jié)果匯總到一起。所以說(shuō),鎖產(chǎn)生的原因就是并發(fā),并發(fā)產(chǎn)生的原因是系統(tǒng)和客戶的需要。

在單用戶數(shù)據(jù)庫(kù)中,鎖不是必需的,因?yàn)橹挥幸粋€(gè)用戶在修改信息。但是,當(dāng)多個(gè)用戶在訪問(wèn)和修改數(shù)據(jù)時(shí),數(shù)據(jù)庫(kù)必須使用鎖,以防止對(duì)同一數(shù)據(jù)進(jìn)行并發(fā)修改。所以,鎖實(shí)現(xiàn)了以下重要的數(shù)據(jù)庫(kù)需求:

1)一致性。一個(gè)會(huì)話正在查看或更改的數(shù)據(jù)不能被其他會(huì)話更改,直到用戶會(huì)話結(jié)束。

2)完整性。數(shù)據(jù)庫(kù)的數(shù)據(jù)和結(jié)構(gòu)必須按正確的順序反映對(duì)它們所做的所有更改。

數(shù)據(jù)庫(kù)通過(guò)其鎖定機(jī)制,提供在多個(gè)事務(wù)之間的數(shù)據(jù)并發(fā)性、一致性和完整性。一般情況下,鎖是自動(dòng)執(zhí)行的,并且不需要用戶操作。

在執(zhí)行SQL語(yǔ)句時(shí),Oracle數(shù)據(jù)庫(kù)自動(dòng)獲取所需的鎖。例如,在數(shù)據(jù)庫(kù)允許某個(gè)會(huì)話修改數(shù)據(jù)之前,該會(huì)話必須先鎖定數(shù)據(jù)。鎖給予該會(huì)話對(duì)數(shù)據(jù)的獨(dú)占控制權(quán),以便在釋放該鎖之前,任何其他事務(wù)都不可以修改被鎖定的數(shù)據(jù)。因?yàn)閿?shù)據(jù)庫(kù)的鎖定機(jī)制與事務(wù)控制緊密地綁定在一起,應(yīng)用程序設(shè)計(jì)人員只需要正確地定義事務(wù),而數(shù)據(jù)庫(kù)會(huì)自動(dòng)管理鎖定。

在任何情況下,Oracle都能夠自動(dòng)地獲得執(zhí)行SQL語(yǔ)句所必需的所有鎖,無(wú)須用戶干預(yù)。Oracle會(huì)盡可能地減少鎖產(chǎn)生的影響,從而最大限度地保證數(shù)據(jù)的并發(fā)訪問(wèn)能力,并確保數(shù)據(jù)一致性及錯(cuò)誤恢復(fù)。同時(shí),Oracle也支持用戶手工加鎖的操作。Oracle從來(lái)不會(huì)升級(jí)鎖,但是它會(huì)執(zhí)行鎖轉(zhuǎn)換(LockConversion)或鎖提升(LockPromotion)。

Oracle中鎖的分類圖如下圖所示。

詳細(xì)信息見(jiàn)下表。

在上表中的TM鎖又分為7個(gè)級(jí)別,其中,R代表行,S代表共享,見(jiàn)下表。鎖模式鎖描述鎖別名SQL語(yǔ)句舉例詳解允許的操作禁止的操作0none沒(méi)有鎖

1NULL空SELECTNULL鎖是一種分析鎖,是系統(tǒng)自動(dòng)生成的。有NULL鎖的對(duì)象,一旦被刪除,它會(huì)通知有該表NULL鎖的會(huì)話,該對(duì)象被刪除了。在某些情況下,如分布式數(shù)據(jù)庫(kù)的查詢也會(huì)產(chǎn)生此鎖。在一些數(shù)據(jù)庫(kù)內(nèi)部操作的某些階段也會(huì)自動(dòng)獲得該鎖

2SS(Sub-Share)、RS(RowShare,Row-S)行共享表級(jí)鎖(RowShareTableLock,RS)或行級(jí)共享鎖也被稱為子共享表鎖(SubshareTableLock,SS)1)LOCKTABLE...INSHAREUPDATEMODE;2)LOCKTABLE...INROWSHAREMODE;3)CREATE/ALTERINDEX...ONLINE;--從Oracle11g開始全過(guò)程是2級(jí)TM鎖SS鎖在表級(jí)別只和X鎖不兼容,和其他的鎖都是兼容的。SS鎖表明擁有此鎖的事務(wù)已經(jīng)鎖定了表內(nèi)的某些數(shù)據(jù)行,并有意對(duì)數(shù)據(jù)行進(jìn)行更新操作。行共享鎖是限制最少的表級(jí)鎖模式,提供在表上最高程度的并發(fā)性某個(gè)事務(wù)擁有了某個(gè)表的RS鎖后,其他事務(wù)依然可以并發(fā)地對(duì)相同數(shù)據(jù)表執(zhí)行查詢、插入、更新和刪除操作,或?qū)Ρ韮?nèi)數(shù)據(jù)行執(zhí)行加鎖的操作。也就是說(shuō),其他事務(wù)同時(shí)也能獲得相同表上的RS、RX、S和SSX模式的表級(jí)鎖某個(gè)事務(wù)擁有了某個(gè)表的RS鎖后,只會(huì)禁止其他事務(wù)對(duì)相同表獲取X鎖3SX(Sub-Exclusive)、RX(RowExclusive,Row-X)行級(jí)排它鎖(行獨(dú)占表鎖,RowExclusiveTableLock)也被稱為子獨(dú)占表鎖(SubexclusiveTableLock,SX)1)INSERT、UPDATE、DELETE、MERGEINTO2)SELECT...FORUPDATE3)SELECT...FORUPDATEOFcolumn4)LOCKTABLE...INROWEXCLUSIVEMODE;注:在Oracle10g之前FORUPDATE是RS鎖RX比RS的限制程度略高。RX鎖表明擁有此鎖的事務(wù)已經(jīng)對(duì)表內(nèi)的某些數(shù)據(jù)行進(jìn)行了更新操作。當(dāng)對(duì)話使用SELECT...FORUPDATE子串打開一個(gè)游標(biāo)時(shí),所有返回結(jié)果集中的數(shù)據(jù)行都將處于行級(jí)(Row-x)獨(dú)占式鎖定,其他對(duì)象只能查詢這些數(shù)據(jù)行,不能進(jìn)行UPDATE、DELETE或SELECT...FORUPDATE操作,但是可以執(zhí)行INSERT的操作。在沒(méi)有COMMIT之前其他會(huì)話更新(UPDATE、DELETE)相同記錄會(huì)沒(méi)有反應(yīng),因?yàn)楹笠粋€(gè)模式為3的鎖會(huì)一直等待上一個(gè)模式為3的鎖,此時(shí)必須釋放掉上一個(gè)鎖才能繼續(xù)工作某個(gè)事務(wù)擁有了某個(gè)表的RX鎖后,其他事務(wù)依然可以并發(fā)地對(duì)相同數(shù)據(jù)表執(zhí)行查詢、插入、更新和刪除操作。RX鎖允許其他多個(gè)事務(wù)同時(shí)獲得相同表上的RS或RX鎖某個(gè)事務(wù)擁有了某個(gè)表的RX鎖后,將禁止其他事務(wù)對(duì)表加S、SSX和X鎖4S(Share)共享表鎖(ShareTableLock,S)1)CREATEINDEX2)ALTERINDEX3)CREATE/ALTERINDEX...ONLINE;--在Oracle10g中的開始和結(jié)束的時(shí)候4)LOCKTABLE...INSHAREMODE不帶ONLINE的新建或重建索引的SQL語(yǔ)句獲取的是4級(jí)TM鎖。從Oracle10g開始,帶ONLINE的新建或重建索引的SQL語(yǔ)句在開始和結(jié)束的時(shí)候獲取的是4級(jí)TM鎖,而在讀取表數(shù)據(jù)的過(guò)程中獲取的是2級(jí)TM鎖。在Oracle11g中,帶ONLINE的新建或重建索引的SQL語(yǔ)句在整個(gè)執(zhí)行過(guò)程中獲取的是2級(jí)TM鎖。S鎖和S、RS鎖都兼容,和其他3種帶X的鎖模式(SX、SSX、X)都不兼容某個(gè)事務(wù)擁有了某個(gè)表的S鎖后,其他事務(wù)可以查詢表,也能夠成功執(zhí)行LOCKTABLE...INSHAREMODE語(yǔ)句,但其他事務(wù)不能對(duì)表進(jìn)行執(zhí)行INSERT、UPDATE和DELETE操作。多個(gè)事務(wù)可以并發(fā)地獲得同一個(gè)表上的S鎖。因此,擁有S鎖的事務(wù)只有在此表上沒(méi)有其他事務(wù)的S鎖時(shí),才能對(duì)表進(jìn)行更新操作某個(gè)事務(wù)擁有了某個(gè)表的S鎖后,將禁止其他事務(wù)修改此表,同時(shí)禁止其他事務(wù)獲得3.5和6級(jí)鎖5SSX(ShareSub-Exclusive)、SRX(ShareRowExclusive,S/Row-X)共享行級(jí)排它鎖,也被稱為共享行獨(dú)占表鎖(ShareRowExclusiveTableLock,SRX或共享子獨(dú)占表鎖1)LOCKTABLE...INSHAREROWEXCLUSIVEMODESSX比S鎖的限制性更強(qiáng),一次只能有一個(gè)事務(wù)可以獲取給定的表上的SSX鎖,SSX只和2級(jí)鎖RX是兼容的同一時(shí)間只有一個(gè)事務(wù)能夠獲得表的SSX鎖。若某個(gè)事務(wù)擁有了某個(gè)表的SSX鎖后,則其他事務(wù)可以查詢表,但不能對(duì)表進(jìn)行更新操作擁有SSX鎖的事務(wù)將阻止其他事務(wù)獲取SX鎖來(lái)修改數(shù)據(jù)。SSX鎖還能阻止其他事務(wù)在相同表上獲取S、SSX和X鎖6X(Exclusive)排它鎖或獨(dú)占表鎖(ExclusiveTableLock,X)1)ALTERTABLE、DROPTABLE、DROPINDEX、TRUNCATETABLE2)LOCKTABLE...INEXCLUSIVE3)INSERT/*+APPEND*/INTO...這種鎖是最嚴(yán)格的鎖,禁止其他事務(wù)執(zhí)行任何類型的DML語(yǔ)句,或在表上放置任何類型的鎖。X鎖是限制程度最高的表級(jí)鎖,它能使獲得此鎖的事務(wù)排它地對(duì)表進(jìn)行寫操作同一時(shí)間只有一個(gè)事務(wù)能獲得表上的X鎖。在一個(gè)事務(wù)獲得X鎖后,其他事務(wù)只能對(duì)表進(jìn)行查詢操作一個(gè)事務(wù)獲得排它表級(jí)鎖后,將禁止其他事務(wù)對(duì)表執(zhí)行任何DML操作,其他事務(wù)也無(wú)法獲取表上任何類型的鎖[考點(diǎn)]鎖

2.

Oracle中鎖的兼容性是什么樣的?正確答案:常見(jiàn)SQL語(yǔ)句的鎖兼容情況見(jiàn)下表。SQL語(yǔ)句行級(jí)鎖模式表級(jí)鎖模式是否允許鎖操作?RS(2)RX(3)S(4)SRX(5)X(6)SELECT...FROMtable...

NULLYYYYYINSERTINTOtable...XRXYYNNNINSERT/*+APPEND*/INTOtable...XXNNNNNUPDATEtable...XRXY*Y*NNNDELETEFROMtable...XRXY*Y*NNNSELECT...FROMtableFORUPDATE(OF)...XRX(Oracle9i是RS)Y*Y*Y*Y*NLOCKTABLEtableINROWSHAREMODE

RSYYYYNLOCKTABLEtableINSHAREUPDATEMODE

RSYYYYNLOCKTABLEtableINROWEXCLUSIVEMODE

RXYYNNNLOCKTABLEtableINSHAREMODE

SYNYNNLOCKTABLEtableINSHAREROWEXCLUSIVEMODE

SRXYNNNNLOCKTABLEtableINEXCLUSIVEMODE

XNNNNN

注:Y*表示當(dāng)不與其他事務(wù)的行級(jí)鎖沖突時(shí)才允許,否則將產(chǎn)生等待。鎖之間的兼容模式見(jiàn)下表。

Held/GetNull(1)RS(2)RX(3)S(4)SSX(5)X(6)0、1none、Null√√√√√√2RS√√√√√

3RX√√√

4S√√

5SSX√√

6X√

[考點(diǎn)]鎖

3.

在Oracle中,常用的與鎖有關(guān)的數(shù)據(jù)字典視圖有哪些?正確答案:常用的與鎖有關(guān)的數(shù)據(jù)字典視圖有DBA_DML_LOCKS、DBA_DDL_LOCKS、V$LOCK、DBA_LOCK和V$LOCKED_OBJECT。V$LOCKED_OBJECT記錄的是DML鎖信息,而沒(méi)有記錄DDL鎖。V$LOCK和DBA_LOCKS、DBA_LOCK內(nèi)容一樣,DBA_LOCKS是DBA_LOCK的同義詞??梢杂脛?dòng)態(tài)性能視圖V$FIXED_VIEW_DEFINITION來(lái)查看它們的關(guān)系。

V$SESSION視圖的TADDR列表示事務(wù)處理狀態(tài)對(duì)象的地址,對(duì)應(yīng)于V$TRANSACTION.ADDR列;V$SESSION視圖的LOCKWAIT列表示等待鎖的地址,對(duì)應(yīng)于V$LOCK的KADDR列;若當(dāng)前會(huì)話沒(méi)有被阻塞則為空。V$SESSION視圖的SADDR列對(duì)應(yīng)于V$TRANSACTION的SES_ADDR列??梢酝ㄟ^(guò)ROW_WAIT_OBJ#、ROW_WAIT_FILE#、ROW_WAIT_BLOCK#和ROW_WAIT_ROW#這4個(gè)字段查詢現(xiàn)在正在被鎖的表的相關(guān)信息(ROWID),例如,表名、文件名及行號(hào)。V$SESSION視圖中的P1和P2參數(shù)根據(jù)等待事件的不同所代表的含義也不同,可以從V$EVENT_NAME視圖獲知每個(gè)參數(shù)的含義。

在V$LOCK中,當(dāng)TYPE列的值為TM鎖時(shí),則ID1列的值為DBA_OBJECTS.OBJECT_ID,ID2列的值為0;當(dāng)TYPE列的值為TX鎖時(shí),則ID1列的值為視圖V$TRANSACTION中的XIDUSN字段(undoSegmentNumber,事務(wù)對(duì)應(yīng)的撤銷段序列號(hào))和XIDSLOT字段(SlotNumber,事務(wù)對(duì)應(yīng)的槽位號(hào)),其中,ID1的高16位為XIDUSN,低16位為XIDSLOT。ID2列的值為視圖V$TRANSACTION中的XIDSQN字段(SequenceNumber,事務(wù)對(duì)應(yīng)的序列號(hào))。

當(dāng)TYPE列的值為TX鎖時(shí),計(jì)算ID1列的值的公式為

SELECTTRUNC(ID1/POWER(2,16))ASXIDUSN,BITAND(ID1,TO_NUMBER('FFFF','XXXX'))+0ASXIDSLOT,ID2XIDSONFROMDUAL;

所有與鎖有關(guān)的數(shù)據(jù)字典視圖之間的關(guān)聯(lián)關(guān)系如下圖所示。

[考點(diǎn)]鎖

4.

DML_LOCKS和DDL_LOCK_TIMEOUT參數(shù)的含義是什么?正確答案:TX鎖的總數(shù)由初始化參數(shù)TRANSACTIONS決定,而TM鎖個(gè)數(shù)則由初始化參數(shù)DML_LOCKS決定。DML_LOCKS參數(shù)屬于推導(dǎo)參數(shù),DML_LOCKS=4*TRANSACTIONS。

在Oracle11g以前,DDL語(yǔ)句是不會(huì)等待DML語(yǔ)句的。當(dāng)DDL語(yǔ)句訪問(wèn)的對(duì)象正在執(zhí)行DML語(yǔ)句時(shí),會(huì)立即報(bào)錯(cuò)“ORA-00054:resourcebusyandacquirewithnowaitspecified”;而在Oracle11g以后,DDL_LOCK_TIMEOUT參數(shù)可以修改這一狀態(tài),當(dāng)DDL_LOCK_TIMEOUT為0時(shí),DDL不等待DML,當(dāng)DDL_LOCK_TIMEOUT為N(秒)時(shí),DDL等待DML操作N秒,該值默認(rèn)為0。[考點(diǎn)]鎖

5.

FORUPDATE和FORUPDATEOF的區(qū)別是什么?正確答案:SELECT...FORUPDATE語(yǔ)句的語(yǔ)法如下:

SELECT...FORUPDATE[OFcolumn_list][WAITn|NOWAIT][SKIPLOCKED];

其中,這個(gè)OF子句在涉及多個(gè)表時(shí),具有較大作用。若不使用OF指定鎖定的表的列,則所有表的相關(guān)行均被鎖定。若在OF中指定了需修改的列,則只有與這些列相關(guān)的表的行才會(huì)被鎖定。WAIT子句指定等待其他用戶釋放鎖的秒數(shù),以防止無(wú)限期的等待。

“使用FORUPDATEWAIT”子句的優(yōu)點(diǎn)如下:

1)防止無(wú)限期地等待被鎖定的行。

2)允許應(yīng)用程序中對(duì)鎖的等待時(shí)間進(jìn)行更多的控制。

3)對(duì)于交互式應(yīng)用程序非常有用,因?yàn)檫@些用戶不能等待不確定的時(shí)間。

4)若使用了SKIPLOCKED,則可以越過(guò)鎖定的行,不會(huì)報(bào)告由waitn引發(fā)的“資源忙”異常報(bào)告。

在Oracle10g之前,SELECT...FORUPDATE獲取的是2級(jí)TM鎖,而從Oracle10g開始,SELECT...FORUPDATE獲取的是3級(jí)TM鎖。[考點(diǎn)]鎖

6.

若在使用“PLSQLDeveloper”軟件編譯存儲(chǔ)過(guò)程、函數(shù)等對(duì)象時(shí)無(wú)響應(yīng),則可能的原因是什么?正確答案:在編譯某個(gè)存儲(chǔ)過(guò)程的時(shí)候,Oracle會(huì)自動(dòng)給這個(gè)對(duì)象加上DDL鎖,同時(shí)也會(huì)對(duì)這個(gè)存儲(chǔ)過(guò)程所引用的對(duì)象加鎖。在數(shù)據(jù)庫(kù)的開發(fā)過(guò)程中,經(jīng)常碰到包、存儲(chǔ)過(guò)程、函數(shù)無(wú)法編譯或使用“PLSQLDeveloper”這款軟件進(jìn)行編譯時(shí)會(huì)導(dǎo)致該軟件無(wú)法響應(yīng)的問(wèn)題,這個(gè)時(shí)候可以通過(guò)查詢DBA_DDL_LOCKS或V$ACCESS來(lái)獲取鎖的相關(guān)信息。[考點(diǎn)]鎖

7.

在新建或重建索引的過(guò)程中,數(shù)據(jù)庫(kù)會(huì)分配哪些鎖?正確答案:可以利用10704和10046事件跟蹤新建或重建索引過(guò)程中的鎖信息,命令為

altersessionsetevents'10704tracenamecontextforever,level10';

altersessionsetevents'10046tracenamecontextforever,level12';

新建或重建索引的鎖信息如下圖所示。

不帶ONLINE的新建或重建索引的SQL語(yǔ)句獲取的是4級(jí)TM鎖,它會(huì)阻塞任何DML操作。

在Oracle10g中,帶ONLINE的新建或重建索引的SQL語(yǔ)句在開始和結(jié)束的時(shí)候獲取的是4級(jí)TM鎖,而在讀取表數(shù)據(jù)的過(guò)程中獲取的是2級(jí)TM鎖。所以,在Oracle10g中,即使加上ONLINE也會(huì)阻塞其他會(huì)話的DML操作。

在Oracle11g中,帶ONLINE的新建或重建索引的SQL語(yǔ)句在整個(gè)執(zhí)行過(guò)程中獲取的是2級(jí)TM鎖,并不會(huì)阻塞其他會(huì)話的DML操作,但是在創(chuàng)建或重建索引的過(guò)程中,其他會(huì)話產(chǎn)生的事務(wù)會(huì)阻塞索71的創(chuàng)建或重建操作,所以必須結(jié)束其他會(huì)話的事務(wù)才能讓創(chuàng)建或重建索引的操作完成。因此,應(yīng)該避免在業(yè)務(wù)高峰期創(chuàng)建索引。

在Oracle11g中,帶ONLINE的新建或重建索引的情況下:

1)過(guò)程中會(huì)持有OD(ONLINEDDL)、DL(DirectLoaderIndexCreation)兩種類型的鎖,在Oracle10g下只有DL鎖沒(méi)有OD鎖。

2)表級(jí)鎖TM的持有模式為2級(jí)RS(RowShare)與3級(jí)RX(RowExclusive)類型的鎖互相兼容,因此不會(huì)在表級(jí)發(fā)生阻塞。

3)阻塞發(fā)生在行級(jí)鎖申請(qǐng)階段,即請(qǐng)求的4級(jí)S(Share)類型的鎖與執(zhí)行DML的會(huì)話已經(jīng)持有的6級(jí)X(Exclusive)鎖之間存在不兼容的情況;相比非ONLINE方式的表級(jí)鎖,鎖的粒度上更加細(xì)化,副作用更小。

4)新增以“SYS_JOURNAL_”為前綴的IOT表,記錄與索引創(chuàng)建動(dòng)作同時(shí)進(jìn)行的其他DML操作修改過(guò)的記錄,等到索引創(chuàng)建完成前將IOT表里的記錄合并至索引中并刪除IOT表。[考點(diǎn)]鎖

8.

對(duì)于錯(cuò)誤“ORA-08104:thisindexobject68111isbeingonlinebuiltorrebuilt”,應(yīng)該如何處理?正確答案:官方文檔的解釋:

08104,00000,"thisindexobject%sisbeingonlinebuiltorrebuilt"

//*Cause:

theindexisbeingcreatedorrebuildorwaitedforrecovering

//

fromtheonline(re)build

//*Action:waittheonlineindexbuildorrecoverytocomplete

由此可見(jiàn),出現(xiàn)該錯(cuò)誤的原因是,索引正在被新建或重建,或在等待在線重建完成。

SQL>ALTERINDEXINX_LOG_LHRINONREBUILDONLINE;

ALTERINDEXIDX_LOG_LHRINONREBUILDONLINE

*

第1行出現(xiàn)錯(cuò)誤:

ORA-08104:thisindexobject68111isbeingonlinebuiltorrebuilt

檢查了一下68100對(duì)象,發(fā)現(xiàn)就是要REBUILD的那個(gè)索引:

此時(shí),解決辦法是可以使用如下的存儲(chǔ)過(guò)程來(lái)清理:

DECLARE

RETVAL

BOOLEAN;

OBJECT_ID

BINARY_INTEGER;

WAIT_FOR_LOCKBINARY_INTEGER;

BEGIN

OBJECT_ID

:=68111;--對(duì)象號(hào)

WAdT_FOR_LOCK:=NULL;

RETVAL

:=SYS.DBMS_REPAIR.ONLINE_INDEX_CLEAN();

COMMIT;

END;

/

執(zhí)行完成后,再次執(zhí)行重建索引的語(yǔ)句。[考點(diǎn)]鎖

9.

Oracle中的死鎖是什么含義?正確答案:所謂死鎖,是指兩個(gè)或兩個(gè)以上的進(jìn)程在執(zhí)行過(guò)程中,因爭(zhēng)奪資源而造成的一種互相等待的現(xiàn)象,若無(wú)外力作用,它們都將無(wú)法推進(jìn)下去。此時(shí)稱系統(tǒng)處于死鎖狀態(tài)或系統(tǒng)產(chǎn)生了死鎖,這些永遠(yuǎn)在互相等待的進(jìn)程稱為死鎖進(jìn)程。Oracle對(duì)于“死鎖”是要做處理的,而不是不聞不問(wèn)。

Oracle中產(chǎn)生死鎖的時(shí)候會(huì)在告警日志(alcrt_$ORACLE_SID.log)文件中記錄死鎖的相關(guān)信息,無(wú)論單機(jī)還是RAC環(huán)境都有Deadlock這個(gè)關(guān)鍵字,而且當(dāng)發(fā)生死鎖時(shí)都會(huì)生成一個(gè)trace文件,這個(gè)文件名在告警日志文件中都有記載。由于在RAC環(huán)境中,是由LMD(LockManagerDaemon)進(jìn)程統(tǒng)一管理各個(gè)節(jié)點(diǎn)之間的鎖資源的,所以,RAC環(huán)境中trace文件是由LMD進(jìn)程來(lái)生成的。

在RAC環(huán)境中,告警日志的形式如下:

在單機(jī)環(huán)境中,告警日志的形式如下:

通常來(lái)講,對(duì)于單機(jī)環(huán)境,當(dāng)有死鎖發(fā)生后,在trace文件中會(huì)看到如下的日志信息:

當(dāng)看到trace文件時(shí),需要確認(rèn)一下鎖的類型,是兩行還是一行,是TX還是TM,如果只有一行,那么說(shuō)明是同一個(gè)SESSION,可能是自治事務(wù)引起的死鎖。

對(duì)于RAC環(huán)境,當(dāng)有死鎖發(fā)生后,在trace文件中會(huì)看到如下的日志信息:

[考點(diǎn)]鎖

10.

死鎖的檢測(cè)時(shí)間是多長(zhǎng)?正確答案:死鎖的檢測(cè)時(shí)間是由隱含參數(shù)“_LM_DD_INTERVAL”來(lái)控制的。在Oracle11g中,隱含參數(shù)“LM_DD_INTERVAL”的值默認(rèn)為10s,而在Oracle10g中,該參數(shù)的值默認(rèn)為60s。[考點(diǎn)]鎖

11.

死鎖有哪些種類?正確答案:有資源阻塞的地方就可能有死鎖。Oralce中最常見(jiàn)的死鎖分為行級(jí)死鎖(Row-LevelDeadlock)和塊級(jí)死鎖(Block-LevelDeadlock)。其中,行級(jí)死鎖分為①主鍵、唯一索引的死鎖(會(huì)話交叉插入相同的主鍵值);②外鍵未加索引;③表上的位圖索引遭到并發(fā)更新;④常見(jiàn)事務(wù)引發(fā)的死鎖(例如,兩個(gè)表之間不同順序相互更新操作引起的死鎖、同一張表刪除和更新之間引起的死鎖);⑤自治事務(wù)引發(fā)的死鎖。塊級(jí)死鎖主要指的是ITL(InterestedTransactionList)死鎖。

死鎖分類圖如下圖所示。

ITL(InterestedTransactionList)是Oracle數(shù)據(jù)塊內(nèi)部的一個(gè)組成部分,用來(lái)記錄該塊所有發(fā)生的事務(wù),有的時(shí)候也叫ITL槽位。如果一個(gè)事務(wù)一直沒(méi)有提交,那么,這個(gè)事務(wù)將一直占用一個(gè)ITL槽位,ITL里面記錄了事務(wù)信息、回滾段的入口和事務(wù)類型等。如果這個(gè)事務(wù)已經(jīng)提交,那么,ITL槽位中還保存有這個(gè)事務(wù)提交時(shí)候的SCN號(hào)。ITL的個(gè)數(shù)受表的存儲(chǔ)參數(shù)INITRANS控制,在一個(gè)塊內(nèi)部,默認(rèn)分配了2個(gè)ITL的個(gè)數(shù),如果這個(gè)塊內(nèi)還有空閑空間,那么Oracle是可以利用這些空閑空間再分配ITL的;如果沒(méi)有了空閑空間,那么這個(gè)塊因?yàn)椴荒芊峙湫碌腎TL,所以,就可能發(fā)生ITL等待。如果在并發(fā)量特別大的系統(tǒng)中,那么最好分配足夠的ITL個(gè)數(shù),或者設(shè)置足夠的PCTFREE,保證ITL能擴(kuò)展,但是PCTFREE有可能是被行數(shù)據(jù)給消耗掉的,例如UPDATE,所以,也有可能導(dǎo)致塊內(nèi)部的空間不夠而導(dǎo)致ITL等待,出現(xiàn)了ITL等待就可能導(dǎo)致ITL死鎖。

ITL等待表現(xiàn)出的等待事件為“TX-allocateITLentry”,根據(jù)MOS(Troubleshootingwaitsfor'enq:TX-allocateITLentry'(DocID1472175.1)提供的解決辦法,需要修改表和索引的參數(shù)(PCTFREE和INITRANS),修改使用的SQL如下,這里假設(shè)用戶名為TLHR,表名為TLHRBOKBAL,表上的索引名為PK_TLHRBOKBAL:

ALTERTABLETLHR.TLHRBOKBALPCTFREE20INlTRANS16;

ALTERTABLETLHR.TLHRBOKBALMOVENOLOGGINGPARALLEL12;

ALTERTABLETLHR.TLHRBOKBALLOGGINGNOPARALLEL;

ALTERINDEXTLHR.PK_TLHRBOKBALREBUILDPCTFREE20INITRANS16NOLOGGINGPARALLEL12;

ALTERINDEXTLHR.PK_TLHRBOKBALLOGGINGNOPARALLEL;[考點(diǎn)]鎖

12.

請(qǐng)口頭描述一種死鎖的產(chǎn)生過(guò)程。正確答案:下面給出一個(gè)基于事務(wù)相互更新導(dǎo)致死鎖的模擬實(shí)驗(yàn):

1)創(chuàng)建兩個(gè)簡(jiǎn)單的表A和B,每個(gè)表中僅僅包含一個(gè)字段ID,這里的實(shí)驗(yàn)環(huán)境為集群。

SYS@RACLHR2>CREATETABLEA(IDINT);

Tablecreated.

SYS@RACLHR2>CREATETABLEB(IDINT);

Tablecreated.

2)每張表中僅插入一條數(shù)據(jù),A表插入1,B表插入2。

SYS@RACLHR2>INSERTINTOAVALUES(1);

1rowereated.

SYS@RACLHR2>INSERTINTOBVALUES(2);

1rowcreated.

SYS@RACLHR2>COMMIT;

Commitcomplete.

3)在第一個(gè)會(huì)話SESSION1中更新表A中的記錄“1”為“10000”,且不提交;在第二個(gè)會(huì)話SESSION2中更新表B中的記錄“2”為“20000”,且不提交。

SESSION1的情況如下:

SESSION2的情況如下:

此時(shí),執(zhí)行過(guò)程沒(méi)有任何問(wèn)題?,F(xiàn)在接著執(zhí)行下面的操作,首先回到SESSION1中,更新表B的記錄,此時(shí)出現(xiàn)了會(huì)話阻塞,更新不能繼續(xù):

SYS@RACL_HR2>UPDATEBSETID=10000WHEREID=2;

這里出現(xiàn)了鎖等待(阻塞)的現(xiàn)象,因?yàn)樵赟ESSION2中已經(jīng)對(duì)這條數(shù)據(jù)執(zhí)行過(guò)UPDATE操作,沒(méi)有提交表示已經(jīng)對(duì)該行加了行級(jí)鎖,如下:

可以通過(guò)V$SESSION視圖看到,實(shí)例2的195阻塞了實(shí)例2的133會(huì)話,即本實(shí)驗(yàn)中的SESSION2阻塞了SESSION1。

4)接下來(lái)再執(zhí)行一條SQL后,死鎖就會(huì)產(chǎn)生了。在SESSION2中,更新表A的記錄:

SYS@RACLHR2>UPDATEASETID=10000WHEREID=1;

由于SESSION1沒(méi)有提交,所以,SESSION2還是長(zhǎng)時(shí)間地等待即會(huì)話HANG住,但是SESSION2已經(jīng)發(fā)生了死鎖,此時(shí)由第一個(gè)會(huì)話SESSION1可以看到原先一直在等待的SQL語(yǔ)句報(bào)了如下的錯(cuò)誤:

SYS@RACLHR2>UPDATEBSETID=10000WHEREID=2;

UPDATEBsedid=10000WHEREid=2

*

ERRORatline1:

ORA-00060:deadlockdetectedwhilewaitingforresource

若此時(shí)查詢V$SESSION視圖,則可以看到實(shí)例2的133阻塞了實(shí)例2的195會(huì)話,即本實(shí)驗(yàn)中的SESSION1阻塞了SESSION2,和剛才的阻塞情況相反,說(shuō)明Oracle做了自動(dòng)處理:

[考點(diǎn)]鎖

13.

什么是ASH/AWR/ADDM?正確答案:ASH(ActiveSessionHistory,活動(dòng)會(huì)話歷史信息)、AWR(AutomaticWorkloadRepository,自動(dòng)負(fù)載信息庫(kù))、ADDM(AutomaticDatabaseDiagnosticMonitor,數(shù)據(jù)庫(kù)自動(dòng)診斷監(jiān)視工具)是Oracle性能調(diào)整的三把利劍,需要深入地了解,但是面試一般都問(wèn)得比較簡(jiǎn)單,主要問(wèn)到的是AWR。

關(guān)于ASH、AWR、ADDM、AWRDDRPT、AWRSQRPT的比對(duì)見(jiàn)下表。

[考點(diǎn)]ASH/AWR/ADDM

14.

在看AWR報(bào)告時(shí)主要關(guān)注哪些方面的內(nèi)容?正確答案:AWR報(bào)告中常常需要關(guān)注如下的內(nèi)容:

(1)DBTime/Elapsed

該部分位于AWR報(bào)告的頭部,如下圖所示,需要特別關(guān)注DBTime和Elapsed的比值。

Elapsed:60.03(mins)表明采樣時(shí)間大約是60min,任何數(shù)據(jù)都要通過(guò)這個(gè)時(shí)間來(lái)衡量,離開了這個(gè)采樣時(shí)間,任何數(shù)據(jù)都毫無(wú)意義。Elapsed為該AWR性能報(bào)告的自然時(shí)間跨度,所謂自然時(shí)間的跨度,例如前一個(gè)快照是4點(diǎn)生成的,后一個(gè)快照是6點(diǎn)生成的,如果使用“@?/rdbms/admin/awrrpt”腳本中指定這2個(gè)快照,那么其Elapsed=(6-4)h=2h。一個(gè)AWR報(bào)告至少需要2個(gè)AWR快照才能生成(注意在這2個(gè)快照之間實(shí)例不能重啟過(guò),否則指定這2個(gè)快照生成AWR報(bào)告會(huì)報(bào)錯(cuò))。AWR性能報(bào)告中的指標(biāo)往往是后一個(gè)快照和前一個(gè)快照的指標(biāo)的delta值,這是因?yàn)槔塾?jì)值并不能反映某段時(shí)間內(nèi)的系統(tǒng)負(fù)載情況。如果為了診斷特定時(shí)段性能問(wèn)題,那么采用時(shí)間不宜過(guò)長(zhǎng)。如果是看全天負(fù)載,那么可以長(zhǎng)一些。最常見(jiàn)的是60min或120min。

DBTime:427.44(mins)表明用戶操作花費(fèi)的時(shí)間,包括CPU時(shí)間和活動(dòng)的非后臺(tái)進(jìn)程的等待時(shí)間。也許有人會(huì)覺(jué)得奇怪,為什么在采樣的60min過(guò)程中,用戶操作時(shí)間竟然有427min呢?遠(yuǎn)遠(yuǎn)超過(guò)了采樣時(shí)間,原因是AWR報(bào)告是一個(gè)數(shù)據(jù)的集合,例如在一分鐘之內(nèi),一個(gè)用戶等待了30s,那么10個(gè)用戶就等待了300s。對(duì)于CPU來(lái)說(shuō),一個(gè)CPU處理了30s,16個(gè)CPU就是480s。這些時(shí)間都是以累積的方式記錄在AWR報(bào)告中的。DBTime不包括Oracle后臺(tái)進(jìn)程消耗的時(shí)間。一般來(lái)說(shuō),如果DBTime除以CPU個(gè)數(shù)大于Elapsed時(shí)間,那么說(shuō)明數(shù)據(jù)庫(kù)比較繁忙。

(2)LoadProfile

該部分位于AWR報(bào)告的總覽部分(ReportSummary),AWR報(bào)告總覽部分包括了五個(gè)部分:緩存尺寸(CacheSizes)、負(fù)載性能(LoadProfile)、數(shù)據(jù)庫(kù)效率(InstanceEfficiencyPercentages)、共享池統(tǒng)計(jì)(SharedPoolStatistics)和TOP5事件(TOP5TimedEvents)。這五個(gè)部分是整個(gè)AWR報(bào)告的核心部分,記錄了數(shù)據(jù)庫(kù)系統(tǒng)的關(guān)鍵性能參數(shù)和狀況。其中,LoadProfile代表負(fù)載性

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論