oracle資料庫筆試題

才智咖 人氣:2.81W

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

oracle資料庫筆試題

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

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

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

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

4).不產生回退資訊;

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

6).減少了空間碎片;

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

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

4. 一個表 a varchar2(

1),b number(

1),c

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

5. Oracle9i 的 data guard 有幾種模式,各有什麼差別. 答:三種模式: 最大效能(maximize performance):這是 data guard 預設的保護模式ay 上的事務 commit 前不需要從 standby 上收到反饋資訊.該模式在 primary 故障時可能丟失資料,但 standby 對 primary 的效能影響最 小. 最大可用(maximize availability):在正常情況下,最大可用模式和最大保護模式一樣;在 standby 不可用時, 最大可用模式自動最大效能模式,所以 standby 故障不會導致 primay 不可用.只要至少有一個 standby 可

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

6. 執行計劃是什麼,檢視執行計劃一般有哪幾種方式. 答:執行計劃是資料庫內部的執行步驟: set autotrace on select * from table alter session set event 10046 trace name context forever,level 12 ; __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) 和查詢優化器

4).閃回表(flashback table)

5) Pump(expdp,impdp)

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