Oracle基礎面試題

tolywang發表於2007-09-26

1. 資料庫切換日誌的時候,為什麼一定要發生檢查點?這個檢查點有什麼意義?

:觸發dbwr的執行,dbwr會把和這個日誌相關的所有髒佇列寫到資料檔案裡,縮短例項恢復所需要的時間。


2. 表空間管理方式有哪幾種,各有什麼優劣。

:字典管理方式和本地管理方式,本地管理方式採用點陣圖管理extent,減少字典之間的競爭,同時避免了碎片。

本地管理表空間與字典管理表空間相比,其優點如下:

1).減少了遞迴空間管理;

2).系統自動管理extents大小或採用統一extents大小;

3).減少了資料字典之間的競爭;

4).不產生回退資訊;

5).不需合併相鄰的剩餘空間;

6).減少了空間碎片;

7).對臨時表空間提供了更好的管理。

3. 本地索引與全域性索引的差別與適用情況。

:對於local索引,每一個表分割槽對應一個索引分割槽,當表的分割槽發生變化時,索引的維護由Oracle自動進行。對於global索引,可以選擇是否分割槽,而且索引的分割槽可以不與表分割槽相對應。當對分割槽進行維護操作時,通常會導致全域性索引的INVALDED,必須在執行完操作後REBUILDOracle9i提供了UPDATE GLOBAL INDEXES語句,可以使在進行分割槽維護的同時重建全域性索引。

4. 一個表a varchar2(1),b number(1),c char(2),有100000條記錄,建立B-Tree索引在欄位a上,那麼表與索引誰大?為什麼?

:這個要考慮到rowid所佔的位元組數,假設char總是佔用2位元組的情況,比較rowid,另外,tableindexsegment free block的管理也有差別。

5. Oracle9idata guard有幾種模式,各有什麼差別。

:三種模式:

最大效能(maximize performance):這是data guard預設的保護模式。primay上的事務commit前不需要從standby上收到反饋資訊。該模式在primary故障時可能丟失資料,但standbyprimary的效能影響最小。

最大可用(maximize availability):在正常情況下,最大可用模式和最大保護模式一樣;在standby不可用時,最大可用模式自動最大效能模式,所以standby故障不會導致primay不可用。只要至少有一個standby可用的情況下,即使primarydown機,也能保證不丟失資料。

最大保護(maximize protection):最高階別的保護模式。primay上的事務在commit前必須確認redo已經傳遞到至少一個standby上,如果所有standby不可用,則primary會掛起。該模式能保證零資料丟失。

6. 執行計劃是什麼,檢視執行計劃一般有哪幾種方式。

:執行計劃是資料庫內部的執行步驟:

set autotrace on

select * from table

alter session set event '10046 trace name context forever,level 12 ';

SYS.DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION=(SID,SERIAL#,TRUE);

一般採用pl/sql developer,再加個explain plan , v$sql_plan.

7. 簡單描述一下nest loophash join的差別。

:nest loop適用於返回結果比較小的情況。

for in 1...n loop

對小表進行遍歷

根據小表的結果遍歷大表(大表需要索引)

end loop

hash join適用在返回大結果集的情況。

8. db file sequential readdb file scattered read等待的差別,如果以上等待比較多,證明了什麼問題?

:db file sequential read-DB檔案順序讀取,這一事件通常顯示與單個資料塊相關的讀取操作(如索引讀取)。如果這個等待事件比較顯著,可能表示在多表連線中,表的連線順序存在問題,可能沒有正確的使用驅動表;或者可能說明不加選擇地進行索引。在大多數情況下我們說,透過索引可以更為快速的獲取記錄,所以對於一個編碼規範、調整良好的資料庫,這個等待很大是很正常的。但是在很多情況下,使用索引並不是最佳的選擇,比如讀取較大表中大量的資料,全表掃描可能會明顯快於索引掃描,所以在開發中我們就應該注意,對於這樣的查詢應該進行避免使用索引掃描。

db file sequential read-DB檔分散讀取,這種情況通常顯示與全表掃描相關的等待。當資料庫進行全表掃時,基於效能的考慮,資料會分散(scattered)讀入Buffer Cache。如果這個等待事件比較顯著,可能說明對於某些全表掃描的表,沒有建立索引或者沒有建立合適的索引,我們可能需要檢查這些資料表已確定是否進行了正確的設定。然而這個等待事件不一定意味著效能低下,在某些條件下Oracle 會主動使用全表掃描來替換索引掃描以提高效能,這和訪問的資料量有關,在CBO Oracle 會進行更為智慧的選擇,在RBO Oracle 更傾向於使用索引。當這個等待事件比較顯著時,可以結合v$session_longops 動態效能檢視來進行診斷,該檢視中記錄了長時間(執行時間超過6 秒的)執行的事物,可能很多是全表掃描操作(不管怎樣,這部分資訊都是值得我們注意的)

9. library cache pinlibrary cache lock是什麼地方的等待事件,一般說明什麼問題?

:"LIBRARY CACHE PIN"通常是發生在編譯或重新編譯PL/SQL,VIEW,TYPESobject.

10. 在一個24*7的應用上,需要把一個訪問量很大的1000萬以上資料級別的表的普通索引(a,b)修改成唯一約束(a,b,c),你一般會選擇怎麼做,請說出具體的操作步驟與語句。

:不能確定,是否可以採用先建索引後建約束:

create index idx_w1 on w_1 (a,b,c) online ;

alter table w_1 add constraint uni_w1 unique (a,b,c) novalidate;

11. 如果一個linux上的oracle資料庫系統突然變慢,你一般從哪裡去查詢原因。

:1).vmstat,iostat命令檢視系統的負載(I/O讀寫是否嚴重,CPU是否空閒).

2).top工具檢視有哪些程式CPU佔用率高;

3). 查詢v$session_waitv$system_event資料字典,找出當前比較嚴重的等待事件,並試圖最佳化影響效能的SQL語句。

12. 說明一下對raid5raid01/10的認識。

:raid5採用校驗資訊,硬碟的利用率n-1/n, RAID5(4D+P)為例子來講,使用4塊磁碟存放資料位,使用1塊磁碟存放校驗位。其基本原理是這樣的:根據條帶化的資料4D(使用四位資料)生成一位的校驗資訊,存放在第五塊磁碟中。

raid10先採用先映象在進行條帶化,是最高效的硬碟利用方式,硬碟的利用率50%,是一個Raid 0Raid1的組合體,它是利用奇偶校驗實現條帶集映象,所以它繼承了Raid0的快速和Raid1的安全。

13. 列舉510g的新特性.

:1).自動共享記憶體(SGA)管理

2).自動儲存管理(ASM)

3).ADDM和查詢最佳化器

4).閃回表(flashback table)

5).Data Pump(expdpimpdp)

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-84913/,如需轉載,請註明出處,否則將追究法律責任。

相關文章