Oracle程序員面試分類模擬41_第1頁
Oracle程序員面試分類模擬41_第2頁
Oracle程序員面試分類模擬41_第3頁
Oracle程序員面試分類模擬41_第4頁
Oracle程序員面試分類模擬41_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

Oracle程序員面試分類模擬41簡答題1.

如何測(cè)試磁盤性能?正確答案:用類似如下的方法測(cè)試寫能力:

期間系統(tǒng)I/O使用可以用iostat:

2.

RAC有哪些優(yōu)缺點(diǎn)?正確答案:從Oracle9i版本開始就支持RAC了,可以支持7*24有效的數(shù)據(jù)庫應(yīng)用系統(tǒng),在低成本服務(wù)器上構(gòu)建高可用性數(shù)據(jù)庫系統(tǒng),并且自由部署應(yīng)用,無需修改代碼。在Oracle9i之前,RAC稱為OPS(OracleParallelServer)。RAC與OPS之間的一個(gè)較大區(qū)別是,RAC采用了CacheFusion(緩存融合)技術(shù),節(jié)點(diǎn)已經(jīng)取出的數(shù)據(jù)塊更新后沒有寫入磁盤前,可以被另外一個(gè)節(jié)點(diǎn)更新,然后以最后的版本寫入磁盤。在OPS中,節(jié)點(diǎn)間的數(shù)據(jù)請(qǐng)求需要先將數(shù)據(jù)寫入磁盤,然后發(fā)出請(qǐng)求的節(jié)點(diǎn)才可以讀取該數(shù)據(jù)。使用CacheFusion時(shí),RAC的各個(gè)節(jié)點(diǎn)間數(shù)據(jù)緩沖區(qū)通過高速、低延遲的內(nèi)部網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)塊的傳輸。在OracleRAC環(huán)境下,Oracle提供了集群軟件和存儲(chǔ)管理軟件,為用戶降低了應(yīng)用成本。當(dāng)應(yīng)用規(guī)模需要擴(kuò)充時(shí),用戶可以按需擴(kuò)展系統(tǒng),以保證系統(tǒng)的性能。

1)優(yōu)點(diǎn)

①RAC是一種雙機(jī)并行模式,并非主備模式。也就是說,RAC集群的所有成員都可以同時(shí)接收客戶端的請(qǐng)求。所以,RAC實(shí)現(xiàn)了容錯(cuò)、單點(diǎn)故障解決(如果有節(jié)點(diǎn)掛掉,那么其他節(jié)點(diǎn)可以繼續(xù)提供服務(wù))和多節(jié)點(diǎn)負(fù)載均衡(不同節(jié)點(diǎn)可以相互配合,分擔(dān)負(fù)載)。

②提供高可用:故障容錯(cuò)和無縫切換功能,將硬件和軟件錯(cuò)誤造成的影響最小化,能夠保證在集群中只要有一個(gè)節(jié)點(diǎn)存活,就能正常對(duì)外提供服務(wù)。

③通過并行執(zhí)行技術(shù)提高事務(wù)響應(yīng)時(shí)間,通常被用于OLAP系統(tǒng)。

④通過橫向擴(kuò)展提高每秒交易數(shù)和連接數(shù),通常被用于OLTP系統(tǒng)。

⑤擴(kuò)展了機(jī)器的負(fù)載能力,節(jié)約了硬件成本,可以用多個(gè)廉價(jià)PC(PersonalComputer)服務(wù)器代替昂貴的小型機(jī)或大型機(jī),同時(shí)節(jié)約相應(yīng)維護(hù)成本。

⑥易伸縮、可擴(kuò)展性好,可以方便添加、刪除節(jié)點(diǎn),擴(kuò)展硬件資源。

⑦實(shí)現(xiàn)了業(yè)務(wù)分割處理。

⑧低成本。能使用較低廉的服務(wù)器來實(shí)現(xiàn)高可用性、高吞吐量的集群環(huán)境,這要比通過對(duì)某臺(tái)高端服務(wù)器增加硬件實(shí)現(xiàn)高可用性、高吞吐量花費(fèi)的成本低很多。

⑨高吞吐量。隨著節(jié)點(diǎn)數(shù)的增加,整個(gè)RAC的吞吐量也在不斷增長。

2)缺點(diǎn)

①相對(duì)單機(jī),由于底層技術(shù)復(fù)雜,所以,管理更復(fù)雜,對(duì)DBA的技術(shù)要求更高。

②可能會(huì)增加軟件成本(如果使用高配置的PC服務(wù)器,那么Oracle一般按照CPU個(gè)數(shù)收費(fèi))。

③在RAC系統(tǒng)規(guī)劃設(shè)計(jì)較差時(shí)性能可能會(huì)不如單節(jié)點(diǎn),存在資源爭用(CacheFusion)。

3)RAC的特點(diǎn)如下:

①每一個(gè)節(jié)點(diǎn)的實(shí)例都有自己的SGA。

②每一個(gè)節(jié)點(diǎn)的實(shí)例都有自己的后臺(tái)進(jìn)程。

③每一個(gè)節(jié)點(diǎn)的實(shí)例都有自己的RedoLogFiles。

④每一個(gè)節(jié)點(diǎn)的實(shí)例都有自己的Undo表空間。

⑤所有節(jié)點(diǎn)都共享一份DataFiles和ControlFiles。

3.

什么是臨時(shí)表?它有哪些分類?正確答案:在創(chuàng)建數(shù)據(jù)表的時(shí)候,如果沒有特殊地指明,那么創(chuàng)建的表是一個(gè)永久的關(guān)系型表,也就是說,這個(gè)表中對(duì)應(yīng)的數(shù)據(jù),除非是顯式地刪除,否則表中的數(shù)據(jù)是永遠(yuǎn)都存在的。相對(duì)應(yīng)的,在Oracle數(shù)據(jù)庫中,還有一種類型的表,稱為臨時(shí)表。這個(gè)臨時(shí)表和永久表最大的區(qū)別就是表中的數(shù)據(jù)不會(huì)永遠(yuǎn)地存在。當(dāng)一個(gè)會(huì)話結(jié)束或者事務(wù)結(jié)束的時(shí)候,這個(gè)臨時(shí)表中的數(shù)據(jù),不用用戶自己刪除,數(shù)據(jù)庫自己會(huì)自動(dòng)清除。

Oracle的臨時(shí)表創(chuàng)建之后基本不占用表空間,如果沒有指定臨時(shí)表(包括臨時(shí)表的索引)存放的表空間,那么插入到臨時(shí)表的數(shù)據(jù)是存放在Oracle系統(tǒng)的默認(rèn)臨時(shí)表空間中(TEMP),一個(gè)系統(tǒng)可能有多個(gè)臨時(shí)表空間。臨時(shí)表的數(shù)據(jù)只能存放在臨時(shí)表空間中。

臨時(shí)表的數(shù)據(jù)只是在事務(wù)期間存在,對(duì)于會(huì)話類型的臨時(shí)表,數(shù)據(jù)在會(huì)話期間存在,會(huì)話的數(shù)據(jù)對(duì)于當(dāng)前會(huì)話私有,每個(gè)會(huì)話只能看到并修改自己的數(shù)據(jù)。DML鎖不會(huì)加到臨時(shí)表的數(shù)據(jù)上??梢詫?duì)臨時(shí)表創(chuàng)建索引、視圖、觸發(fā)器,可以用exp和imp工具導(dǎo)入導(dǎo)出表的定義,但是不能導(dǎo)出數(shù)據(jù)。

(1)臨時(shí)表的特點(diǎn)

1)多用戶操作的獨(dú)立性:對(duì)于使用同一張臨時(shí)表的不同用戶,Oracle都會(huì)分配一個(gè)獨(dú)立的TEMPSEGMENT,這樣就避免了多個(gè)用戶在對(duì)同一張臨時(shí)表操作時(shí)發(fā)生交叉,從而保證了多個(gè)用戶操作的并發(fā)性和獨(dú)立性。

2)數(shù)據(jù)的臨時(shí)性:既然是臨時(shí)表,顧名思義,存放在該表中的數(shù)據(jù)是臨時(shí)性的。Oracle根據(jù)創(chuàng)建臨時(shí)表時(shí)指定的參數(shù)(ONCOMMITDELETEROWS/ONCOMMITPRESERVEROWS),自動(dòng)將數(shù)據(jù)TRUNCATE掉。

(2)臨時(shí)表的分類

Oracle數(shù)據(jù)庫根據(jù)I臨時(shí)表的性質(zhì)不同,可以分為事務(wù)臨時(shí)表(ONCOMMITDELETEROWS)與會(huì)話臨時(shí)表(ONCOMMITPRESERVEROWS)。

1)事務(wù)臨時(shí)表。事務(wù)臨時(shí)表是指數(shù)據(jù)只有在當(dāng)前事務(wù)內(nèi)有效,該臨時(shí)表與事務(wù)相關(guān),當(dāng)進(jìn)行事務(wù)提交或者事務(wù)回滾的時(shí)候,臨時(shí)表中的數(shù)據(jù)將自動(dòng)被清空,其他的內(nèi)容和會(huì)話級(jí)的臨時(shí)表一致(包括退出SESSION的時(shí)候,事務(wù)級(jí)的臨時(shí)表的數(shù)據(jù)也會(huì)被清空)。一般情況下,如果在創(chuàng)建數(shù)據(jù)表的時(shí)候,沒有特殊指明表是會(huì)話臨時(shí)表的話,那么該表默認(rèn)為事務(wù)臨時(shí)表。所以,事務(wù)臨時(shí)表中的數(shù)據(jù)就被清空的情況包括:①提交事務(wù)(COMMIT);②回滾事務(wù)(ROLLBACK);③退出SESSION。

創(chuàng)建事務(wù)臨時(shí)表的語法如下:

2)會(huì)話臨時(shí)表。會(huì)話臨時(shí)表,顧名思義,是指數(shù)據(jù)只在當(dāng)前會(huì)話內(nèi)是有效的臨時(shí)表。關(guān)閉當(dāng)前會(huì)話或者進(jìn)行新的連接之后,數(shù)據(jù)表中的內(nèi)容就會(huì)被清除。

查看一張表是否臨時(shí)表,可以從DBA_TABLES視圖的DURATION列來查詢:

會(huì)話臨時(shí)表與事務(wù)臨時(shí)表主要的差異就在于刪除數(shù)據(jù)的時(shí)機(jī)不同。事務(wù)臨時(shí)表是在事務(wù)提交或回滾的時(shí)候清除數(shù)據(jù),而會(huì)話臨時(shí)表則是在關(guān)閉當(dāng)前會(huì)話的時(shí)候清除數(shù)據(jù)。只要當(dāng)前會(huì)話沒有關(guān)閉,即使事務(wù)完成了,會(huì)話臨時(shí)表中的數(shù)據(jù)仍然存在,不會(huì)被清除。

(3)臨時(shí)表的統(tǒng)計(jì)信息

臨時(shí)表默認(rèn)是不收集統(tǒng)計(jì)信息的,但是可以使用DBMS_STATS.GATHER_SCHEMA_STATS在SCHEMA級(jí)別收集,需要設(shè)置GATHER_TEMP為TRUE(默認(rèn)為FALSE);也可以和普通表一樣使用GATHER_TABLE_STATS在表級(jí)別來收集。需要注意的是,只能收集會(huì)話臨時(shí)表的統(tǒng)計(jì)信息,不能收集事務(wù)臨時(shí)表的統(tǒng)計(jì)信息。會(huì)話臨時(shí)表的統(tǒng)計(jì)信息是被所有的會(huì)話所共享的,所以,在一般情況下,不建議收集臨時(shí)表的統(tǒng)計(jì)信息,否則可能會(huì)導(dǎo)致很嚴(yán)重的數(shù)據(jù)庫性能問題。臨時(shí)表的統(tǒng)計(jì)信息在生成執(zhí)行計(jì)劃時(shí)一般是被動(dòng)態(tài)采樣的。

4.

OGG00446Couldnotfindarchivedlogforsequence錯(cuò)誤的處理辦法正確答案:如果面試官問到維護(hù)OGG曾經(jīng)碰到的一次故障處理過程,那么就可以拿這個(gè)錯(cuò)誤作為案例來說明。OGG-00446主要是歸檔文件丟失引起,處理辦法就是將缺失的歸檔日志找回來。如果找不到所需歸檔日志,那么可以按照如下2種辦法來處理:

第一種辦法是改變抽取進(jìn)程的時(shí)間,但這可能會(huì)導(dǎo)致數(shù)據(jù)不一致,執(zhí)行方法如下:

第二種辦法:重新初始化,重新初始化過程如下:

源庫查詢到當(dāng)前的SCN:

基于SCN導(dǎo)出所需要的數(shù)據(jù):

目標(biāo)庫導(dǎo)入所需要的數(shù)據(jù):

目標(biāo)庫重新開啟應(yīng)用進(jìn)程:

5.

什么是直方圖(Histogram)?正確答案:直方圖是CBO中的一個(gè)重點(diǎn),也是一個(gè)難點(diǎn)部分,在面試中常常被問到。

(1)直方圖的意義

在Oracle數(shù)據(jù)庫中,CBO會(huì)默認(rèn)認(rèn)為目標(biāo)列的數(shù)據(jù)在其最小值(LOW_VALUE)和最大值(HIGH_VALUE)之間是均勻分布的,并且會(huì)按照這個(gè)均勻分布原則來計(jì)算對(duì)目標(biāo)列施加WHERE查詢條件后的可選擇率以及結(jié)果集的Cardinality,進(jìn)而據(jù)此來計(jì)算成本值并選擇執(zhí)行計(jì)劃,但目標(biāo)列的數(shù)據(jù)是均勻分布這個(gè)原則并不總是正確的,一些目標(biāo)列的數(shù)據(jù)分布是不均勻的,極度傾斜的。對(duì)這樣的列如果還按照均勻分布的原則去計(jì)算可選擇率與Cardinality,并據(jù)此來計(jì)算成本、選擇執(zhí)行計(jì)劃,那么CBO所選擇的執(zhí)行計(jì)劃就可能是不合理的,甚至是錯(cuò)誤的,所以此時(shí)應(yīng)該收集列的直方圖。

直方圖是一種列的特殊的統(tǒng)計(jì)信息,主要用來描述列上的數(shù)據(jù)分布情況。當(dāng)數(shù)據(jù)分布傾斜時(shí),直方圖可以有效地提升Cardinality評(píng)估的準(zhǔn)確度。構(gòu)造直方圖最主要的原因就是幫助優(yōu)化器在表中數(shù)據(jù)嚴(yán)重偏斜時(shí)做出更好的規(guī)劃。如果對(duì)目標(biāo)列收集了直方圖,那么意味著CBO將不再認(rèn)為該目標(biāo)列上的數(shù)據(jù)是均勻分布的了,CBO就會(huì)用該目標(biāo)列上的直方圖統(tǒng)計(jì)信息來計(jì)算對(duì)該列施加查詢條件后的可選擇率和返回結(jié)果集的Cardinality,進(jìn)而據(jù)此計(jì)算成本并選擇相應(yīng)的執(zhí)行計(jì)劃。

直方圖實(shí)際上存儲(chǔ)在數(shù)據(jù)字典基表SYS.HISTGRM$中,可以通過數(shù)據(jù)字典DBA_TAB_HISTOGRAMS、DBA_PART_HISTOGRAMS和DBA_SUBPART_HISTOGRAMS來分別查看表、分區(qū)表的分區(qū)和分區(qū)表的子分區(qū)的直方圖統(tǒng)計(jì)信息。

(2)直方圖的使用場合

通常情況下在以下場合中建議使用直方圖:

1)當(dāng)WHERE子句引用了列值分布存在明顯偏差的列時(shí)。需要注意的是,若查詢不引用該列,則在該列上創(chuàng)建直方圖沒有意義。

2)當(dāng)列值導(dǎo)致不正確的判斷時(shí),這種情況通常會(huì)發(fā)生在多表連接時(shí)。如優(yōu)化器對(duì)中間結(jié)果集的大小做出不正確的判斷,則它可能會(huì)選擇一種未達(dá)到最優(yōu)化的表連接方法。因此向該列添加直方圖經(jīng)常會(huì)向優(yōu)化器提供使用最佳連接方法所需的信息。

(3)直方圖的分類

Oracle數(shù)據(jù)庫里的直方圖使用了一種稱為Bucket(桶)的方式來描述目標(biāo)列的數(shù)據(jù)分布。Bucket(桶)是一個(gè)邏輯上的概念,相當(dāng)于分組,每個(gè)Bucket就是一組,每個(gè)Bucket里會(huì)存儲(chǔ)一個(gè)或多個(gè)目標(biāo)列中的數(shù)據(jù)。Oracle會(huì)用兩個(gè)維度來描述一個(gè)Bucket,這兩個(gè)維度分別是ENDPOINT_NUMBER和ENDPOINT_VALUE,Oracle會(huì)將每個(gè)Bucket的這兩個(gè)維度記錄在數(shù)據(jù)字典基表SYS.HISTGRM$中。列的直方圖的類型可以通過查詢視圖DBA_TAB_COL_STATISTICS的HISTOGRAM列來獲取,一般情況下包含3類,NONE(沒有直方圖)、FREQUENCY(頻率直方圖,也稱為等頻直方圖)、HEIGHTBALANCED(高度平衡直方圖,也稱為等高直方圖)。在Oracle12c中,又新增了兩種類型的直方圖,分別是頂級(jí)頻率直方圖(TopFrequencyHistogram)和混合直方圖(HybridHistogram),本書只討論頻率和高度平衡直方圖。

1)頻率(Frequency,F(xiàn)req)直方圖。如果存儲(chǔ)在數(shù)據(jù)字典里描述目標(biāo)列直方圖的Bucket的數(shù)量等于目標(biāo)列的DISTINCT值的數(shù)量,那么這種類型的直方圖就是頻率(Frequency)直方圖。頻率直方圖只適用于那些目標(biāo)列的DISTINCT值數(shù)量小于或等于254的情形。需要注意的是,在Oracle12c中頻率直方圖所對(duì)應(yīng)的Bucket的數(shù)量可以超過254。

對(duì)于頻率直方圖而言,目標(biāo)列有多少個(gè)DISTINCT值,數(shù)據(jù)字典基表SYS.HISTGRM$中就會(huì)存儲(chǔ)多少條記錄,每一條記錄就代表了對(duì)其中的一個(gè)Bucket的描述。在DBA_TAB_HISTOGRAMS視圖中,字段ENDPOINT_VALUE記錄了DISTINCT值,而字段ENDPOINT_NUMBER則記錄了到此DISTINCT值為止總共有多少條記錄。需要注意的是,對(duì)頻率直方圖而言,ENDPOINT_NUMBER是一個(gè)累加值,可以用一條記錄的ENDPOINT_NUMBER值減去它上一條記錄的ENDPOINT_NUMBER值來得到這條記錄本身所對(duì)應(yīng)的ENDPOINT_VALUE值的記錄數(shù),SQL如下:

2)高度平衡(HeightBalanced,HtBal)直方圖。如果存儲(chǔ)在數(shù)據(jù)字典里描述目標(biāo)列直方圖的Bucket的數(shù)量小于目標(biāo)列的DISTINCT值的數(shù)量,那么這種類型的直方圖就是高度平衡(HeightBalanced)直方圖。在高度平衡直方圖中,執(zhí)行計(jì)劃的列的選擇性沒有頻率直方圖精確,而在現(xiàn)實(shí)很多時(shí)候,列的唯一值是超過254的,那么只能使用高度平衡直方圖。在高度平衡直方圖中,在DBA_TAB_HISTOGRAMS視圖中,EDNPOINT_NUMBER代表桶號(hào),且自動(dòng)省去EDNPOINT_VALUE值相同且ENDPOINT_NUMBER相鄰的桶的值。ENDPOINT_VALUE表示每一個(gè)桶中的最大值,而第一個(gè)桶記錄的是最小值(Bucket為0的行,即EDNPOINT_NUMBER為0的行)。重復(fù)出現(xiàn)為ENDPOINT_VALUE的值稱為PopularValue。若PopularValue所在記錄的ENDPOINT_NUMBER值和它上一條記錄的ENDPOINT_NUMBER值之間的差值越大,則意味著該P(yáng)opularValue在目標(biāo)表中所占的比例也就越大,它所對(duì)應(yīng)的Cardinality也就越大。在高度平衡直方圖中,除了最后1個(gè)桶可能包含的數(shù)據(jù)比其他的桶少以外,所有其他的桶包含相同數(shù)量的值,其值為目標(biāo)表總記錄數(shù)除以Bucket的數(shù)量。

3)頻率和高度平衡直方圖的比對(duì),見表。

(4)收集直方圖信息默認(rèn)情況下,數(shù)據(jù)庫會(huì)為列收集基本統(tǒng)汁信息,但不會(huì)收集直方圖信息。Oracle通過指定DBMS_STATS的METHOD_OPT參數(shù)來創(chuàng)建直方圖。METHOD_OPT參數(shù)可以有如下的輸入值:

其中的size_clause必須符合如下的格式:

含義如下所示:

I)SKEWONLY:只對(duì)數(shù)據(jù)分布不均衡的列收集直方圖統(tǒng)計(jì)信息。

2)REPEAT:只對(duì)已經(jīng)有直方圖統(tǒng)計(jì)信息的列收集直方圖統(tǒng)計(jì)信息。

3)AUTO:讓Oracle自行決定是否對(duì)目標(biāo)列收集直方圖統(tǒng)計(jì)信息,以及使用哪種類型的直方圖。

4)integer:直方圖的Bucket的數(shù)量,必須是在1~254的范圍內(nèi),1表示刪除該目標(biāo)列上的直方圖統(tǒng)計(jì)信息。

METHOD_OPT參數(shù)的默認(rèn)值為“FORALLCOLUMNSSIZEAUTO”,“FORALLCOLUMNSSIZE1”表示刪除所有列直方圖統(tǒng)計(jì)信息。下面是一些常用的收集方法:

1)對(duì)T表上所有有索引的列以自動(dòng)收集的方式收集直方圖:FORALLINDEXEDCOLUMNSSIZEAUTO。

2)對(duì)T表上的列A和列B以自動(dòng)收集的方式收集直方圖:FORCOLUMNSSIZEAUTOAB。

3)對(duì)T表上的列A和列B收集直方圖統(tǒng)計(jì)信息,同時(shí)指定BUCKET數(shù)量均為10:FORCOLUMNSSIZE10AB。

4)對(duì)T表上的列A和列B收集直方圖統(tǒng)計(jì)信息,同時(shí)指定列A的BUCKET數(shù)量為10,列B的BUCKET數(shù)量為5:FORCOLUMNSASIZE10BSIZE5。

5)只刪除表T上列A的直方圖統(tǒng)計(jì)信息:FORCOLUMNSASIZE1。

6)刪除表T上所有列的直方圖統(tǒng)計(jì)信息:FORALLCOLUMNSSIZE1。

如果需要?jiǎng)h除某個(gè)列SAL的直方圖信息,在Oracle10g中可以通過設(shè)置“METHOD_OPT=>'FORCOLUMNSSALSIZE1'”,但這卻得再次收集表的統(tǒng)計(jì)信息,十分不合理,所以,在Oracle11g中,有如下方法可以直接刪除直方圖信息:

其中,COL_STAT_TYPE默認(rèn)為ALL,表示刪除列的基本統(tǒng)計(jì)信息和直方圖信息。

(5)關(guān)于直方圖的一些注意事項(xiàng)

1)對(duì)于超過32個(gè)字符的字符型列,超出的那一部分無法在直方圖中體現(xiàn),這種先天性的缺陷會(huì)直接影響CBO對(duì)相關(guān)文本型字段的可選擇率及返回結(jié)果集的Cardinality的評(píng)估。

2)數(shù)字和日期在直方圖上被精確表示。

3)如果目標(biāo)列的數(shù)據(jù)是均勻分布的(例如,主鍵列、唯一索引列),那么就不需要對(duì)這些列收集直方圖統(tǒng)計(jì)信息。

4)對(duì)于那些從來沒有在WHERE條件中出現(xiàn)過的列,無論其數(shù)據(jù)分布是否均勻,都無須對(duì)這些列收集直方圖統(tǒng)計(jì)信息。

5)如果某個(gè)列從未在WHERE條件中出現(xiàn)過,則SYS.COL_USAGE$中就不會(huì)有這個(gè)列的使用記錄,那么Oracle在以默認(rèn)方式自動(dòng)收集統(tǒng)計(jì)信息時(shí)就不會(huì)收集這個(gè)列的直方圖統(tǒng)計(jì)信息。

6.

聚簇因子(ClusteringFactor)是什么?正確答案:Oracle數(shù)據(jù)庫中最普通、最為常用的即為堆表,堆表的數(shù)據(jù)存儲(chǔ)方式為無序存儲(chǔ),當(dāng)對(duì)數(shù)據(jù)進(jìn)行檢索的時(shí)候,非常消耗資源,這個(gè)時(shí)候就可以為表創(chuàng)建索引了。在索引中,數(shù)據(jù)是按照一定的順序排列起來的。當(dāng)新建或重建索引時(shí),索引列上的順序是有序的,而表上的順序是無序的,這樣就存在了差異,即表現(xiàn)為聚簇因子(ClusteringFactor,簡稱CF),也稱為群集因子或集群因子等,本書統(tǒng)一稱為聚簇因子。聚簇因子值的大小對(duì)CBO判斷是否選擇相關(guān)的索引起著至關(guān)重要的作用。

在Oracle數(shù)據(jù)庫中,聚簇因子是指按照索引鍵值排序的索引行和存儲(chǔ)于對(duì)應(yīng)表中數(shù)據(jù)行的存儲(chǔ)順序的相似程度,也就是說,表中數(shù)據(jù)的存儲(chǔ)順序和某些索引字段順序的符合程度。CF是基于表上索引列上的一個(gè)值,每一個(gè)索引都有一個(gè)CF值。

Oracle按照索引塊所存儲(chǔ)的ROwID來標(biāo)識(shí)相鄰索引記錄在表塊中是否為相同塊。具體來說,計(jì)算CF的算法如下:

1)聚簇因子的初始值為1。

2)Oracle首先定位到目標(biāo)索引處于最左邊的葉子塊。

3)從最左邊的葉子塊的第一個(gè)索引鍵值所在的索引行開始順序掃描,在順序掃描的過程中,Oracle會(huì)比對(duì)當(dāng)前索引行的ROWID和它之前的那個(gè)索引行(它們是相鄰的關(guān)系)的ROWID,如果這兩個(gè)ROWID并不是指向同一個(gè)表塊,那么Oracle就將聚簇因子的當(dāng)前值遞增1;如果這兩個(gè)ROWID是指向同一個(gè)表塊,那么Oracle就不改變聚簇因子的當(dāng)前值。注意,這里Oracle在比對(duì)ROWID的時(shí)候并不需要回表去訪問相應(yīng)的表塊。

4)上述比對(duì)ROWID的過程會(huì)一直持續(xù)下去,直到順序掃描完目標(biāo)索引所有葉子塊里的所有索引行。

5)上述順序掃描操作完成后,聚簇因子的當(dāng)前值就是索引統(tǒng)計(jì)信息中的CLUSTERING_FACTOR,Oracle會(huì)將其存儲(chǔ)在數(shù)據(jù)字典里。

好的CF值接近于表上的塊數(shù),而差的CF值則接近于表上的行數(shù)。CF值越小,相似度越高,CF值越大,相似度越低。如果CF的值接近塊數(shù),那么說明表的存儲(chǔ)和索引存儲(chǔ)排序接近,也就是說表中的記錄很有序,這樣在做INDEXRANGESCAN的時(shí)候,讀取少量的數(shù)據(jù)塊就能得到想要的數(shù)據(jù),代價(jià)比較小。如果CF值接近表記錄數(shù),那么說明表的存儲(chǔ)和索引排序差異很大,在做INDEXRANGESCAN的時(shí)候,由于表記錄分散,所以會(huì)額外讀取多個(gè)塊,代價(jià)較高。

CF值可以通過查詢視圖DBA_INDEXES中的CLUSTERJNG_FACTOR列來獲取。通過視圖DBA_INDEXES、DBA_OBJECTS和DBA_TABLES關(guān)聯(lián)可以得到索引的相關(guān)信息,包括當(dāng)前索引的大小、行數(shù)、創(chuàng)建日期、索引高度和聚簇因子等信息。

由于聚簇因子高的索引走索引范圍掃描時(shí)比相同條件下聚簇因子低的索引要耗費(fèi)更多的物理I/O,所以聚簇因子高的索引走索引范圍掃描的成本會(huì)比相同條件下聚簇因子低的索引走索引范圍掃描的成本高。Oracle選擇索引范圍掃描的成本可以近似看作是和聚簇因子成正比,因此,聚簇因子值的大小實(shí)際上對(duì)CBO判斷是否走相關(guān)的索引起著至關(guān)重要的作用。其實(shí),聚簇因子決定著索引回表讀的開銷。在Oracle數(shù)據(jù)庫中,能夠降低目標(biāo)索引的聚簇因子的唯一方法就是對(duì)表中數(shù)據(jù)按照目標(biāo)索引的索引鍵值排序后重新存儲(chǔ)。需要注意的是,這種方法可能會(huì)同時(shí)增加該表上存在的其他索引的聚簇因子的值。

可以通過如下的命令顯式的設(shè)置聚簇因子的值:

7.

Oraele有哪些預(yù)定義角色?正確答案:在表中列出的角色是在創(chuàng)建數(shù)據(jù)庫過程中執(zhí)行某部分標(biāo)準(zhǔn)腳本時(shí)自動(dòng)為Oracle數(shù)據(jù)庫定義的。可以對(duì)這些預(yù)定義角色授予和撤銷權(quán)限和角色,授權(quán)方法和對(duì)自定義的角色的授權(quán)操作相同。

如果想查詢角色所擁有的權(quán)限,那么可以通過視圖DBA_SYS_PRIVS來查詢。如下例,查詢的是RESOURCE角色擁有的權(quán)限:

8.

RAC的腦裂和健忘分別指的是什么?正確答案:(1)腦裂(SplitBrain)在集群中,節(jié)點(diǎn)間通過心跳來了解彼此的健康狀態(tài),以確保各節(jié)點(diǎn)協(xié)調(diào)工作。假設(shè)當(dāng)“心跳”出現(xiàn)問題,但各個(gè)節(jié)點(diǎn)還在正常運(yùn)行,這時(shí),每個(gè)節(jié)點(diǎn)都認(rèn)為其他的節(jié)點(diǎn)宕機(jī)了,自己才是整個(gè)集群環(huán)境中的“唯一健在者”,自己應(yīng)該獲得整個(gè)集群的“控制權(quán)”。在集群環(huán)境中,存儲(chǔ)設(shè)備都是共享的,這就意味著數(shù)據(jù)災(zāi)難。簡單點(diǎn)說,就是如果由于私有網(wǎng)絡(luò)硬件或軟件的故障,導(dǎo)致集群節(jié)點(diǎn)間的私有網(wǎng)絡(luò)在一定時(shí)間內(nèi)無法進(jìn)行正常的通信,這種現(xiàn)象稱為腦裂。在發(fā)生腦裂情況后,集群的某些節(jié)點(diǎn)間的網(wǎng)絡(luò)心跳丟失,但磁盤心跳依然正常,集群根據(jù)投票算法(QuorumAlgorithm)將不正確的節(jié)點(diǎn)踢出集群。磁盤心跳的主要目的是當(dāng)集群發(fā)生腦裂時(shí)可以幫助指定腦裂的解決方案。

私網(wǎng)網(wǎng)絡(luò)不能正常通信有一個(gè)超時(shí)時(shí)間,稱為MC(Misscount),默認(rèn)為30s(通過命令“crsctlgetcssmisscount”查詢)。該時(shí)間允計(jì)集群節(jié)點(diǎn)問不能正常通信的最大時(shí)間為30s,如果超過30s,那么Oracle認(rèn)為節(jié)點(diǎn)間發(fā)生了腦裂。在出現(xiàn)腦裂后,集群的重要任務(wù)就是保證錯(cuò)誤節(jié)點(diǎn)與正確節(jié)點(diǎn)間的I/O是隔離的,這樣才能避免對(duì)數(shù)據(jù)造成不一致的損壞。處理這個(gè)問題的方法就是:踢出錯(cuò)誤節(jié)點(diǎn)執(zhí)行修復(fù)過程。

(2)健忘(Amnesia)集群環(huán)境的配置文件不是集中存放的,而是每個(gè)節(jié)點(diǎn)都有一個(gè)本地副本,在集群正常運(yùn)行時(shí),用戶可以在任何節(jié)點(diǎn)更改集群的配置,并且這種更改會(huì)自動(dòng)同步到其他節(jié)點(diǎn)。健忘是由于某個(gè)節(jié)點(diǎn)更新了OCR(OracleClusterRegistry,Oracle集群注冊(cè))中的內(nèi)容,而集群中的另外一些節(jié)點(diǎn)此時(shí)處于關(guān)閉、維護(hù)或重啟階段,OCRMaster進(jìn)程來不及將其信息更新到這些異常節(jié)點(diǎn)緩存而導(dǎo)致的狀態(tài)不一致。譬如,A節(jié)點(diǎn)發(fā)出了添加OCR鏡像的命令,在這個(gè)時(shí)候B節(jié)點(diǎn)處于重啟階段。重啟后A已經(jīng)更新完畢,而此時(shí)B并不知道已經(jīng)為OCR增加了一個(gè)新的鏡像磁盤,健忘由此而生。OCR用于解決健忘問題。

說明:

OracleClusterware把整個(gè)集群的配置信息放在共享存儲(chǔ)上,這個(gè)存儲(chǔ)就是OCRDisk。在整個(gè)集群中,只有一個(gè)節(jié)點(diǎn)能對(duì)OCRDisk進(jìn)行讀寫操作,這個(gè)節(jié)點(diǎn)稱為MasterNode。所有節(jié)點(diǎn)都會(huì)在內(nèi)存中保留一份OCR的復(fù)制,同時(shí)有一個(gè)OCRProcess從這個(gè)內(nèi)存中讀取內(nèi)容。當(dāng)OCR內(nèi)容發(fā)生改變時(shí),由MasterNode的OCRProcess負(fù)責(zé)同步到其他節(jié)點(diǎn)的OCRProcess。

9.

Redo日志文件(RedoLogFiles)的作用是什么?正確答案:Redo日志文件包含所有的數(shù)據(jù)庫變化歷史記錄,例如所有的DML變化(INSERT、UPDATE、DELETE和SELECTFORUPDATE)和所有DDL語句造成的數(shù)據(jù)字典對(duì)象的更改及遞歸語句的更改等,所以,日志文件可以最大限度地保證數(shù)據(jù)的一致性與安全性。當(dāng)發(fā)生提交動(dòng)作時(shí),后臺(tái)進(jìn)程LGWR將Redo日志緩沖區(qū)中的數(shù)據(jù)刷到Redo日志文件里。

需要注意的是,部分SELECT操作也會(huì)產(chǎn)生少量的Redo日志,例如,會(huì)話A對(duì)表T執(zhí)行DML操作而沒有提交,然后會(huì)話B對(duì)表T執(zhí)行查詢操作,那么此時(shí)會(huì)話B的SELECT語句就會(huì)生成Redo日志,并且會(huì)話B的SELECT查詢語句的性能也會(huì)受到影響。SELECT操作產(chǎn)生Redo日志的情況主要包括延遲塊清除(DelayedBlockCleanout)以及一些遞歸調(diào)用。

Redo日志文件主要包含聯(lián)機(jī)Redo日志文件(OnlineRedoLogFiles)和歸檔Redo日志文件(ArchiveRedoLogFiles)。聯(lián)機(jī)Redo日志文件也稱為聯(lián)機(jī)Redo日志文件,包含對(duì)數(shù)據(jù)庫所做的更改記錄。萬一數(shù)據(jù)庫出現(xiàn)故障可以啟用數(shù)據(jù)恢復(fù)。一個(gè)數(shù)據(jù)庫至少需要兩個(gè)Redo日志組,一個(gè)Redo日志組至少包含一個(gè)文件。歸檔Redo日志文件是聯(lián)機(jī)Redo日志文件的脫機(jī)副本,是介質(zhì)恢復(fù)所必要的文件。

Redo日志的數(shù)據(jù)是按照THREAD來組織的,對(duì)于單實(shí)例系統(tǒng)來說,只有一個(gè)THREAD;對(duì)于RAC系統(tǒng)來說,會(huì)存在多個(gè)THREAD。每個(gè)數(shù)據(jù)庫實(shí)例擁有一組獨(dú)立的Redo日志文件,擁有獨(dú)立的LogBuffer,某個(gè)實(shí)例的變化會(huì)被獨(dú)立地記錄到一個(gè)THREAD的Redo日志文件中。

Redo日志文件一般用于數(shù)據(jù)庫恢復(fù)(在實(shí)例恢復(fù)中利用Redo做前滾;在介質(zhì)恢復(fù)中利用歸檔日志做RECOVER恢復(fù)操作實(shí)現(xiàn)完全或不完全恢復(fù))、LogMiner、DG、OGG等。

10.

數(shù)據(jù)泵中NETWORK_LINK選項(xiàng)的作用是什么?正確答案:數(shù)據(jù)泵expdp生成的文件默認(rèn)是存放在服務(wù)端的,而exp生成的文件是存放在客戶端的。使用數(shù)據(jù)泵的NETWORK_LINK參數(shù),可以在本地的數(shù)據(jù)庫中創(chuàng)建一個(gè)指向遠(yuǎn)程數(shù)據(jù)庫的DBLINK,在執(zhí)行導(dǎo)出expdp時(shí),指定NETWORK_LINK參數(shù)為DBLINK名稱,就可以直接將遠(yuǎn)程數(shù)據(jù)庫的數(shù)據(jù)導(dǎo)出到本地?cái)?shù)據(jù)庫里創(chuàng)建的DIRECTORY下。在執(zhí)行導(dǎo)入命令impdp的時(shí)候也可以使用NETWORK_LNK參數(shù)。如果不想在源端或目標(biāo)端生成dmp文件而直接將需要的數(shù)據(jù)導(dǎo)入目標(biāo)端數(shù)據(jù)庫,那么可以直接使用impdp帶NETWORK_LINK參數(shù),這樣可以直接執(zhí)行impdp從而繞過了expdp的步驟。

11.

RAC和DG的區(qū)別有哪些?正確答案:RAC和DG是高可用體系中的常用的兩種工具,每個(gè)工具既可以獨(dú)立應(yīng)用,也可以相互配合使用。但是它們各自的側(cè)重點(diǎn)不同,適用場景也不同。

RAC的強(qiáng)項(xiàng)在于解決單點(diǎn)故障和負(fù)載均衡,所以,RAC方案常用于7*24的核心系統(tǒng),但RAC方案中的數(shù)據(jù)只有一份,盡管可以通過RAID等機(jī)制避免存儲(chǔ)故障,但是數(shù)據(jù)本身是沒有冗余的,因此需要加強(qiáng)備份。

DG通過冗余數(shù)據(jù)的方式來提供數(shù)據(jù)保護(hù),通過日志同步機(jī)制保證冗余數(shù)據(jù)和主庫之間的同步,這種同步可以是實(shí)時(shí)、延時(shí)、同步或異步等多種形式。DG常用于異地容災(zāi)和小企業(yè)的高可用性方案,可以在備庫上執(zhí)行只讀地查詢操作,從而分散主庫的性能壓力。

Oracle高可用性產(chǎn)品比較見下表。Oracle高可用性產(chǎn)品比較

12.

在OGG環(huán)境中如何使用OS命令?正確答案:可以使用sh命令臨時(shí)執(zhí)行OS命令,如下:

13.

解釋GLOBAL_NAMES設(shè)為TRUE的用途。正確答案:GLOBAL_NAMES指明連接數(shù)據(jù)庫的方式。如果這個(gè)參數(shù)設(shè)置為TRUE,那么在建立數(shù)據(jù)庫鏈接時(shí)就必須用相同的名字連接遠(yuǎn)程數(shù)據(jù)庫。

14.

為什么使用數(shù)據(jù)庫?正確答案:對(duì)于這個(gè)面試題,可以舉例回答??慈缦碌睦樱?/p>

(1)京東網(wǎng)、淘寶網(wǎng)、天涯網(wǎng)、騰訊網(wǎng)等都有各自的功能,那么當(dāng)關(guān)閉系統(tǒng)后,用戶下次再訪問這些網(wǎng)站時(shí),為什么他/她們各自的信息還存在呢?

(2)基于C/S架構(gòu)的軟件,例如,網(wǎng)游的游戲積分和裝備、QQ的聊天記錄、三大運(yùn)營商的電話號(hào)碼,它們又是怎樣保存數(shù)據(jù)的呢?

解決之道無非有兩種方式:①文件、②數(shù)據(jù)庫。雖然說文件可以保存數(shù)據(jù),可是如果使用文件保存數(shù)據(jù),那么存在以下幾個(gè)缺點(diǎn):①文件的安全性問題,一般的文件格式容易被黑客截取并獲取到其中的內(nèi)容。②文件不利于查詢和對(duì)數(shù)據(jù)的管理。③文件不利于存放海量數(shù)據(jù)。④文件在程序中控制不方便。

那么,為了解決上述問題,專家們?cè)O(shè)計(jì)出了一種更加有利于管理數(shù)據(jù)的方法——數(shù)據(jù)庫(本質(zhì)就是一個(gè)軟件),它能更有效地管理數(shù)據(jù),現(xiàn)如今對(duì)數(shù)據(jù)庫的理解程度也是衡量一個(gè)程序員水平高低的重要指標(biāo)。

15.

物化視圖(MaterializedViews)的作用是什么?正確答案:物化視圖(MaterializedViews)是包括一個(gè)查詢結(jié)果的數(shù)據(jù)庫對(duì)象,用于減少那些匯總、集合和分組的信息的集合數(shù)量。它們通常適合于數(shù)據(jù)倉庫和DSS系統(tǒng)(DecisionSupportSystem,決策支持系統(tǒng))。物化視圖在以前的Oracle版本中稱為快照。物化視圖可以查詢表,視圖和其他的物化視圖。物化視圖有如下的一些特點(diǎn):

1)視圖并不真正地包含數(shù)據(jù),但是物化視圖則真正地包含數(shù)據(jù)。

2)物化視圖等于是對(duì)其基表的一種預(yù)處理。

3)物化視圖中的數(shù)據(jù)可以隨基表的變化而變化。

4)物化視圖可以加快某些查詢操作的速度,但它減慢了DML的速度。

與物化視圖有關(guān)的2個(gè)數(shù)據(jù)字典視圖分別為。DBA_MVIEWS和DBA_MVIEW_REFRESH_TIMES,可以查詢物化視圖上一次的刷新時(shí)間。有關(guān)物化視圖的內(nèi)容很多,這里就不詳細(xì)介紹了,更多具體內(nèi)容可以參考官方文檔。

16.

數(shù)據(jù)文件OFFLINE之后必須要做的一件事是什么?正確答案:數(shù)據(jù)文件OFFLNE之后必須要做的一件事就是立刻執(zhí)行一次RECOVER操作,這樣在無論過了多久之后,在ONLINE該數(shù)據(jù)文件的時(shí)候就不需要執(zhí)行RECOVER操作了。

17.

在丟失歸檔的情況下如何進(jìn)行數(shù)據(jù)文件的恢復(fù)正確答案:如果一個(gè)表空問的數(shù)據(jù)文件損壞,在有備份的情況下,那么可以使用數(shù)據(jù)文件的備份進(jìn)行還原,但是還需要?dú)w檔文件進(jìn)行恢復(fù),才能使數(shù)據(jù)文件到達(dá)一個(gè)最新的一致性狀態(tài),從而才能打開數(shù)據(jù)庫。如果需要的歸檔文件無法提供,比如被刪除了,那么在這種情況下如何打開數(shù)據(jù)庫呢?

在這種情況下由于缺少歸檔,數(shù)據(jù)庫無法恢復(fù),但是如果與該表空問相關(guān)的數(shù)據(jù)改變很少或者基本沒有改變的情況下可以通過改變數(shù)據(jù)文件頭的SCN號(hào),讓其和SystemCheckpointSCN和DatafileCheckpointSCN號(hào)一致,就可以讓Oracle避開對(duì)該文件的檢查,Oracle就不會(huì)去做介質(zhì)恢復(fù),而只做實(shí)例恢復(fù),這樣就可以實(shí)現(xiàn)完全恢復(fù),及時(shí)打開數(shù)據(jù)庫。

一般來說,推進(jìn)數(shù)據(jù)文件頭的SCN號(hào)有兩種處理辦法:第一,利用BBED(BlockBrowerandEditor)修改數(shù)據(jù)文件頭,推進(jìn)SCN號(hào)來打開數(shù)據(jù)庫。第二,設(shè)置隱含參數(shù)“_ALLOW_RESETLOGS_CORRUPTION”為TRUE來打開數(shù)據(jù)庫,該參數(shù)默認(rèn)為FALSE,待數(shù)據(jù)庫打開后,要將該參數(shù)從參數(shù)文件中去掉,命令如下:

18.

什么是GPnP?正確答案:網(wǎng)格即插即用(GridPlugandPlay,GPnP)是Oracle11gR2RAC提供的新組件,該組件的功能由gpnpd.bin守護(hù)進(jìn)程實(shí)現(xiàn)。GPnP可以提供一個(gè)動(dòng)態(tài)的GI環(huán)境,能隨著負(fù)載的增加而動(dòng)態(tài)改變GI環(huán)境。GPnP能非常容易地添加、替換或者移除集群中的節(jié)點(diǎn),就像電源插頭一樣即插即用。

GPnP主要由GPNPD、mDNS、SCAN和GNS組成。mDNS(MulticastDomainNameService)負(fù)責(zé)在節(jié)點(diǎn)內(nèi)部進(jìn)行IP的解析,在添加節(jié)點(diǎn)的時(shí)候不需要手動(dòng)修改每個(gè)節(jié)點(diǎn)的/etc/hosts文件。GPNPD服務(wù)提供的是集群配置信息管理,新的節(jié)點(diǎn)添加進(jìn)來會(huì)根據(jù)現(xiàn)有的GPnPprofile配置信息來配置新的節(jié)點(diǎn),同時(shí)更新所有節(jié)點(diǎn)的GPnPprofile文件。一旦新添加的節(jié)點(diǎn)加入到集群,SCAN機(jī)制動(dòng)態(tài)地將連接分配給該節(jié)點(diǎn),所有的客戶端都不需要進(jìn)行任何配置的變更,就能實(shí)現(xiàn)節(jié)點(diǎn)的負(fù)載均衡。GNS(GridNamingService)能動(dòng)態(tài)地為新添加的節(jié)點(diǎn)分配VIP地址,利用DHCP管理公共網(wǎng)絡(luò)中的IP地址。這些服務(wù)共同構(gòu)成了“網(wǎng)格

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論