Oracle資料庫筆試題(附答案)

csbwolf10發表於2009-10-21
 
2008年04月25日 星期五 19:48

1. 資料庫切換日誌的時候,為什麼一定要發生檢查點?這個檢查點有什麼意義?
答:觸發dbwr的執行,dbwr會把和這個日誌相關的所有髒佇列寫到資料檔案裡,縮短例項恢復所需要的時間。

2. 表空間管理方式有哪幾種,各有什麼優劣。
答:字典管理方式和本地管理方式,本地管理方式採用點陣圖管理extent,減少字典之間的競爭,同時避免了碎片。

本地管理表空間與字典管理表空間相比,其優點如下:
1).減少了遞迴空間管理;
2).系統自動管理extents大小或採用統一extents大小;
3).減少了資料字典之間的競爭;
4).不產生回退資訊;
5).不需合併相鄰的剩餘空間;
6).減少了空間碎片;
7).對臨時表空間提供了更好的管理。

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

4. 一個表a varchar2(1),b number(1),c char(2),有100000條記錄,建立B-Tree索引在欄位a上,那麼表與索引誰大?為什麼?
答:這個要考慮到rowid所佔的位元組數,假設char總是佔用2位元組的情況,比較rowid,另外,table和index在segment free block的管理也有差別。

5. Oracle9i的data guard有幾種模式,各有什麼差別。
答:三種模式:
最大效能(maximize performance):這是data guard預設的保護模式。primay上的事務commit前不需要從standby上收到反饋資訊。該模式在primary故障時可能丟失資料,但standby對primary的效能影響最小。
最大可用(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 loop與hash join的差別。
答:nest loop適用於返回結果比較小的情況。
for in 1...n loop
對小表進行遍歷
根據小表的結果遍歷大表(大表需要索引)
end loop
hash join適用在返回大結果集的情況。

8. db file sequential read與db 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 pin與library cache lock是什麼地方的等待事件,一般說明什麼問題?
答:"LIBRARY CACHE PIN"通常是發生在編譯或重新編譯PL/SQL,VIEW,TYPES等object時.

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_wait和v$system_event資料字典,找出當前比較嚴重的等待事件,並試圖優化影響效能的SQL語句。

12. 說明一下對raid5與raid01/10的認識。
答:raid5採用校驗資訊,硬碟的利用率n-1/n, 以RAID5(4D+P)為例子來講,使用4塊磁碟存放資料位,使用1塊磁碟存放校驗位。其基本原理是這樣的:根據條帶化的資料4D(使用四位資料)生成一位的校驗資訊,存放在第五塊磁碟中。
raid10先採用先映象在進行條帶化,是最高效的硬碟利用方式,硬碟的利用率50%,是一個Raid 0與Raid1的組合體,它是利用奇偶校驗實現條帶集映象,所以它繼承了Raid0的快速和Raid1的安全。

13. 列舉5個10g的新特性.
答:
1).自動共享記憶體(SGA)管理
2).自動儲存管理(ASM)
3).ADDM和查詢優化器
4).閃回表(flashback table)
5).Data Pump(expdp、impdp)

14。char與varchar的區別

char是固定長度的字串;varchar是可變長度的字串

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

相關文章