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

下載本文檔

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

文檔簡介

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

OracleJOB的分類是什么?正確答案:Oracle的JOB分為兩類,DBMS_JOB和DBMS_SCHEDULER,二者都可以完成定時任務(wù)。(1(江南博哥))DBMS_JOBDBMS_JOB的SUBMIT過程參數(shù)如下:

其中,各個參數(shù)的說明如下:

1)參數(shù)JOB是由SUBMIT()過程返回的BINARY_INEGER。這個值用來唯一標(biāo)識一個工作,此參數(shù)是個變量,在使用前需要被聲明,JOB號在DBA_JOBS視圖里可以查到。

2)WHAT參數(shù)的值是將被JOB執(zhí)行的PL/SQL代碼塊,一般是存儲過程的名字,記得存儲過程后面一定要加上分號。

3)NEXT_DATE參數(shù)指示何時運(yùn)行這個JOB,NEXT_DATE需要修改為數(shù)據(jù)庫第一次執(zhí)行該JOB的時間,SYSDATE表示立即執(zhí)行。

4)INTERVAL參數(shù)表示這個JOB什么時候?qū)⒈辉俅螆?zhí)行,指定JOB的運(yùn)行周期,INTERVAL為空表示只執(zhí)行一次。

5)NO_PARSE參數(shù)表示此JOB在提交或執(zhí)行時是否應(yīng)進(jìn)行語法分析,TRUE代表此PL/SQL代碼在它第一次執(zhí)行時應(yīng)進(jìn)行語法分析,而FALSE代表本PL/SQL代碼應(yīng)立即進(jìn)行語法分析,在創(chuàng)建JOB時進(jìn)行檢查。默認(rèn)值為FALSE。

需要注意的是,NEXT_DATE是時間類型,INTERVAL是字符類型,在調(diào)用SUBMIT時要指定正確的參數(shù)類型。

(2)DBMS_SCHEDULER

DBMS_SCHEDULER是Oracle10g中新增的一個包,與老版本的DBMS_JOB包相比,DBMS_SCHEDULER有很多新特性。例如,DBMS_SCHEDULER可以執(zhí)行存儲過程、匿名塊以及OS可執(zhí)行文件和腳本(包括Linux系統(tǒng)的SHELL腳本),還可以使用DBMS_SCHEDULER更詳細(xì)地定義JOB的各類屬性。DBMS_SCHEDULER具有更詳細(xì)的作業(yè)運(yùn)行狀態(tài)以及故障處理和報(bào)告功能。

從Oracle10g開始,Oracle建議使用SCHEDULER替換普通的JOB來管理任務(wù)的執(zhí)行。

下面的例子展示了如何創(chuàng)建一個DBMS_SCHEDULER類型的JOB:

2.

Oracle之INTERVAL分區(qū)的STOREIN屬性存儲在哪張表中?正確答案:存儲在SYS.INSERT_TSN_LIST$中??梢酝ㄟ^10046事件對SQL語句“altertableTB_NAMEsetstorein(TS1,TS2,TS3);”進(jìn)行跟蹤即可找到該表。所以,其查詢SQL如下:

3.

什么是套接字文件?正確答案:套接字文件(SocketFile)在RAC環(huán)境中承擔(dān)著許多集群進(jìn)程之間的通信任務(wù),這些進(jìn)程可以來自于集群的不同節(jié)點(diǎn)。這些套接字文件一般保存在tmp路徑下,不同的操作系統(tǒng)其路徑也會不同。Linux環(huán)境的套接字文件在/var/tmp/.oracle文件夾下,在其他平臺,可能的目錄有:/tmp/.oracle/*,/tmp/.oracle或者/usr/tmp/.oracle。若刪除這些套接字文件或修改這些套接字文件的權(quán)限,則可能引起各種各樣的問題,而且這些套接字文件不能手動修復(fù),只能通過重啟集群的方式來生成全新的套接字文件,即集群每次在啟動的時候都會重新生成新的套接字文件。以下是套接字文件的列表:

4.

oraInventory目錄的作用是什么?正確答案:由于Oracle支持將多個Oracle軟件(或者多版本的數(shù)據(jù)庫軟件)安裝到同一臺服務(wù)器上,這就需要一個位置統(tǒng)一記錄安裝的軟件信息。中央目錄(CentralInventory)實(shí)際上就是一臺主機(jī)上安裝的Oracle產(chǎn)品清單。在這個清單里記錄了每一個Oracle軟件主目錄的名稱和位置、安裝的組件,以及一些其他的信息。OUI在安裝產(chǎn)品時會讀取中央目錄來確認(rèn)已經(jīng)安裝過的產(chǎn)品信息,確保新安裝的產(chǎn)品不會和已存在的產(chǎn)品沖突,而且不會覆蓋掉原有的產(chǎn)品。另外,Oracle的集群和數(shù)據(jù)庫軟件在進(jìn)行升級時,OUI也是通過讀取中央目錄中的信息來確認(rèn)哪些軟件應(yīng)被安裝的。中央目錄(CentralInventory)所有的Oracle軟件安裝都依賴于該目錄,所以,要確保該目錄已經(jīng)備份,刪除或丟失oraInventory目錄的內(nèi)容,都有可能導(dǎo)致安裝或升級報(bào)錯。另外,Oracle的軟件產(chǎn)品通常比較復(fù)雜,包含很多組件,所以還需要一個更加細(xì)致的清單來記錄每一個oracle_home下所安裝的產(chǎn)品組件。而本地目錄(LocalInventory)就是這樣一個清單,它記錄了每個產(chǎn)品所安裝的組件,以及每個組件上應(yīng)用過的補(bǔ)工程序信息。

oraInventory目錄的位置是由oraInst.loc文件決定的:

1)AIX和Linux平臺:/etc/oraInst.loc。

2)Solaris和HP-UX平臺:/var/opt/oracle/Oralnst.loc。

3)Windows平臺:HKEY_LOCAL_MACHINE/Software/Oracle/inst.loc。

默認(rèn)情況下它保存在$ORACLE_BASE上一層路徑的oraInventory路徑下,例如:

一旦中央目錄文件出現(xiàn)了損壞,請嘗試使用以下的兩種方式恢復(fù)該文件:

方式1:如果其他節(jié)點(diǎn)的inventory.xml沒有損壞,可以將其復(fù)制到本地節(jié)點(diǎn)以覆蓋原有文件。

方式2:使用$GRID_HOME/oui/bin/runInstaller工具重建inventory.xml文件。例如:

步驟1:添加GI_HOME:

步驟2:添加RDBMS_HOME:

作者就曾遇到過一次與該目錄有關(guān)的異常:在RAC環(huán)境中,無論使用DBCA圖形界面還是采用靜默方式來創(chuàng)建數(shù)據(jù)庫,最終創(chuàng)建的數(shù)據(jù)庫都是單實(shí)例數(shù)據(jù)庫,不能成功創(chuàng)建所需要的RAC庫,最后查到的原因竟然是/u01/app/oraInventory/ContentsXML/inventory.xml文件中缺少了DB的部分。

這里順便介紹一下LocalInventory的作用。LocalInventory用于保存某一個ORACLE_HOME下所安裝的組件清單,它位于$ORACLE_HOME/inventory下。由于LocalInventory針對特定的軟件主目錄,所以并不存在inventory.xml文件。文件$ORACLE_HOME/inventory/ContentsXML/comps.xml記錄了對應(yīng)主目錄下安裝的所有組件。通常情況下,由于每一個Oracle產(chǎn)品都包含了很多組件,所以comps.xml文件的結(jié)構(gòu)也很復(fù)雜。

5.

什么是待定的統(tǒng)計(jì)信息(PendingStatistic)?正確答案:在數(shù)據(jù)庫系統(tǒng)運(yùn)維中,DBA常常希望維持SQL執(zhí)行計(jì)劃的穩(wěn)定。很多DBA和開發(fā)人員對于Hint的依賴,很大程度上也是源于在CBO情況下,執(zhí)行計(jì)劃對于統(tǒng)計(jì)量過于依賴,容易形成不穩(wěn)定執(zhí)行計(jì)劃。所以,SQL語句執(zhí)行計(jì)劃的穩(wěn)定性,就變成統(tǒng)計(jì)信息的穩(wěn)定性問題。更進(jìn)一步,就是新的統(tǒng)計(jì)信息更新,無論是手動收集還是自動收集,能否促進(jìn)SQL語句生成更高效的執(zhí)行計(jì)劃。所以,一種思路是:在新的統(tǒng)計(jì)信息收集生成時,暫時不要生效投入執(zhí)行計(jì)劃生成。等待最后確認(rèn)統(tǒng)計(jì)信息正確之后,再投入生產(chǎn)環(huán)境。

在Oracle11g中,推出了統(tǒng)計(jì)信息管理的一種新技術(shù)——待定的統(tǒng)計(jì)信息(PendingStatistic)技術(shù)。簡單地說,DBA可以對一系列的數(shù)據(jù)表設(shè)置PENDING屬性。設(shè)置PENDING屬性之后,數(shù)據(jù)的統(tǒng)計(jì)信息在數(shù)據(jù)字典中相當(dāng)于已經(jīng)鎖定。當(dāng)新的統(tǒng)計(jì)信息生成之后,不是直接替換原有的數(shù)據(jù),而是存放在PENDING數(shù)據(jù)字典中。在PENDrNG字典中的統(tǒng)計(jì)信息在默認(rèn)情況下是不會參與SQL執(zhí)行計(jì)劃的生成的。只有在進(jìn)行SQL測試通過的時候,經(jīng)過用戶手工的確定,才會將其PUBLISH出來,替換原有的統(tǒng)計(jì)信息。這樣,就給運(yùn)維DBA提供了一種維持執(zhí)行計(jì)劃穩(wěn)定的思路。通過固定統(tǒng)計(jì)信息,將新統(tǒng)計(jì)信息以PENDING的方式將原有的統(tǒng)計(jì)信息固定,從而穩(wěn)定執(zhí)行計(jì)劃。

可以使用如下的SQL語句查詢統(tǒng)計(jì)信息在全局、SCHEMA和表級別是否自動發(fā)布(默認(rèn)情況下都是自動發(fā)布):

以上SQL語句的查詢結(jié)果返回TRUE或FALSE。TRUE表明收集統(tǒng)計(jì)信息完成后自動發(fā)布,而FALSE表明收集統(tǒng)計(jì)信息完成后將待定??梢允褂孟旅娴陌鼇砀淖兏鱾€級別的默認(rèn)PUBLISH選項(xiàng):

1)全局:EXECDBMS_STATS.SET_GLOBAL_PREFS(PNAME=>'PUBLISH',PVALUE=>'FALSE');。

2)SCHEMA:EXECDBMS_STATS.SET_SCHEMA_PREFS(OWNNAME->USER,PNAME=>'PUBLISH',PVALUE=>'TRUE');。

3)表:EXECDBMS_STATS.SET_TABLE_PREFS(USER,'T_LHR','PUBLISH','FALSE');。

缺省情況下,優(yōu)化器使用數(shù)據(jù)字典視圖中已發(fā)布的統(tǒng)計(jì)信息。如果希望優(yōu)化器使用新收集的待定統(tǒng)計(jì)信息,那么可以設(shè)置初始化參數(shù)OPTIMIZER_USE_PENDING_STATISTICS的值為TRUE(缺省值為FALSE)。可以使用下面的SQL語句為一個特定的數(shù)據(jù)對象發(fā)布待定統(tǒng)計(jì)信息:

如果不想發(fā)布待定的統(tǒng)計(jì)信息,那么可以執(zhí)行下面的語句刪除這些待定的統(tǒng)計(jì)信息:

可以通過視圖DBA_TAB_STATISTICS和DBA_IND_STATISTICS查詢發(fā)布的統(tǒng)計(jì)信息,通過視圖DBA_TAB_PENDlNG_STATS和DBA_IND_PENDING_STATS查詢待定的統(tǒng)計(jì)信息??梢允褂么鎯^程DBMS_STATS.EXPORT_PENDING_STATS導(dǎo)出待定的統(tǒng)計(jì)信息。如果已經(jīng)發(fā)布了統(tǒng)計(jì)信息,想要恢復(fù)以前的統(tǒng)計(jì)信息,那么可以根據(jù)DBA_TAB_STATS_HISTORY中的STATS_UPDATE_TIME來確定TIMESTAMP,執(zhí)行下面的操作,最后一個參數(shù)AS_OF_TIMESTAMP指的是恢復(fù)在這個時間點(diǎn)生效的統(tǒng)計(jì)信息,所以可以多1s:

6.

說說COUNT(*)計(jì)算行數(shù)有哪些優(yōu)化手段?正確答案:可以通過創(chuàng)建索引、主鍵索引、常數(shù)索引、常數(shù)壓縮索引、位圖索引、位圖索引+并行、物化視圖、結(jié)果集緩存等技術(shù)來優(yōu)化,也可以根據(jù)業(yè)務(wù)規(guī)則來分析需求,是否只統(tǒng)計(jì)一條數(shù)據(jù)即可,或者根本用不到統(tǒng)計(jì)數(shù)據(jù)。其中,位圖索引可以按很高密度存儲數(shù)據(jù),因此往往比B樹索引小很多,前提是在基數(shù)比較小(列重復(fù)度比較高)的情況下。位圖索引是保存空值的,因此可以在COUNT中利用。位圖索引不太適合OLTP類型數(shù)據(jù)庫。物化視圖是應(yīng)用在數(shù)據(jù)要求不怎么及時的場景下。若表頻繁更新,則不適合緩存結(jié)果集。優(yōu)化沒有止境,對數(shù)據(jù)庫了解越多,能想到的方法就越多。

7.

如何正確地刪除表空間數(shù)據(jù)文件?正確答案:(1)DROPDATAFILE可以使用如下的命令刪除一個表空間里的數(shù)據(jù)文件:

關(guān)于該命令需要注意以下幾點(diǎn):

1)該語句會刪除磁盤上的文件并更新控制文件和數(shù)據(jù)字典中的信息,刪除之后的原數(shù)據(jù)文件序列號可以重用。

2)該語句只能是在相關(guān)數(shù)據(jù)文件ONLINE的時候才可以使用。如果說對應(yīng)的數(shù)據(jù)文件已經(jīng)是OFFLNE,那么僅針對字典管理表空間(Dictionary-ManagedTablespace,DMT)可用,而對于本地管理表空間(LocallyManagedTablespace,LMT)不能使用,否則會報(bào)錯“ORA-03264:cannotdropofflinedatafileoflocallymanagedtablespace”。如果數(shù)據(jù)文件是RECOVER狀態(tài),那么該命令依然不能使用。

3)不能刪除一個表空間中第一個添加的數(shù)據(jù)文件,否則會報(bào)錯,形如“ORA-03263:cannotdropthefirstfileoftablespaceTS_DD_LHR”。

4)若一個表空間只包含1個數(shù)據(jù)文件,則不能刪除該數(shù)據(jù)文件,否則會報(bào)錯,形如“ORA-03261:thetablespaceTS_DD_LHRhasonlyonefile”。

5)必須為空,否則會報(bào):ORA-03262:thefileisnon-empty。值得注意的是,non-empty的含義是有EXTENT被分配給了TABLE,而不是該TABLE中有無ROWS,此時若是使用“DROPTABLEXXX;”是不行的,必須使用“DROPTABLEXXXPURGE;”或者在已經(jīng)使用了“DROPTABLEXXX;”的情況下,再使用“PURGETABLE”XXX表在回收站中的名稱";”來刪除回收站中的該表,否則空間還是不釋放,數(shù)據(jù)文件仍然不能DROP。

6)不能刪除SYSTEM表空間的數(shù)據(jù)文件,否則報(bào)錯“ORA-01541:systemtablespacecannotbebroughtoffline;shutdownifnecessary”。

需要注意的是,據(jù)官方文檔介紹說,處于READONLY狀態(tài)的表空間數(shù)據(jù)文件也不能刪除,但經(jīng)過實(shí)驗(yàn)證明,其實(shí)是可以刪除的。

(2)OFFLINE和OFFLINEDROP的區(qū)別

與刪除數(shù)據(jù)文件相似的還有如下的命令(其中的“'FILE_NAMEf'”也可以用文件號替代):

需要注意的是,該命令不會刪除數(shù)據(jù)文件,只是將數(shù)據(jù)文件的狀態(tài)更改為RECOVER。OFFLINEFORDROP命令相當(dāng)于把一個數(shù)據(jù)文件置于離線狀態(tài),并且需要恢復(fù),并非刪除數(shù)據(jù)文件。數(shù)據(jù)文件的相關(guān)信息還會存在數(shù)據(jù)字典和控制文件中。

對于歸檔模式而言,“OFFLINEFORDROP”和“OFFLINE”沒有什么區(qū)別,因?yàn)镺racle會忽略FORDROP選項(xiàng)。因?yàn)镺FFLINE之后還需要進(jìn)行RECOVER才可以O(shè)NLINE。

對于非歸檔模式而言,只能執(zhí)行“OFFLINEFORDROP”。若不加FORDROP選項(xiàng),則會報(bào)錯“ORA-01145:offlineimmediatedisallowedunlessmediarecoveryenabled”。因?yàn)榉菤w檔模式?jīng)]有歸檔文件來進(jìn)行RECOVER操作。如果OFFLINE之后,速度足夠快,聯(lián)機(jī)Redo日志文件里的數(shù)據(jù)還沒有被覆蓋掉,那么在這種情況下,還是可以進(jìn)行RECOVER操作的。

(3)OS級別刪除了數(shù)據(jù)文件后的恢復(fù)

若使用了“ALTERDATABASEDATAFILENOFFLINEDROP;”命令,則并不會刪除數(shù)據(jù)文件,這個時候可以先ONLINE后再用“ALTERTABLESPACEXXXDROPDATAFILEN;”刪除。如果執(zhí)行“ALTERDATABASEDATAFILENOFFLINEDROP;”后并在OS級別刪除了數(shù)據(jù)文件,那么首先需要使用“ALTERDATABASECREATEDATAFILENAS'/tmp/ts_dd_thr02.dbf';”來添加一個數(shù)據(jù)文件,然后再執(zhí)行RECOVER并ONLINE后再用“ALTERTABLESPACEXXXDROPDATAFILEN;”命令刪除。如果產(chǎn)生的日志文件丟失,那么目標(biāo)文件就不能再恢復(fù)了,這個時候只能刪除表空間了,命令為:“DROPTABLESPACEXXXIFNCLUDINGCONTENTSANDDATAFILES;”。

8.

當(dāng)收集表的統(tǒng)計(jì)信息時應(yīng)該注意哪些問題?正確答案:關(guān)于收集統(tǒng)計(jì)信息需要注意以下幾點(diǎn):

1)對于數(shù)據(jù)量不大的OLTP類型的系統(tǒng),建議使用自動收集統(tǒng)計(jì)信息,并對一些特殊的大表寫JOB定時收集統(tǒng)計(jì)信息。如果是數(shù)據(jù)量很大的OLAP或者DSS系統(tǒng),那么建議DBA自己寫JOB腳本來收集統(tǒng)計(jì)信息。

2)在導(dǎo)入大量數(shù)據(jù)后應(yīng)及時收集統(tǒng)計(jì)信息后才能進(jìn)行相關(guān)的后續(xù)業(yè)務(wù)處理(包括查詢和修改),否則可能會由于實(shí)際數(shù)據(jù)量和統(tǒng)計(jì)信息里記錄的數(shù)據(jù)量存在巨大差異而導(dǎo)致CBO選擇錯誤的執(zhí)行計(jì)劃。

3)全局臨時表默認(rèn)不能收集統(tǒng)計(jì)信息,在生成執(zhí)行計(jì)劃時采用動態(tài)采樣比較好。

4)對于某些新上線或新遷移的系統(tǒng),建議進(jìn)行全庫收集一次統(tǒng)計(jì)信息。

5)建議及時對包含日期型字段的表收集統(tǒng)計(jì)信息,避免出現(xiàn)謂詞越界現(xiàn)象。

6)統(tǒng)計(jì)信息收集作業(yè)采樣比例:對于Oracle11g及其以上的版本收集統(tǒng)計(jì)信息的采樣比例建議采用。DBMS_STATS.AUTO_SAMPLESIZE。如果是Oracle10g,那么建議將采樣比例的初始值設(shè)為30%,然后根據(jù)目標(biāo)SQL的實(shí)際執(zhí)行情況再做調(diào)整。

7)系統(tǒng)統(tǒng)計(jì)信息:如果系統(tǒng)的硬件環(huán)境發(fā)生了變化,那么建議要額外收集一次系統(tǒng)統(tǒng)計(jì)信息。

8)內(nèi)部對象統(tǒng)計(jì)信息:在明確診斷出系統(tǒng)已有的性能問題是因?yàn)閄$表的內(nèi)部對象統(tǒng)計(jì)信息不準(zhǔn)引起的,這個時候就應(yīng)該收集X$表的內(nèi)部對象統(tǒng)計(jì)信息,其他情形就不要收集了。

9)表的大小、是否并行:若表很大,而系統(tǒng)空閑,則可以使用并行來收集統(tǒng)計(jì)信息。

10)表是否分區(qū):若是分區(qū)表則建議收集全局的統(tǒng)計(jì)信息并且收集數(shù)據(jù)量有變更的單個分區(qū)(加GRANULARITY和參數(shù)并設(shè)置屬性INCREMENTAL)的統(tǒng)計(jì)信息。

11)是否收集索引的統(tǒng)計(jì)信息:一般情況下都應(yīng)該收集索引的統(tǒng)計(jì)信息。

12)是否收集直方圖。對直方圖統(tǒng)計(jì)信息的收集策略是對已經(jīng)存在直方圖統(tǒng)計(jì)信息的列才收集直方圖統(tǒng)計(jì)信息,而目標(biāo)列的初次直方圖統(tǒng)計(jì)信息則是由了解系統(tǒng)的DBA手工來收集直方圖。設(shè)置METHOD_OPT的值為“FORALLCOLUMNSSIZEREPEAT”。

13)是否可以并發(fā)收集統(tǒng)計(jì)信息:若系統(tǒng)有很多小表,則可以考慮并發(fā)收集統(tǒng)計(jì)信息。

14)系統(tǒng)的負(fù)載情況:在手動收集統(tǒng)計(jì)信息的時候需要注意系統(tǒng)的負(fù)載情況。

15)預(yù)估多久可以收集完成:對OLAP系統(tǒng)的大表而言,根據(jù)平時收集統(tǒng)計(jì)信息的經(jīng)驗(yàn)要預(yù)估出收集統(tǒng)計(jì)信息要花費(fèi)多長的時間。

16)基于數(shù)據(jù)庫、SCHEMA或是表級別:根據(jù)情況判斷是否有必要在數(shù)據(jù)庫或SCHEMA級別來收集統(tǒng)計(jì)信息。

17)是否需要收集擴(kuò)展列的統(tǒng)計(jì)信息。如果表中的數(shù)據(jù)傾斜度較大,那么收集直方圖能最大程度地幫助優(yōu)化器計(jì)算出準(zhǔn)確的Cardinality,從而避免產(chǎn)生差的執(zhí)行計(jì)劃;再進(jìn)一步,如果存在傾斜的多個列共同構(gòu)成了Predicate里的等值連接且這些列間存在較強(qiáng)的列相關(guān)性的話,那么生成帶有直方圖的多列統(tǒng)計(jì)信息是一個上佳的選擇,能夠最大程度地幫助優(yōu)化器準(zhǔn)確預(yù)測出Cardinality。

18)是否設(shè)置NO_INVALIDATE為FALSE。該選項(xiàng)有TRUE、FALSE和DBMS_STATS.AUTO_INVALIDATE這3個值。如果取值為TRUE,那么表示收集統(tǒng)計(jì)信息后不進(jìn)行游標(biāo)失效動作,原有的SharedCursor保持原有狀態(tài)。如果取值為FALSE,那么表示將統(tǒng)計(jì)信息對象相關(guān)的所有Cursor全部失效。如果設(shè)置為AUTO_NVALIDATE,那么Oracle自己決定SharedCursor失效動作,當(dāng)SQL再次執(zhí)行時間距離上次收集統(tǒng)計(jì)信息的時間超過5h(隱含參數(shù)“_OPTIMIZER_INVALlDATION_PERIOD”決定)則對SQL重新做硬解析。AUTO_INVALIDATE為默認(rèn)選項(xiàng)。有些DBA在收集統(tǒng)計(jì)信息時,沒有使用NO_INVALIDATE=>FALSE選項(xiàng),所以,即使收集了統(tǒng)計(jì)信息,執(zhí)行計(jì)劃也不會立即改變。

19)對于OLTP類型的數(shù)據(jù)庫,需要特別關(guān)注DML比較頻繁的以及數(shù)據(jù)加載比較大的表及分區(qū)表。

20)檢查是否有臨近統(tǒng)計(jì)信息收集窗口的數(shù)據(jù)加載工作,如果有,是否能在數(shù)據(jù)庫統(tǒng)計(jì)信息的窗口時間完成,如果不能在窗口時間完成,那么應(yīng)該針對這段時間加載的數(shù)據(jù),特別是大量的數(shù)據(jù),在相關(guān)加載腳本完成之后,加入統(tǒng)計(jì)信息的收集。

21)如果加載數(shù)據(jù)量比較大,并且是分區(qū)表,每個分區(qū)的業(yè)務(wù)數(shù)據(jù)呈現(xiàn)的是均勻的,在Oracle11g可以考慮采用DBMS_STATS.COPY_TABLE_STATS先把統(tǒng)計(jì)信息做個快速的設(shè)置,然后,再收集該分區(qū)的統(tǒng)計(jì)信息。

其實(shí),上述幾點(diǎn)是沒有一個普適性的標(biāo)準(zhǔn)答案的,因?yàn)椴煌南到y(tǒng)其數(shù)據(jù)量、數(shù)據(jù)分布情況都不盡相同,甚至可能會有很大的區(qū)別,所以適合于某套系統(tǒng)的統(tǒng)計(jì)信息收集策略并不一定能適用于另外一套系統(tǒng)。收集統(tǒng)計(jì)信息總的原則就是量體裁衣,即要找到適合自己系統(tǒng)的統(tǒng)計(jì)信息收集策略,用盡量小的代價(jià)收集到能穩(wěn)定跑出正確執(zhí)行計(jì)劃的統(tǒng)計(jì)信息即可,也就是說收集到的統(tǒng)計(jì)信息不一定要特別準(zhǔn),只要具備代表性,能穩(wěn)定跑出正確的執(zhí)行計(jì)劃就可以了。

9.

Oracle的SCN是什么?正確答案:SCN(SystemChangeNumber,系統(tǒng)改變號)是一個由系統(tǒng)內(nèi)部維護(hù)的序列號,SCN在數(shù)據(jù)庫全局是唯一的。當(dāng)系統(tǒng)需要更新的時候自動增加,它是系統(tǒng)中維持?jǐn)?shù)據(jù)的一致性和順序恢復(fù)的重要標(biāo)志,是數(shù)據(jù)庫中非常重要的一種數(shù)據(jù)結(jié)構(gòu)。在數(shù)據(jù)庫中,SCN作為一種時鐘機(jī)制來標(biāo)記數(shù)據(jù)庫動作,比如,當(dāng)事務(wù)發(fā)生時,數(shù)據(jù)庫會用一個SCN來標(biāo)記它。

在數(shù)據(jù)庫中,SCN可以說是無處不在,例如數(shù)據(jù)文件頭、控制文件、數(shù)據(jù)塊頭、日志文件等都標(biāo)記著SCN。也正因?yàn)槿绱?,?shù)據(jù)庫的一致性維護(hù)和SCN密切相關(guān)。不管是數(shù)據(jù)的備份還是恢復(fù)都離不開SCN。由于SCN描述的是數(shù)據(jù)一致性的狀態(tài),所以,它會在各種涉及數(shù)據(jù)一致性的場合中起到重要作用。

(1)SCN的分類不管什么時候,SCN所指代的都是數(shù)據(jù)庫的某個一致性的狀態(tài)。SCN按照其代表的意義不同可以分為4類,系統(tǒng)檢查點(diǎn)SCN(SystemCheckpointSCN)、文件檢查點(diǎn)SCN(DatafileCheckpointSCN)、開始SCN(StartSCN)和結(jié)束SCN(StopSCN),參考下表。

SCN的分類

(2)如何查看系統(tǒng)當(dāng)前SCNOracle數(shù)據(jù)庫提供了兩種直接查看系統(tǒng)當(dāng)前SCN的方法,一個是通過查詢V$DATABASE中的CURRENT_SCN列,另外一個就是通過DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER得到,如下:

一般情況下,SCN1列和SCN2列的結(jié)果一致,但在系統(tǒng)比較繁忙的時候,可能SCN2比SCN1稍微大一點(diǎn)。

(3)SCN與時間的相互轉(zhuǎn)換一個SCN值總是發(fā)生在某一個特定的時刻,只不過由于粒度的不一樣,通常會存在多個SCN對應(yīng)同一個時間戳的情況。Oracle10g提供了兩個新函數(shù)用于SCN和時間戳進(jìn)行相互轉(zhuǎn)換,這兩個函數(shù)分別是SCN_TO_TIMESTAMP和TIMESTAMP_TO_SCN,通過對SCN和時間戳進(jìn)行轉(zhuǎn)換,極大地方便了Oracle的很多備份和恢復(fù)過程:

1)SCN_TO_TIMESTAMP(scnnumber):將SCN轉(zhuǎn)換成時間戳。

2)TIMESTAMP_TO_SCN(timestamp):將時間戳轉(zhuǎn)換成SCN。

通過以上這兩個函數(shù),最終Oracle將SCN和時間的關(guān)系建立起來,在Oracle10g之前,是沒有辦法通過函數(shù)轉(zhuǎn)換得到SCN和時間的對應(yīng)關(guān)系的,一般可以通過LogMiner分析日志獲得。但是這兩種函數(shù)轉(zhuǎn)換要依賴于數(shù)據(jù)庫內(nèi)部表SMON_SCN_TIME,對于久遠(yuǎn)的SCN則不能轉(zhuǎn)換。

10.

試述數(shù)據(jù)、數(shù)據(jù)庫、數(shù)據(jù)庫系統(tǒng)、數(shù)據(jù)庫管理系統(tǒng)的概念。正確答案:(1)數(shù)據(jù)(Data):描述事物的符號記錄稱為數(shù)據(jù)。數(shù)據(jù)的種類有數(shù)字、文字、圖形、圖像、聲音等。數(shù)據(jù)與其語義是不可分的。在現(xiàn)代計(jì)算機(jī)系統(tǒng)中數(shù)據(jù)的概念是廣義的。早期的計(jì)算機(jī)系統(tǒng)主要用于科學(xué)計(jì)算,處理的數(shù)據(jù)是整數(shù)、實(shí)數(shù)、浮點(diǎn)數(shù)等傳統(tǒng)數(shù)學(xué)中的數(shù)據(jù)?,F(xiàn)代計(jì)算機(jī)能存儲和處理的對象十分廣泛,表示這些對象的數(shù)據(jù)也越來越復(fù)雜。數(shù)據(jù)與其語義是不可分的。例如,100這個數(shù)字可以表示一件物品的價(jià)格是100元,也可以表示一段路程是100公里,還可以表示一個人的體重為100斤。

(2)數(shù)據(jù)庫(DataBase,簡稱DB):數(shù)據(jù)庫是長期儲存在計(jì)算機(jī)內(nèi)的、有組織的、可共享的數(shù)據(jù)集合。數(shù)據(jù)庫中的數(shù)據(jù)按一定的數(shù)據(jù)模型組織、描述和儲存,具有較小的冗余度、較高的數(shù)據(jù)獨(dú)立性和易擴(kuò)展性,并可為各種用戶共享。

(3)數(shù)據(jù)庫系統(tǒng)(DataBaseSystem,簡稱DBS):數(shù)據(jù)庫系統(tǒng)是指在計(jì)算機(jī)系統(tǒng)中引入數(shù)據(jù)庫后的系統(tǒng)構(gòu)成。數(shù)據(jù)庫系統(tǒng)和數(shù)據(jù)庫是兩個概念。數(shù)據(jù)庫系統(tǒng)是一個系統(tǒng),數(shù)據(jù)庫是數(shù)據(jù)庫系統(tǒng)的一個組成部分。但是在日常工作中人們常常把數(shù)據(jù)庫系統(tǒng)簡稱為數(shù)據(jù)庫。

(4)數(shù)據(jù)庫管理系統(tǒng)(DataBaseManagementSystem,簡稱DBMS):數(shù)據(jù)庫管理系統(tǒng)是位于用戶與操作系統(tǒng)之間的一層數(shù)據(jù)管理軟件,用于科學(xué)地組織和存儲數(shù)據(jù)、高效地獲取和維護(hù)數(shù)據(jù)。DBMS是一個大型的復(fù)雜的軟件系統(tǒng),是計(jì)算機(jī)中的基礎(chǔ)軟件。DBMS的主要功能包括數(shù)據(jù)定義功能、數(shù)據(jù)操縱功能、數(shù)據(jù)庫的運(yùn)行管理功能、數(shù)據(jù)庫的建立和維護(hù)功能。目前,專門研制DBMS的廠商及其研制的DBMS產(chǎn)品很多。著名的有美國IBM公司的DB2關(guān)系數(shù)據(jù)庫管理系統(tǒng)和IMS層次數(shù)據(jù)庫管理系統(tǒng)、美國Oracle公司的Oracle關(guān)系數(shù)據(jù)庫管理系統(tǒng)、美國微軟公司的SQLServer等。

11.

如何批量刪除JOB?正確答案:可以采用SQL來生成刪除JOB的語句,首先執(zhí)行以下語句,可以根據(jù)情況對結(jié)果進(jìn)行過濾:

將以上SQL生成的結(jié)果復(fù)制到命令窗口就可以批量執(zhí)行了。

12.

Oracle常用日期處理函數(shù)有哪些?這些函數(shù)可以實(shí)現(xiàn)哪些功能?正確答案:有關(guān)日期函數(shù)需要了解以下幾點(diǎn):

1)日期函數(shù)用于處理DATE類型的數(shù)據(jù)。

2)在日期上加上或減去一個數(shù)字結(jié)果仍為日期。

3)兩個日期相減返回日期之間相差的天數(shù)。

4)默認(rèn)情況下,日期格式為DD-MON-RR。

5)查詢當(dāng)前數(shù)據(jù)庫日期格式的命令:SELECTSYSCONTEXT('USEKENV','NLS_DATE_FORMAT')FROMDUAL;。

6)SYSDATE:該函數(shù)返回系統(tǒng)時間。

7)LAST_DAY(D):返回指定日期所在月份的最后一天。

8)MONTHS_BETWEEN:表示兩個日期的月份之差,即在給定的兩個日期之間有多少個月。

9)ADD_MONTHS(D,N):該函數(shù)將給定的日期增加N個月。當(dāng)N為正數(shù)時,該函數(shù)將給定的日期增加N個月,為負(fù)數(shù)時減去N個月,該函數(shù)很常用,可以用來表示上個月、下個月,去年和下一年等。

10)NEXT_DAY(D,N):返回以時間點(diǎn)D為基準(zhǔn)(開始),下一個“目標(biāo)日N”的日期。

由于數(shù)據(jù)庫以數(shù)字方式存儲日期,因此,日期類型可以進(jìn)行算術(shù)運(yùn)算(加法或減法)。例如:可以給日期增加或減去一個數(shù)字,得到的結(jié)果還是一個日期值,兩個日期相減,得到兩個日期之間的天數(shù),用小時除以24就可以得到天數(shù)。

另外,日期中常用到的一個修改日期語言的SQL:

修改為英文:

修改為中文:

在英語的環(huán)境中,查詢星期時要用英文,示例代碼如下:

13.

執(zhí)行計(jì)劃里的access和filter有什么區(qū)別?正確答案:如下:

一般而言,access表示這個謂詞條件的值將會影響數(shù)據(jù)的訪問路徑(表還是索引);filter表示謂詞條件的值不會影響數(shù)據(jù)的訪問路勁,只起到過濾的作用。NOTIN或MIN函數(shù)等容易產(chǎn)生filter操作。

對于filter而言如果只有一個子節(jié)點(diǎn),那么就是簡單過濾操作(獨(dú)立操作)。如果有兩個或更多子節(jié)點(diǎn),那么就是類似NestedLoops操作,只不過與NestedLoops差別在于,filter內(nèi)部會構(gòu)建HASH表,對于重復(fù)匹配的,不會再次進(jìn)行循環(huán)查找,而是利用已有結(jié)果,提高效率。但是一旦重復(fù)匹配的較少,循環(huán)次數(shù)多,那么,filter操作將是嚴(yán)重影響性能的操作,可能會導(dǎo)致目標(biāo)SQL幾天都執(zhí)行不完。

14.

如何鎖住統(tǒng)計(jì)信息?正確答案:Oracle會自動收集表的統(tǒng)計(jì)信息,大部分情況下,這種行為是有利的。當(dāng)不需要對某個表做收集的時候,可以采用鎖定統(tǒng)計(jì)信息的方法,把不需要收集的表排除在外,這樣可以使得此表上的統(tǒng)計(jì)信息不變,如下:

如果在鎖定條件下收集統(tǒng)計(jì)信息,那么會報(bào)錯:“ORA-20005:objectstatisticsarelocked(stattype=ALL)”??梢允褂萌缦碌腟QL查詢到統(tǒng)計(jì)信息被鎖的表以及索引:

15.

如何預(yù)估即將創(chuàng)建索引的大小?正確答案:如果當(dāng)前表大小是1TB,那么在某一列上創(chuàng)建索引的話索引大概占用多大的空間?對于這個問題,Oracle提供了兩種可以預(yù)估將要創(chuàng)建的索引大小的辦法:

1)利用系統(tǒng)包DBMS_SPACE.CREATE_INDEX_COST直接得到。利用DBMS_SPACE.CREATE_TABLE_COST可以獲得將要創(chuàng)建的表的大小。

2)利用Oracle11g新特性NOTERAISEDWHENEXPLAINPLANFORCREATEINDEX。

16.

如何獲取trace文件的路徑?正確答案:跟蹤文件(TraceFile)一般位于“user_dump_dest”參數(shù)所指定的目錄中,具體路徑可以通過以下幾種方式查詢獲得。

(1)通過user_dump_dest查詢運(yùn)行如下SQL語句來創(chuàng)建視圖:

創(chuàng)建公共同義詞的命令如下:

查詢同義詞或視圖都可以得到當(dāng)前會話的trace文件名。

(2)Oracle11g可以通過查詢V$DIAG_INFO獲取

(3)oradebugtracefile_name獲取

(4)通過參數(shù)直接查詢

17.

什么是虛擬內(nèi)存?正確答案:虛擬內(nèi)存簡稱虛存,是計(jì)算機(jī)系統(tǒng)內(nèi)存管理的一種技術(shù)。它是相對于物理內(nèi)存而言的,可以理解為“假的”內(nèi)存。它使得應(yīng)用程序認(rèn)為它擁有連續(xù)可用的內(nèi)存(一個連續(xù)完整的地址空間),允許程序員編寫并運(yùn)行比實(shí)際系統(tǒng)擁有的內(nèi)存大得多的程序,這使得許多大型軟件項(xiàng)目能夠在具有有限內(nèi)存資源的系統(tǒng)上實(shí)現(xiàn)。而實(shí)際上,它通常被分割成多個物理內(nèi)存碎片,還有部分暫時存儲在外部磁盤存儲器上,在需要時進(jìn)行數(shù)據(jù)交換。虛存比實(shí)存有以下好處:

1)擴(kuò)大了地址空間。無論段式虛存,還是頁式虛存,或是段頁式虛存,尋址空間都比實(shí)存大。

2)內(nèi)存保護(hù)。每個進(jìn)程運(yùn)行在各自的虛

溫馨提示

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

評論

0/150

提交評論