資料庫習題高階

weixin_42568854發表於2019-01-17

轉載自[https://www.cnblogs.com/luolizhi/p/5248230.html]
一、資料庫基礎

  1. 資料抽象:物理抽象、概念抽象、檢視級抽象,內模式、模式、外模式
  2. SQL語言包括資料定義、資料操縱(Data Manipulation),資料控制(Data Control)
    資料定義:Create Table,Alter Table,Drop Table, Craete/DropIndex等
    資料操縱:Select ,insert,update,delete,
    資料控制:grant,revoke,commit,rollback
  3. SQL常用命令:
    CREATE TABLE Student(
    ID NUMBER PRIMARY KEY,
    NAME VARCHAR2(50) NOT NULL);//建表

CREATE VIEW view_name AS
Select * FROM Table_name;//建檢視

Create UNIQUE INDEX index_name ON TableName(col_name);//建索引

INSERT INTO tablename {column1,column2,…}values(exp1,exp2,…);//插入
INSERT INTO Viewname {column1,column2,…} values(exp1,exp2,…);//插入檢視實際影響表
UPDATE tablename SET name=’zang 3’ condition;//更新資料
DELETE FROM Tablename WHERE condition;//刪除
GRANT (Select,delete,…) ON (物件) TO USER_NAME [WITHGRANT OPTION];//授權
REVOKE (許可權表) ON(物件) FROM USER_NAME[WITH REVOKE OPTION] //撤權
列出工作人員及其領導的名字:
Select E.NAME, S.NAME FROM EMPLOYEE E S
WHERE E.SUPERName=S.Name
4. 檢視:
5. 完整性約束:實體完整性、參照完整性、使用者定義完整性
6. 第三正規化:
1NF:每個屬性是不可分的。 2NF:若關係R是1NF,且每個非主屬性都完全函式依賴於R的鍵。例SLC(SID#, CourceID#, SNAME,Grade),則不是2NF;3NF:若R是2NF,且它的任何非鍵屬性都不傳遞依賴於任何候選鍵。
7. ER(實體/聯絡)模型
8. 索引作用
9. 事務:是一系列的資料庫操作,是資料庫應用的基本邏輯單位。事務性質:原子性、
l 原子性。即不可分割性,事務要麼全部被執行,要麼就全部不被執行。
l 一致性或可串性。事務的執行使得資料庫從一種正確狀態轉換成另一種正確狀態
l 隔離性。在事務正確提交之前,不允許把該事務對資料的任何改變提供給任何其他事務,
l 永續性。事務正確提交後,其結果將永久儲存在資料庫中,即使在事務提交後有了其他故障,事務的處理結果也會得到儲存。
10. 鎖:共享鎖、互斥鎖
兩段鎖協議:階段1:加鎖階段 階段2:解鎖階段
11. 死鎖及處理:事務迴圈等待資料鎖,則會死鎖。
死鎖處理:預防死鎖協議,死鎖恢復機制
12. 儲存過程:儲存過程就是編譯好了的一些sql語句。
1.儲存過程因為SQL語句已經預編繹過了,因此執行的速度比較快。
2. 可保證資料的安全性和完整性。通過儲存過程可以使沒有許可權的使用者在控制之下間接地存取資料庫,從而保證資料的安全。通過儲存過程可以使相關的動作在一起發生,從而可以維護資料庫的完整性。
3.可以降低網路的通訊量。儲存過程主要是在伺服器上執行,減少對客戶機的壓力。
4:儲存過程可以接受引數、輸出引數、返回單個或多個結果集以及返回值。可以向程式返回錯誤原因
5:儲存過程可以包含程式流、邏輯以及對資料庫的查詢。同時可以實體封裝和隱藏了資料邏輯。
13. 觸發器: 當滿足觸發器條件,則系統自動執行觸發器的觸發體。
觸發時間:有before,after.觸發事件:有insert,update,delete三種。觸發型別:有行觸發、語句觸發
14.內聯接,外聯接區別?
內連線是保證兩個表中所有的行都要滿足連線條件,而外連線則不然。
在外連線中,某些不滿條件的列也會顯示出來,也就是說,只限制其中一個表的行,而不限制另一個表的行。分左連線、右連線、全連線三種

SQL試題2

一、
教師號  星期號 是否有課
1    2   有
1    3   有
2    1   有
3    2   有`
1    2   有
寫一條sql語句讓你變為這樣的表
教師號 星期一 星期二 星期三
1       2   1
2   1
3       1
各星期下的數字表示:對應的教師在星期幾已經排的課數

二、
書表(books)
book_id,book_name,creatdate,Lastmodifydate,decription
001,三個人的世界,2005-02-02,2005-07-07,NULL
作者表(authors)
A_id,A_name
01,王紛
02,李尚
03,泰和
部門表(depts)
d_id,d_name
001,編輯一部
002,編輯二部
003,編輯三部
書和作者關聯表(bookmap)
book_id,A_id
001,01
001,02
001,03
部門和作者關聯表(depmap)
d_id,a_id
001,01
002,02
003,03
找出每個部門的所寫的總書兩,比如,一本書有3個人寫,如果三個人在不同的部門,則每個部門的總數量就是1.最後結果如下:
部門,書量
編輯一部,1
編輯二部,1
編輯三部,1

三、
兩個表情況
表名:wu_plan
ID plan model corp_code plannum prixis
1 00001 exx22 nokia 2000 0
2 00002 lc001 sony 3000 0

表名:wu_bom
ID plan pact amount
1 00001 aa1 300
2 00001 aa2 200
3 00002 bb1 500
4 00002 bb2 800
5 00002 bb3 400

查詢這兩個表中plan唯一,每一個plan中,amount最少的,plannum大於prixis的記錄
結果是:
ID plan model corp_code plannum prixis pact amount
1 00001 exx22 nokia 2000 0 a2 200
2 00002 lc001 sony 3000 0 bb3 400

四、
表1結構如下:
部門 條碼 品名 銷售額 銷售數量 銷售日期

表2結構如下
課別 部門

要求:先按部門排序,再按銷售額、銷售數量排序檢索出某個課別每個部門一個時期內的商品銷售額的前三名,如查詢01課別2007年4月15日到2007年4月22日每個部門一個周內的商品銷售額合計的前三名

SQL 面試題目彙總

1.觸發器的作用?

答:觸發器是一中特殊的儲存過程,主要是通過事件來觸發而被執行的。它可以強化約束,來維護資料的完整性和一致性,可以跟蹤資料庫內的操作從而不允許未經許可的更新和變化。可以聯級運算。如,某表上的觸發器上包含對另一個表的資料操作,而該操作又會導致該表觸發器被觸發。

2。什麼是儲存過程?用什麼來呼叫?

答:儲存過程是一個預編譯的SQL語句,優點是允許模組化的設計,就是說只需建立一次,以後在該程式中就可以呼叫多次。如果某次操作需要執行多次SQL,使用儲存過程比單純SQL語句執行要快。可以用一個命令物件來呼叫儲存過程。

3。索引的作用?和它的優點缺點是什麼?

答:索引就一種特殊的查詢表,資料庫的搜尋引擎可以利用它加速對資料的檢索。它很類似與現實生活中書的目錄,不需要查詢整本書內容就可以找到想要的 資料。索引可以是唯一的,建立索引允許指定單個列或者是多個列。缺點是它減慢了資料錄入的速度,同時也增加了資料庫的尺寸大小。

3。什麼是記憶體洩漏?

答:一般我們所說的記憶體洩漏指的是堆記憶體的洩漏。堆記憶體是程式從堆中為其分配的,大小任意的,使用完後要顯示釋放記憶體。當應用程式用關鍵字new等 建立物件時,就從堆中為它分配一塊記憶體,使用完後程式呼叫free或者delete釋放該記憶體,否則就說該記憶體就不能被使用,我們就說該記憶體被洩漏了。

4。維護資料庫的完整性和一致性,你喜歡用觸發器還是自寫業務邏輯?為什麼?

答:我是這樣做的,儘可能使用約束,如check,主鍵,外來鍵,非空欄位等來約束,這樣做效率最高,也最方便。其次是使用觸發器,這種方法可以保證,無論什麼業務系統訪問資料庫都可以保證資料的完整新和一致性。最後考慮的是自寫業務邏輯,但這樣做麻煩,程式設計複雜,效率低下。

5。什麼是事務?什麼是鎖?

答:事務就是被繫結在一起作為一個邏輯工作單元的SQL語句分組,如果任何一個語句操作失敗那麼整個操作就被失敗,以後操作就會回滾到操作前狀態,或者是上有個節點。為了確保要麼執行,要麼不執行,就可以使用事務。要將有組語句作為事務考慮,就需要通過ACID測試,即原子性,一致性,隔離性和永續性。

鎖:在所以的DBMS中,鎖是實現事務的關鍵,鎖可以保證事務的完整性和併發性。與現實生活中鎖一樣,它可以使某些資料的擁有者,在某段時間內不能使用某些資料或資料結構。當然鎖還分級別的。

6。什麼叫檢視?遊標是什麼?

答:檢視是一種虛擬的表,具有和物理表相同的功能。可以對檢視進行增,改,查,操作,試圖通常是有一個表或者多個表的行或列的子集。對檢視的修改不影響基本表。它使得我們獲取資料更容易,相比多表查詢。

遊標:是對查詢出來的結果集作為一個單元來有效的處理。遊標可以定在該單元中的特定行,從結果集的當前行檢索一行或多行。可以對結果集當前行做修改。一般不使用遊標,但是需要逐條處理資料的時候,遊標顯得十分重要。

7。為管理業務培訓資訊,建立3個表:

S(S#,SN,SD,SA)S#,SN,SD,SA分別代表學號,學員姓名,所屬單位,學員年齡

C(C#,CN)C#,CN分別代表課程編號,課程名稱

SC(S#,C#,G) S#,C#,G分別代表學號,所選的課程編號,學習成績

(1)使用標準SQL巢狀語句查詢選修課程名稱為’稅收基礎’的學員學號和姓名?

答案:select s# ,sn from s where S# in(select S# from c,scwhere c.c#=sc.c# and cn=’稅收基礎’)

(2) 使用標準SQL巢狀語句查詢選修課程編號為’C2’的學員姓名和所屬單位?

答:select sn,sd from s,sc where s.s#=sc.s# and sc.c#=’c2’

(3) 使用標準SQL巢狀語句查詢不選修課程編號為’C5’的學員姓名和所屬單位?

答:select sn,sd from s where s# not in(select s# from scwhere c#=’c5’)

(4)查詢選修了課程的學員人數

答:select 學員人數=count(distinct s#)from sc

(5) 查詢選修課程超過5門的學員學號和所屬單位?

答:select sn,sd from s where s# in(select s# from sc groupby s# having count(distinct c#)>5)

目前在職場中很難找到非常合格的資料庫開發人員。有人說:“SQL開發是一門語言,它很容易學,但是很難掌握。”

華為http://sqlserver.365dev.net/sql-1981.html

在面試過程中多次碰到兩道SQL查詢的題目,一是查詢A(ID,Name)表中第31至40條記錄,ID作為主鍵可能是不是連續增長的列,完整的查詢語句如下:

select top 10 * from A where ID >(select max(ID) from(select top 30 ID from A order by A ) T) order by A

另外一道題目的要求是查詢表A中存在ID重複三次以上的記錄,完整的查詢語句如下:
select * from(select count(ID) as count from table group by ID)T whereT.count>3

以上兩道題目非常有代表意義,望各位把自己碰到的有代表的查詢都貼上來。

create table testtable1
(
id int IDENTITY,
department varchar(12)
)

select * from testtable1
insert into testtable1 values(‘設計’)
insert into testtable1 values(‘市場’)
insert into testtable1 values(‘售後’)
/*
結果
id department
1 設計
2 市場
3 售後
/
create table testtable2
(
id int IDENTITY,
dptID int,
name varchar(12)
)
insert into testtable2 values(1,’張三’)
insert into testtable2 values(1,’李四’)
insert into testtable2 values(2,’王五’)
insert into testtable2 values(3,’彭六’)
insert into testtable2 values(4,’陳七’)
/

用一條SQL語句,怎麼顯示如下結果
id dptID department name
1 1 設計 張三
2 1 設計 李四
3 2 市場 王五
4 3 售後 彭六
5 4 黑人 陳七
*/

答案是:

SELECT testtable2.* , ISNULL(department,’黑人’)
FROM testtable1 right join testtable2 on testtable2.dptID = testtable1.ID

在面試應聘的SQL Server資料庫開發人員時,我運用了一套標準的基準技術問題。下面這些問題是我覺得能夠真正有助於淘汰不合格應聘者的問題。它們按照從易到難的順序排列。當你問到關於主鍵和外來鍵的問題時,後面的問題都十分有難度,因為答案可能會更難解釋和說明,尤其是在面試的情形下。

你能向我簡要敘述一下SQL Server 2000中使用的一些資料庫物件嗎?

你希望聽到的答案包括這樣一些物件:表格、檢視、使用者定義的函式,以及儲存過程;如果他們還能夠提到像觸發器這樣的物件就更好了。如果應聘者不能回答這個基本的問題,那麼這不是一個好兆頭。

NULL是什麼意思?

NULL(空)這個值是資料庫世界裡一個非常難纏的東西,所以有不少應聘者會在這個問題上跌跟頭您也不要覺得意外。

NULL這個值表示UNKNOWN(未知):它不表示“”(空字串)。假設您的SQL Server資料庫裡有ANSI_NULLS,當然在預設情況下會有,對NULL這個值的任何比較都會生產一個NULL值。您不能把任何值與一個 UNKNOWN值進行比較,並在邏輯上希望獲得一個答案。您必須使用IS NULL操作符。

什麼是索引?SQL Server 2000裡有什麼型別的索引?

任何有經驗的資料庫開發人員都應該能夠很輕易地回答這個問題。一些經驗不太多的開發人員能夠回答這個問題,但是有些地方會說不清楚。

簡單地說,索引是一個資料結構,用來快速訪問資料庫表格或者檢視裡的資料。在SQL Server裡,它們有兩種形式:聚集索引和非聚集索引。聚集索引在索引的葉級儲存資料。這意味著不論聚集索引裡有表格的哪個(或哪些)欄位,這些欄位都 會按順序被儲存在表格。由於存在這種排序,所以每個表格只會有一個聚集索引。非聚集索引在索引的葉級有一個行識別符號。這個行識別符號是一個指向磁碟上資料的指標。它允許每個表格有多個非聚集索引。

什麼是主鍵?什麼是外來鍵?

主鍵是表格裡的(一個或多個)欄位,只用來定義表格裡的行;主鍵裡的值總是唯一的。外來鍵是一個用來建立兩個表格之間關係的約束。這種關係一般都涉及一個表格裡的主鍵欄位與另外一個表格(儘管可能是同一個表格)裡的一系列相連的欄位。那麼這些相連的欄位就是外來鍵。

什麼是觸發器?SQL Server 2000有什麼不同型別的觸發器?

讓未來的資料庫開發人員知道可用的觸發器型別以及如何實現它們是非常有益的。

觸發器是一種專用型別的儲存過程,它被捆綁到SQL Server 2000的表格或者檢視上。在SQL Server 2000裡,有INSTEAD-OF和AFTER兩種觸發器。INSTEAD-OF觸發器是替代資料操控語言(Data Manipulation Language,DML)語句對錶格執行語句的儲存過程。例如,如果我有一個用於TableA的INSTEAD-OF-UPDATE觸發器,同時對這個 表格執行一個更新語句,那麼INSTEAD-OF-UPDATE觸發器裡的程式碼會執行,而不是我執行的更新語句則不會執行操作。

AFTER觸發器要在DML語句在資料庫裡使用之後才執行。這些型別的觸發器對於監視發生在資料庫表格裡的資料變化十分好用。

您如何確一個帶有名為Fld1欄位的TableB表格裡只具有Fld1欄位裡的那些值,而這些值同時在名為TableA的表格的Fld1欄位裡?

這個與關係相關的問題有兩個可能的答案。第一個答案(而且是您希望聽到的答案)是使用外來鍵限制。外來鍵限制用來維護引用的完整性。它被用來確保表格裡 的欄位只儲存有已經在不同的(或者相同的)表格裡的另一個欄位裡定義了的值。這個欄位就是候選鍵(通常是另外一個表格的主鍵)。

另外一種答案是觸發器。觸發器可以被用來保證以另外一種方式實現與限制相同的作用,但是它非常難設定與維護,而且效能一般都很糟糕。由於這個原因,微軟建議開發人員使用外來鍵限制而不是觸發器來維護引用的完整性。

對一個投入使用的線上事務處理表格有過多索引需要有什麼樣的效能考慮?

你正在尋找進行與資料操控有關的應聘人員。對一個表格的索引越多,資料庫引擎用來更新、插入或者刪除資料所需要的時間就越多,因為在資料操控發生的時候索引也必須要維護。

你可以用什麼來確保表格裡的欄位只接受特定範圍裡的值?

這個問題可以用多種方式來回答,但是隻有一個答案是“好”答案。您希望聽到的回答是Check限制,它在資料庫表格裡被定義,用來限制輸入該列的值。

觸發器也可以被用來限制資料庫表格裡的欄位能夠接受的值,但是這種辦法要求觸發器在表格裡被定義,這可能會在某些情況下影響到效能。因此,微軟建議使用Check限制而不是其他的方式來限制域的完整性。

如果應聘者能夠正確地回答這個問題,那麼他的機會就非常大了,因為這表明他們具有使用儲存過程的經驗。

返回引數總是由儲存過程返回,它用來表示儲存過程是成功還是失敗。返回引數總是INT資料型別。

OUTPUT引數明確要求由開發人員來指定,它可以返回其他型別的資料,例如字元型和數值型的值。(可以用作輸出引數的資料型別是有一些限制的。)您可以在一個儲存過程裡使用多個OUTPUT引數,而您只能夠使用一個返回引數。

什麼是相關子查詢?如何使用這些查詢?

經驗更加豐富的開發人員將能夠準確地描述這種型別的查詢。

相關子查詢是一種包含子查詢的特殊型別的查詢。查詢裡包含的子查詢會真正請求外部查詢的值,從而形成一個類似於迴圈的狀況。

資料庫面試

一:SQL tuning 類

  1. 列舉幾種表連線方式
    Answer:等連線(內連線)、非等連線、自連線、外連線(左、右、全)

Or hash join/merge join/nest loop(cluster join)/index join ??

ORACLE 8i,9i 表連線方法。

一般的相等連線: select * from a, b where a.id = b.id; 這個就屬於內連線。

對於外連線:

Oracle中可以使用“(+) ”來表示,9i可以使用LEFT/RIGHT/FULL OUTER JOIN

LEFT OUTER JOIN:左外關聯

SELECT e.last_name, e.department_id, d.department_name

FROM employees e

LEFT OUTER JOIN departments d

ON (e.department_id = d.department_id);

等價於

SELECT e.last_name, e.department_id, d.department_name

FROM employees e, departments d

WHERE e.department_id=d.department_id(+)

結果為:所有員工及對應部門的記錄,包括沒有對應部門編號department_id的員工記錄。

RIGHT OUTER JOIN:右外關聯

SELECT e.last_name, e.department_id, d.department_name

FROM employees e

RIGHT OUTER JOIN departments d

ON (e.department_id = d.department_id);

等價於

SELECT e.last_name, e.department_id, d.department_name

FROM employees e, departments d

WHERE e.department_id(+)=d.department_id

結果為:所有員工及對應部門的記錄,包括沒有任何員工的部門記錄。

FULL OUTER JOIN:全外關聯

SELECT e.last_name, e.department_id, d.department_name

FROM employees e

FULL OUTER JOIN departments d

ON (e.department_id = d.department_id);

結果為:所有員工及對應部門的記錄,包括沒有對應部門編號department_id的員工記錄和沒有任何員工的部門記錄。

ORACLE8i是不直接支援完全外連線的語法,也就是說不能在左右兩個表上同時加上(+),下面是在ORACLE8i可以參考的完全外連線語法

select t1.id,t2.id from table1 t1,table t2 wheret1.id=t2.id(+)

union

select t1.id,t2.id from table1 t1,table t2 wheret1.id(+)=t2.id

連線型別
定義
圖示
例子

內連線
只連線匹配的行

select A.c1,B.c2 from A join B on A.c3 = B.c3;

左外連線
包含左邊表的全部行(不管右邊的表中是否存在與它們匹配的行)以及右邊表中全部匹配的行

select A.c1,B.c2 from A left join B on A.c3 = B.c3;

右外連線
包含右邊表的全部行(不管左邊的表中是否存在與它們匹配的行)以及左邊表中全部匹配的行

select A.c1,B.c2 from A right join B on A.c3 = B.c3;

全外連線
包含左、右兩個表的全部行,不管在另一邊的表中是否存在與它們匹配的行

select A.c1,B.c2 from A full join B on A.c3 = B.c3;

(theta)連線
使用等值以外的條件來匹配左、右兩個表中的行

select A.c1,B.c2 from A join B on A.c3 != B.c3;

交叉連線
生成笛卡爾積——它不使用任何匹配或者選取條件,而是直接將一個資料來源中的每個行與另一個資料來源的每個行一一匹配

select A.c1,B.c2 from A,B;

  1. 不借助第三方工具,怎樣檢視sql的執行計劃
    I) 使用Explain Plan,查詢PLAN_TABLE;

EXPLAIN PLAN

SET STATEMENT_ID=’QUERY1′

FOR

SELECT *

FROM a

WHERE aa=1;

SELECT operation, options, object_name, object_type, ID,parent_id

FROM plan_table

WHERE STATEMENT_ID = ‘QUERY1′

ORDER BY ID;

II)SQLPLUS中的SET TRACE 即可看到Execution Plan Statistics

SET AUTOTRACE ON;

  1. 如何使用CBO,CBO與RULE的區別
    IF 初始化引數 OPTIMIZER_MODE = CHOOSE THEN –(8I DEFAULT)

IF 做過表分析

THEN 優化器 Optimizer=CBO(COST); /高效/

ELSE

優化器 Optimizer=RBO(RULE); /高效/

END IF;

END IF;

區別:

RBO根據規則選擇最佳執行路徑來執行查詢。

CBO根據表統計找到最低成本的訪問資料的方法確定執行計劃。

使用CBO需要注意:

I) 需要經常對錶進行ANALYZE命令進行分析統計;

II) 需要穩定執行計劃;

III)需要使用提示(Hint);

使用RULE需要注意:

I) 選擇最有效率的表名順序

II) 優化SQL的寫法;

在optimizer_mode=choose時,如果表有統計資訊(分割槽表外),優化器將選擇CBO,否則選RBO。

RBO遵循簡單的分級方法學,使用15種級別要點,當接收到查詢,優化器將評估使用到的要點數目,然後選擇最佳級別(最少的數量)的執行路徑來執行查詢。

CBO嘗試找到最低成本的訪問資料的方法,為了最大的吞吐量或最快的初始響應時間,計算使用不同的執行計劃的成本,並選擇成本最低的一個,關於表的資料內容的統計被用於確定執行計劃。

  1. 如何定位重要(消耗資源多)的SQL
    使用CPU多的使用者session

SELECT a.SID, spid, status, SUBSTR (a.program, 1, 40) prog,a.terminal,a.SQL_TEXT, osuser, VALUE / 60 / 100 VALUE

FROM vsessiona,vsession a, vprocess b, v$sesstat c

WHERE c.statistic# = 12 AND c.SID = a.SID AND a.paddr =b.addr

ORDER BY VALUE DESC;

select sql_text from v$sql

where disk_reads > 1000 or (executions > 0 andbuffer_gets/executions > 30000);

  1. 如何跟蹤某個session的SQL
    利用TRACE 跟蹤

ALTER SESSION SET SQLTRACE ON;

COLUMN SQL format a200;

SELECT machine, sql_text SQL

FROM vsqltexta,vsqltext a, vsession b

WHERE address = sql_address

AND machine = ‘&A’

ORDER BY hash_value, piece;

execdbms_system.set_sql_trace_in_session(sid,serial#,&sql_trace);

select sid,serial# from vsessionwheresid=(selectsidfromvsession where sid = (select sidfrom vmystat where rownum = 1);

exec dbms_system.set_ev(&sid,&serial#,&event_10046,&level_12,”);

  1. SQL調整最關注的是什麼
    檢查系統的I/O問題

sar-d能檢查整個系統的iostat(IO statistics)

檢視該SQL的response time(db blockgets/consistent gets/physical reads/sorts (disk))

  1. 說說你對索引的認識(索引的結構、對dml影響、對查詢影響、為什麼提高查詢效能)
    索引有B-TREE、BIT、CLUSTER等型別。ORACLE使用了一個複雜的自平衡B-tree結構;通常來說,在表上建立恰當的索引,查詢時會改 進查詢效能。但在進行插入、刪除、修改時,同時會進行索引的修改,在效能上有一定的影響。有索引且查詢條件能使用索引時,資料庫會先度取索引,根據索引內容和查詢條件,查詢出ROWID,再根據ROWID取出需要的資料。由於索引內容通常比全表內容要少很多,因此通過先讀索引,能減少I/O,提高查詢性 能。

b-tree index/bitmap index/function index/patitionalindex(local/global)索引通常能提高select/update/delete的效能,會降低insert的速度,

  1. 使用索引查詢一定能提高查詢的效能嗎?為什麼
    通常,通過索引查詢資料比全表掃描要快.但是我們也必須注意到它的代價.

索引需要空間來儲存,也需要定期維護, 每當有記錄在表中增減或索引列被修改時,索引本身也會被修改. 這意味著每條記錄的INSERT,DELETE,UPDATE將為此多付出4,5 次的磁碟I/O. 因為索引需要額外的儲存空間和處理,那些不必要的索引反而會使查詢反應時間變慢.使用索引查詢不一定能提高查詢效能,索引範圍查詢(INDEX RANGE SCAN)適用於兩種情況:

基於一個範圍的檢索,一般查詢返回結果集小於表中記錄數的30%宜採用;

基於非唯一性索引的檢索

索引就是為了提高查詢效能而存在的,如果在查詢中索引沒有提高效能,只能說是用錯了索引,或者講是場合不同

  1. 繫結變數是什麼?繫結變數有什麼優缺點?
    繫結變數是指在SQL語句中使用變數,改變變數的值來改變SQL語句的執行結果。

優點:使用繫結變數,可以減少SQL語句的解析,能減少資料庫引擎消耗在SQL語句解析上的資源。提高了程式設計效率和可靠性。減少訪問資料庫的次數, 就能實際上減少ORACLE的工作量。

缺點:經常需要使用動態SQL的寫法,由於引數的不同,可能SQL的執行效率不同;

繫結變數是相對文字變數來講的,所謂文字變數是指在SQL直接書寫查詢條件,

這樣的SQL在不同條件下需要反覆解析,繫結變數是指使用變數來代替直接書寫條件,查詢bind value在執行時傳遞,然後繫結執行。

優點是減少硬解析,降低CPU的爭用,節省shared_pool

缺點是不能使用histogram,sql優化比較困難

  1. 如何穩定(固定)執行計劃
    可以在SQL語句中指定執行計劃。使用HINTS;

query_rewrite_enabled = true

star_transformation_enabled = true

optimizer_features_enable =9.2.0

建立並使用stored outline

  1. 和排序相關的記憶體在8i和9i分別怎樣調整,臨時表空間的作用是什麼
    SORT_AREA_SIZE 在進行排序操作時,如果排序的內容太多,記憶體裡不能全部放下,則需要進行外部排序,

此時需要利用臨時表空間來存放排序的中間結果。

8i中sort_area_size/sort_area_retained_size決定了排序所需要的記憶體,如果排序操作不能在sort_area_size中完成,就會用到temp表空間

9i中如果workarea_size_policy=auto時,

排序在pga內進行,通常pga_aggregate_target的1/20可以用來進行disk sort;

如果workarea_size_policy=manual時,排序需要的記憶體由sort_area_size決定, 在執行order by/groupby/distinct/union/create index/index rebuild/minus等操作時,如果在pga或sort_area_size中不能完成,排序將在臨時表空間進行(disk sort),臨時表空間主要作用就是完成系統中的disk sort.

  1. 存在表T(a,b,c,d),要根據欄位c排序後取第21—30條記錄顯示,請給出sql
    SELECT *

FROM (SELECT ROWNUM AS row_num, tmp_tab.*

FROM (SELECT a, b, c, d

FROM T

ORDER BY c) tmp_tab

WHERE ROWNUM= 20

ORDER BY row_num;

create table t(a number(,b number(,c number(,d number();

/

begin

for i in 1 … 300 loop

insert into tvalues(mod(i,2),i/2,dbms_random.value(1,300),i/4);

end loop;

end;

/

select * from (select c.*,rownum as rn from (select * fromt order by c desc) c) where rn between 21 and 30;

/

select * from (select * from test order by c desc) x whererownum < 30

minus

select * from (select * from test order by c desc) y whererownum < 20 order by 3 desc

相比之 minus效能較差

二:資料庫基本概念類
1 Pctused and pctfree 表示什麼含義有什麼作用
pctused與pctfree控制資料塊是否出現在freelist中, pctfree控制資料塊中保留用於update的空間,當資料塊中的free space小於pctfree設定的空間時,該資料塊從freelist中去掉,當塊由於dml操作free space大於pct_used設定的空間時,該資料庫塊將被新增在freelist連結串列中。

2 簡單描述tablespace / segment / extent/ block之間的關係
tablespace: 一個資料庫劃分為一個或多個邏輯單位,該邏輯單位成為表空間;每一個表空間可能包含一個或多個 Segment;

Segments: Segment指在tablespace中為特定邏輯儲存結構分配的空間。每一個段是由一個或多個extent組成。包括資料段、索引段、回滾段和臨時段。

Extents: 一個 extent 由一系列連續的 Oracle blocks組成.ORACLE為通過extent 來給segment分配空間。

Data Blocks:Oracle 資料庫最小的I/O儲存單位,一個data block對應一個或多個分配給data file的作業系統塊。

table建立時,預設建立了一個data segment,每個data segment含有min extents指定的extents數,每個extent據據表空間的儲存引數分配一定數量的blocks

3 描述tablespace和datafile之間的關係
一個表空間可包含一個或多個資料檔案。表空間利用增加或擴充套件資料檔案擴大表空間,表空間的大小為組成該表空間的資料檔案大小的和。一個datafile只能屬於一個表空間;

一個tablespace可以有一個或多個datafile,每個datafile只能在一個tablespace內, table中的資料,通過hash演算法分佈在tablespace中的各個datafile中,tablespace是邏輯上的概念,datafile則 在物理上儲存了資料庫的種種物件。

4 本地管理表空間和字典管理表空間的特點,ASSM有什麼特點
本地管理表空間:(9i預設)空閒塊列表儲存在表空間的資料檔案頭。

特點:減少資料字典表的競爭,當分配和收縮空間時會產生回滾,不需要合併。

字典管理表空間:(8i預設)空閒塊列表儲存在資料庫中的字典表裡.

特點:片由資料字典管理,可能造成字典表的爭用。儲存在表空間的每一個段都會有不同的儲存字句,需要合併相鄰的塊;

本地管理表空間(Locally Managed Tablespace簡稱LMT)

8i以後出現的一種新的表空間的管理模式,通過點陣圖來管理表空間的空間使用。字典管理表空間(Dictionary-Managed Tablespace簡稱DMT)

8i以前包括以後都還可以使用的一種表空間管理模式,通過資料字典管理表空間的空間使用。動段空間管理(ASSM),它首次出現在Oracle920裡有了ASSM,連結列表freelist被點陣圖所取代,它是一個二進位制的陣列,

能夠迅速有效地管理儲存擴充套件和剩餘區塊(free block),因此能夠改善分段儲存本質,ASSM表空間上建立的段還有另外一個稱呼叫Bitmap Managed Segments(BMB 段)。

5 回滾段的作用是什麼
回滾段用於儲存資料修改前的映象,這些資訊用於生成讀一致性資料庫資訊、在資料庫恢復和Rollback時使用。一個事務只能使用一個回滾段。

事務回滾:當事務修改表中資料的時候,該資料修改前的值(即前影像)會存放在回滾段中,當使用者回滾事務(ROLLBACK)時,ORACLE將會利用回滾段中的資料前影像來將修改的資料恢復到原來的值。

事務恢復:當事務正在處理的時候,例程失敗,回滾段的資訊儲存在undo表空間中,ORACLE將在下次開啟資料庫時利用回滾來恢復未提交的資料。

讀一致性:當一個會話正在修改資料時,其他的會話將看不到該會話未提交的修改。 當一個語句正在執行時,該語句將看不到從該語句開始執行後的未提交的修改(語句級讀一致性)

當ORACLE執行SELECT語句時,ORACLE依照當前的系統改變號(SYSTEM CHANGE NUMBER-SCN)來保證任何前於當前SCN的未提交的改變不被該語句處理。可以想象:當一個長時間的查詢正在執行時, 若其他會話改變了該查詢要查詢的某個資料塊,ORACLE將利用回滾段的資料前影像來構造一個讀一致性檢視

6 日誌的作用是什麼
日誌檔案(Log File)記錄所有對資料庫資料的修改,主要是保護資料庫以防止故障,以及恢復資料時使用。其特點如下:

a)每一個資料庫至少包含兩個日誌檔案組。每個日誌檔案組至少包含兩個日誌檔案成員。

b)日誌檔案組以迴圈方式進行寫操作。

c)每一個日誌檔案成員對應一個物理檔案。

記錄資料庫事務,最大限度地保證資料的一致性與安全性

重做日誌檔案:含對資料庫所做的更改記錄,這樣萬一出現故障可以啟用資料恢復,一個資料庫至少需要兩個重做日誌檔案

歸檔日誌檔案:是重做日誌檔案的離線副本,這些副本可能對於從介質失敗中進行恢復很必要。

7 SGA主要有那些部分,主要作用是什麼
系統全域性區(SGA):是ORACLE為例項分配的一組共享緩衝儲存區,用於存放資料庫資料和控制資訊,以實現對資料庫資料的管理和操作。

SGA主要包括:

a)共享池(shared pool) :用來儲存最近執行的SQL語句和最近使用的資料字典的資料。

b)資料緩衝區 (database buffer cache):用來儲存最近從資料檔案中讀寫過的資料。

c)重作日誌緩衝區(redo log buffer):用來記錄服務或後臺程式對資料庫的操作。

另外在SGA中還有兩個可選的記憶體結構:

d)java pool: 用來儲存Java程式碼。

e)Large pool: 用來儲存不與SQL直接相關的大型記憶體結構。備份、恢復使用。

GA:db_cache/shared_pool/large_pool/java_pool

db_cache: 資料庫快取(Block Buffer)對於Oracle資料庫的運轉和效能起著非常關鍵的作用,它佔據Oracle資料庫SGA(系統共享記憶體區)的主要部分。Oracle資料 庫通過使用LRU演算法,將最近訪問的資料塊存放到快取中,從而優化對磁碟資料的訪問.

shared_pool: 共享池的大小對於Oracle 效能來說都是很重要的。共享池中儲存資料字典高速緩衝和完全解析或編譯的的PL/SQL 塊和SQL 語句及控制結構

large_pool: 使用MTS配置時,因為要在SGA中分配UGA來保持使用者的會話,就是用Large_pool來保持這個會話記憶體使用RMAN做備份的時候,要使用Large_pool這個記憶體結構來做磁碟I/O快取器

java_pool: 為java procedure預備的記憶體區域,如果沒有使用java proc,java_pool不是必須的

8 Oracle系統程式主要有哪些,作用是什麼
資料寫程式(DBWR):負責將更改的資料從資料庫緩衝區快取記憶體寫入資料檔案

日誌寫程式(LGWR):將重做日誌緩衝區中的更改寫入線上重做日誌檔案

系統監控 (SMON): 檢查資料庫的一致性如有必要還會在資料庫開啟時啟動資料庫的恢復

程式監控 (PMON): 負責在一個Oracle 程式失敗時清理資源

檢查點程式(CKPT):負責在每當緩衝區快取記憶體中的更改永久地記錄在資料庫中時,更新控制檔案和資料檔案中的資料庫狀態資訊。

歸檔程式 (ARCH):在每次日誌切換時把已滿的日誌組進行備份或歸檔

恢復程式 (RECO): 保證分散式事務的一致性,在分散式事務中,要麼同時commit,要麼同時rollback;

作業排程器(CJQ ): 負責將排程與執行系統中已定義好的job,完成一些預定義的工作.

三:備份恢復類
1 備份如何分類
邏輯備份:exp/imp 指定表的邏輯備份

物理備份:

熱備份:alter tablespace begin/end backup;

冷備份:離線備份(database shutdown)

RMAN備份

full backup/incremental backup(累積/差異)

物理備份

物理備份是最主要的備份方式。用於保證資料庫在最小的資料庫丟失或沒有資料丟失的情況下得到恢復。

冷物理

冷物理備份提供了最簡單和最直接的方法保護資料庫因物理損壞丟失。建議在以下幾種情況中使用。

對一個已經存在大最資料量的資料庫,在晚間資料庫可以關閉,此時應用冷物理備份。

對需對資料庫伺服器進行升級,(如更換硬碟),此時需要備份資料庫資訊,並在新的硬碟中恢復這些資料資訊,建議採用冷物理備份。

熱物理

主要是指備份過程在資料庫開啟並且使用者可以使用的情況下進行。需要執行熱物理備份的情況有:

由於資料庫性質要求不間斷工作,因而此時只能採用熱物理備份。

由於備份的要求的時間過長,而資料庫只能短時間關閉時。

邏輯備份 (EXP/IMP)

邏輯備份用於實現資料庫物件的恢復。但不是基於時間點可完全恢復的備份策略。只能作為聯機備份和離線備份的一種補充。

完全邏輯備份

完全邏輯備份是將整個資料庫匯出到一個資料庫的格式檔案中,該檔案可以在不同的資料庫版本、作業系統和硬體平臺之間進行移植。

指定表的邏輯備份

通過備份工具,可以將指定的資料庫表備份出來,這可以避免完全邏輯備份所帶來的時間和財力上的浪費。

2 歸檔是什麼含義
關於歸檔日誌:Oracle要將填滿的線上日誌檔案組歸檔時,則要建立歸檔日誌(archived redo log)。其對資料庫備份和恢復有下列用處:

資料庫後備以及線上和歸檔日誌檔案,在作業系統和磁碟故障中可保證全部提交的事物可被恢復。

在資料庫開啟和正常系統使用下,如果歸檔日誌是永久儲存,線上後備可以進行和使用。

資料庫可執行在兩種不同方式下:NOARCHIVELOG方式或ARCHIVELOG方式

資料庫在NOARCHIVELOG方式下使用時,不能進行線上日誌的歸檔,

資料庫在ARCHIVELOG方式下執行,可實施線上日誌的歸檔

歸檔是歸檔當前的聯機redo日誌檔案。

SVRMGR> alter system archive log current;

資料庫只有執行在ARCHIVELOG模式下,並且能夠進行自動歸檔,才可以進行聯機備份。有了聯機備份才有可能進行完全恢復。

3 如果一個表在2004-08-04 10:30:00 被drop,在有完善的歸檔和備份的情況下,如何恢復
9i 新增的FLASH BACK 應該可以;

Logminer應該可以找出DML。

有完善的歸檔和備份,先歸檔當前資料,然後可以先恢復到刪除的時間點之前,把DROP 的表匯出來,然後再恢復到最後歸檔時間;

手工拷貝回所有備份的資料檔案

Sql〉startup mount;

sql〉alter database recoverautomatic until time ’2004-08-04:10:30:00′;

sql〉alter database open resetlogs;

4 rman是什麼,有何特點
RMAN(Recovery Manager)是DBA的一個重要工具,用於備份、還原和恢復oracle資料庫, RMAN 可以用來備份和恢復資料庫檔案、歸檔日誌、控制檔案、系統引數檔案,也可以用來執行完全或不完全的資料庫恢復。

RMAN有三種不同的使用者介面:COMMAND LINE方式、GUI 方式(整合在OEM 中的備份管理器)、API 方式(用於整合到第三方的備份軟體中)。

具有如下特點:

1)功能類似物理備份,但比物理備份強大N倍;

2)可以壓縮空塊;

3)可以在塊水平上實現增量;

4)可以把備份的輸出打包成備份集,也可以按固定大小分割備份集;

5)備份與恢復的過程可以自動管理;

6)可以使用指令碼(存在Recovery catalog 中)

7)可以做壞塊監測

5 standby的特點
備用資料庫(standby database):ORACLE推出的一種高可用性(HIGH AVAILABLE)資料庫方案,在主節點與備用節點間通過日誌同步來保證資料的同步,備用節點作為主節點的備份,可以實現快速切換與災難性恢復,從 920開始,還開始支援物理與邏輯備用伺服器。

9i中的三種資料保護模式分別是:

1)、MAXIMIZE PROTECTION :最大資料保護與無資料分歧,LGWR將同時傳送到備用節點,在主節點事務確認之前,備用節點也必須完全收到日誌資料。如果網路不好,引起LGWR不能傳送資料,將引起嚴重的效能問題,導致主節點DOWN機。

2)、MAXIMIZE AVAILABILITY :無資料丟失模式,允許資料分歧,允許非同步傳送。

正常情況下執行在最大保護模式,在主節點與備用節點的網路斷開或連線不正常時,自動切換到最大效能模式,主節點的操作還是可以繼續的。在網路不好的情況下有較大的效能影響。

3)、MAXIMIZE PERFORMANCE:這種模式應當可以說是從8i繼承過來的備用伺服器模式,非同步傳送,無資料同步檢查,可能丟失資料,但是能獲得主節點的最大效能。9i在配置DATA GUARD的時候預設就是MAXIMIZE PERFORMANCE

6 對於一個要求恢復時間比較短的系統(資料庫50G,每天歸檔5G),你如何設計備份策略
資料庫比較大邏輯備份沒什麼必要,每天歸檔5G,每週三/週六自動歸檔10G,每月RMAN歸檔全庫。應該有standby。

rman/每月一號 level 0 每週末/週三 level 1 其它每天level2

四:系統管理類

  1. 對於一個存在系統效能的系統,說出你的診斷處理思路
    ü 做statspack收集系統相關資訊 瞭解系統大致情況/確定是否存在引數設定不合適的地方/檢視top 5 event/檢視topsql等

ü 查vsystemevent/vsystem_event/vsession_event/vsessionwaitvsession_wait從vsystem_event開始,確定需要什麼資源(db file sequential read)等,深入研究vsessionevent,vsession_event,確定等待事件涉及的會話,從vsession_wait確定詳細的資源爭用情況(p1-p3的 值:file_id/block_id/blocks等)

ü 通過vsql/vsql/vsqltext/v$sqlarea表確定disk_reads、(buffer_gets/executions)值較大的SQL

  1. 列舉幾種診斷IO、CPU、效能狀況的方法
    top uptime vmstat iostat statspack sql_trace/tkprof

查vsystemevent/vsystem_event/vsession_event/v$session_wait

查v$sqlarea(disk_reads或buffer_gets/executions較大的SQL)

或者第三方的監視工具,TOAD就不錯。

  1. 對statspack有何認識
    認識不深。僅限瞭解。StapSpack是Oracle公司提供的一個收集資料庫執行效能指標的軟體包。可以做資料庫健康檢查報告。

StapSpack是Oracle公司提供的一個收集資料庫執行效能指標的軟體包,該軟體包從8i起,在9i、10g都有顯著的增強

該軟體包的輔助表(儲存相關引數與收集的效能指標的表)由最初的25個增長到43個

收集級別引數由原來的3個(0、5、10)增加到5個(0、5、6、7、10)

通過分析收集的效能指標,資料庫管理員可以詳細地瞭解資料庫目前的執行情況,對資料庫例項、等待事件、SQL等進行優化調整

利用statspack收集的snapshot,可以統計製作資料庫的各種效能指標的統計趨勢圖表。

  1. 如果系統現在需要在一個很大的表上建立一個索引,你會考慮那些因素,如何做以儘量減小對應用的影響
    可以先表分析一下,然後測試建立索引前後對應用的效能影響;

需要考慮的是該索引列不經常更新,不是有很多重複值的情況時, 在大表中使用索引特別有效. 建立的索引可以跟資料表分不同表空間儲存。

在系統比較空閒時nologging選項(如果有dataguard則不可以使用nologging)

大的sort_ared_size或pga_aggregate_target較大

  1. 對raid10 和raid5有何認識
    RAID 10(或稱RAID 1+0)與RAID 0+1不同,它是用硬碟驅動器先組成RAID 1陣列,然後在RAID 1陣列之間再組成RAID 0陣列。

RAID 10模式同RAID 0+1模式一樣具有良好的資料傳輸效能,但卻比RAID 0+1具有更高的可靠性。RAID 10陣列的實際容量為M×n/2,磁碟利用率為50%。RAID10也需要至少4個硬碟驅動器構成,因而價格昂貴。

RAID 10的可靠性同RAID 1一樣,但由於RAID 10硬碟驅動器之間有資料分割,因而資料傳輸效能優良。

RAID 5與RAID 3很相似,不同之處在於RAID 5的奇偶校驗資訊也同資料一樣被分割儲存到所有的硬碟驅動器,而不是寫入一個指定的硬碟驅動器,從而消除了單個奇偶校驗硬碟驅動器的瓶頸問題。RAID 5磁碟陣列的效能比RAID 3有所提高,但仍然需要至少3塊硬碟驅動器。其實際容量為M×(n-1),磁碟利用率為(n-1)/n 。

五:綜合隨意類

  1. 你最擅長的是oracle哪部分?
    pl/sql及sql優化

  2. 喜歡oracle嗎?喜歡上論壇嗎?或者偏好oracle的哪一部分?
    喜歡。PL/SQL比較得心應手。

  3. 隨意說說你覺得oracle最有意思的部分或者最困難的部分
    我對資料庫的備份/恢復和效能調優經驗明顯不足,自然覺得有些困難。

基於ORACLE的研究應該是個寬廣的領域,所以我覺得還是有意思的。

  1. 為何要選擇做DBA呢?
    我對資料庫的備份/恢復和效能調優經驗明顯不足,主要是缺乏環境和交流。

因此,算不上什麼DBA。不過因此我更需要這樣的機會。

不過就整個ORACLE 來說,一直從事與它相關的工作,感情還是頗深的。放棄可惜。而且就技術本身而言我覺得自己還是有學習和創新的能力,它的諸如資料倉儲,資料探勘之類的領域也很廣。

資料庫面試筆試題集

第一套
一.選擇題

  1. 下面敘述正確的是______。
    A、演算法的執行效率與資料的儲存結構無關
    B、演算法的空間複雜度是指演算法程式中指令(或語句)的條數
    C、演算法的有窮性是指演算法必須能在執行有限個步驟之後終止D、以上三種描述都不對
  2. 以下資料結構中不屬於線性資料結構的是______。A、佇列B、線性表C、二叉樹D、棧
  3. 在一棵二叉樹上第5層的結點數最多是______。A、8 B、16 C、32 D、15
  4. 下面描述中,符合結構化程式設計風格的是______。
    A、使用順序、選擇和重複(迴圈)三種基本控制結構表示程式的控制邏輯
    B、模組只有一個入口,可以有多個出口
    C、注重提高程式的執行效率 D、不使用goto語句
  5. 下面概念中,不屬於物件導向方法的是______。
    A、物件 B、繼承 C、類 D、過程呼叫
  6. 在結構化方法中,用資料流程圖(DFD)作為描述工具的軟體開發階段是______。
    A、可行性分析 B、需求分析 C、詳細設計 D、程式編碼
  7. 在軟體開發中,下面任務不屬於設計階段的是______。
    A、資料結構設計 B、給出系統模組結構 C、定義模組演算法 D、定義需求並建立系統模型
  8. 資料庫系統的核心是______。
    A、資料模型 B、資料庫管理系統 C、軟體工具 D、資料庫
  9. 下列敘述中正確的是______。
    A、資料庫是一個獨立的系統,不需要作業系統的支援
    B、資料庫設計是指設計資料庫管理系統
    C、資料庫技術的根本目標是要解決資料共享的問題
    D、資料庫系統中,資料的物理結構必須與邏輯結構一致
  10. 下列模式中,能夠給出資料庫物理儲存結構與物理存取方法的是______。
    A、內模式 B、外模式 C、概念模式 D、邏輯模式
  11. Visual FoxPro資料庫檔案是______。
    A、存放使用者資料的檔案 B、管理資料庫物件的系統檔案
    C、存放使用者資料和系統的檔案 D、前三種說法都對
  12. SQL語句中修改表結構的命令是______。
    A、MODIFY TABLE B、MODIFYSTRUCTURE C、ALTER TABLE D、ALTERSTRUCTURE
  13. 如果要建立一個資料組分組報表,第一個分組表示式是”部門”,第二個分組表示式是”性別”,第三個分組表示式是”基本工資”,當前索引的索引表示式應當是______。
    A、部門+性別+基本工資 B、部門+性別+STR(基本工資)
    C、STR(基本工資)+性別+部門 D、性別+部門+STR(基本工資)
  14. 把一個專案編譯成一個應用程式時,下面的敘述正確的是______。
    A、所有的專案檔案將組合為一個單一的應用程式檔案
    B、所有專案的包含檔案將組合為一個單一的應用程式檔案
    C、所有專案排除的檔案將組合為一個單一的應用程式檔案
    D、由使用者選定的專案檔案將組合為一個單一的應用程式檔案
  15. 資料庫DB、資料庫系統DBS、資料庫管理系統DBMS三者之間的關係是______。
    A、DBS包括DB和DBMS B、DBMS包括DB和DBS
    C、DB包括DBS和DBMS D、DBS就是DB,也就是DBMS
  16. 在”選項”對話方塊的”檔案位置”選項卡中可以設定______。
    A、表單的預設大小 B、預設目錄
    C、日期和時間的顯示格式 D、程式程式碼的顏色
  17. 要控制兩個表中資料的完整性和一致性可以設定”參照完整性”,要求這兩個表______。
    A、是同一個資料庫中的兩個表 B、不同資料庫中的兩個表
    C、兩個自由表 D、一個是資料庫表另一個是自由表
  18. 定位第一條記錄上的命令是______。
    A、GO TOP B、GO BOTTOM C、GO 6 D、SKIP
  19. 在關係模型中,實現”關係中不允許出現相同的元組”的約束是通過______。
    A、候選鍵 B、主鍵 C、外來鍵 D、超鍵
  20. 設當前資料庫有10條記錄(記錄未進行任何索引),在下列三種情況下,當前記錄號為1時;EOF()為真時;BOF()為真時,命令?RECN()的結果分別是______。
    A、1,11,1 B、1,10,1 C、1,11,0 D、1,10,0
  21. 下列表示式中結果不是日期型的是______。
    A、CTOD(“2000/10/01″) B、{^99/10/01}+365C、VAL(“2000/10/01″) D、DATE()
  22. 只有滿足聯接條件的記錄才包含在查詢結果中,這種聯接為______。
    A、左聯接 B、右聯接 C、內部聯接 D、完全聯接
  23. 索引欄位值不唯一,應該選擇的索引型別為______。
    A、主索引 B、普通索引 C、候選索引 D、唯一索引
  24. 執行SELECT 0選擇工作區的結果是______。
    A、選擇了0號工作區 B、選擇了空閒的最小號工作區
    C、關閉選擇的工作區 D、選擇已開啟的工作區
  25. 從資料庫中刪除表的命令是______。
    A、DROP TABLE B、ALTER TABLE C、DELETE TABLE D、USE
  26. DELETE FROM S WHERE 年齡>60語句的功能是______。
    A、從S表中徹底刪除年齡大於60歲的記錄 B、S表中年齡大於60歲的記錄被加上刪除標記
    C、刪除S表 D、刪除S表的年齡列
  27. SELECT-SQL語句是______。
    A、選擇工作區語句 B、資料查詢語句 C、選擇標準語句 D、資料修改語句
  28. SQL語言是______語言。A、層次資料庫 B、網路資料庫 C、關聯式資料庫 D、非資料庫
  29. 在SQL中,刪除檢視用______。
    A、DROP SCHEMA命令 B、CREATE TABLE命令 C、DROPVIEW命令 D、DROP INDEX命令
  30. 以下屬於非容器類控制元件的是______。A、Form B、Label C、pageD、Container
  31. 將查詢結果放在陣列中應使用______短語。
    A、INTO CURSOR B、TO ARRAY C、INTO TABLE D、INTO ARRAY
  32. 在命令視窗執行SQL命令時,若命令要佔用多行,續行符是______。
    A、冒號(? B、分號(? C、逗號(,) D、連字元(-)
  33. 設有圖書管理資料庫:
    圖書(總編號C(6),分類號C(8),書名C(16),作者C(6),出版單位C(20),單價N(6,2))
    讀者(借書證號C(4),單位C(8),姓名C(6),性別C(2),職稱C(6),地址C(20))
    借閱(借書證號C(4),總編號C(6),借書日期D(8))
    對於圖書管理資料庫,查詢0001號借書證的讀者姓名和所借圖書的書名。
    SQL語句正確的是______。
    SELECT 姓名,書名 FROM 借閱,圖書,讀者 WHERE;
    借閱.借書證號=”0001″ AND;


A、圖書.總編號=借閱.總編號 AND;
讀者.借書證號=借閱.借書證號
B、圖書.分類號=借閱.分類號 AND;
讀者.借書證號=借閱.借書證號
C、讀者.總編號=借閱.總編號 AND;
讀者.借書證號=借閱.借書證號
D、圖書.總編號=借閱.總編號 AND;
讀者.書名=借閱.書名
34. 設有圖書管理資料庫:
圖書(總編號C(6),分類號C(8),書名C(16),作者C(6),出版單位C(20),單價N(6,2))
讀者(借書證號C(4),單位C(8),姓名C(6),性別C(2),職稱C(6),地址C(20))
借閱(借書證號C(4),總編號C(6),借書日期D(8))
對於圖書管理資料庫,分別求出各個單位當前借閱圖書的讀者人次。下面的SQL語句正確的是______。
SELECT 單位,______ FROM 借閱,讀者 WHERE;
借閱.借書證號=讀者.借書證號 ______
A、COUNT(借閱.借書證號) GROUP BY 單位 B、SUM(借閱.借書證號) GROUP BY 單位
C、COUNT(借閱.借書證號) ORDER BY 單位 D、COUNT(借閱.借書證號) HAVING 單位
35. 設有圖書管理資料庫:
圖書(總編號C(6),分類號C(8),書名C(16),作者C(6),出版單位C(20),單價N(6,2))
讀者(借書證號C(4),單位C(8),姓名C(6),性別C(2),職稱C(6),地址C(20))
借閱(借書證號C(4),總編號C(6),借書日期D(8))
對於圖書管理資料庫,檢索借閱了《現代網路技術基礎》一書的借書證號。下面SQL語句正確的是______。
SELECT 借書證號 FROM 借閱 WHERE 總編號=;


A、(SELECT 借書證號 FROM 圖書 WHERE 書名=”現代網路技術基礎”)
B、(SELECT 總編號 FROM 圖書 WHERE 書名=”現代網路技術基礎”)
C、(SELECT 借書證號 FROM 借閱 WHERE 書名=”現代網路技術基礎”)
D、(SELECT 總編號 FROM 借閱 WHERE 書名=”現代網路技術基礎”)
二、填空題
36. 演算法的複雜度主要包括______複雜度和空間複雜度。
37. 資料的邏輯結構在計算機儲存空間中的存放形式稱為資料的______。
38. 若按功能劃分,軟體測試的方法通常分為白盒測試方法和______測試方法。
39. 如果一個工人可管理多個設施,而一個設施只被一個工人管理,則實體”工人”與實體”裝置”之間存在______聯絡。
40. 關聯式資料庫管理系統能實現的專門關係運算包括選擇、連線和______。
41. 命令?LEN(“THIS IS MY BOOK”)的結果是______。
42.SQL SELECT語句為了將查詢結果存放到臨時表中應該使用______短語。
43. 多欄報表的欄目數可以通過______來設定。
44. 在開啟專案管理器之後再開啟”應用程式生成器”,可以通過按ALT+F2鍵,快捷選單和”工具”選單中的______。
45. 資料庫系統的核心是______。
46. 查詢設計器中的”聯接”選項卡,可以控制______選擇。
47. 設有圖書管理資料庫:
圖書(總編號C(6),分類號C(8),書名C(16),作者C(6),出版單位C(20),單價N(6,2))
讀者(借書證號C(4),單位C(8),姓名C(6),性別C(2),職稱C(6),地址C(20))
借閱(借書證號C(4),總編號C(6),借書日期D(8))
用SQL的CREATE命令建立借閱表(欄位順序要相同),請對下面的SQL語句填空:


  1. 設有圖書管理資料庫:
    圖書(總編號C(6),分類號C(8),書名C(16),作者C(6),出版單位C(20),單價N(6,2))
    讀者(借書證號C(4),單位C(8),姓名C(6),性別C(2),職稱C(6),地址C(20))
    借閱(借書證號C(4),總編號C(6),借書日期D(8))
    對圖書管理資料庫,查詢由”清華大學出版社”或”電子工業出版社”出版,並且單價不超出20元的書名。請對下面的SQL語句填空:
    SELECT 書名,出版單位,單價 FROM 圖書;
    WHERE_______ AND;

  1. 設有圖書管理資料庫:
    圖書(總編號C(6),分類號C(8),書名C(16),作者C(6),出版單位C(20),單價N(6,2))
    讀者(借書證號C(4),單位C(8),姓名C(6),性別C(2),職稱C(6),地址C(20))
    借閱(借書證號C(4),總編號C(6),借書日期D(8))
    對圖書管理資料庫,求共借出多少種圖書。請對下面的SQL語句填空:
    SELECT _______ FROM 借閱
    第一套題答案
    選擇題
    1-5 CCBAD 6-10 BDBCA 11-15 DCBAA 16-20 BAABA 21-25 CCBBA 26-30 BBCCB 31-35DDAAB
    填空題
    36.時間 37.模式或邏輯模式 38.黑盒 39. 一對多 或 1對多 或 一對n或 1:N 或1:n 或 1:n 或 1:N 或 一對m 或 1:M 或 1:m 或 1:m 或 1:N 40. 投影 41.1542. Into cursor 或 Into cursor cursorname 43. 頁面設定或 列數 44. 應用程式生成器 45. 資料庫管理系統 或 DBMS 46. 聯接型別 或 聯接條件 47. CREATE TABLE 借閱 (借書證號 C(4),總編號C(6),借書日期 D(8)) 或 CREA TABL 借閱 (借書證號 C(4),總編號C(6),借書日期D(8)) 或 CREATE TABLE 借閱 (借書證號 C(4),總編號C(6),借書日期 D) 或 CREA TABL 借閱 (借書證號 C(4),總編號C(6),借書日期 D) 48. 單價=;

ALL (SELECT 工資 FROM 教師 WHERE 系號=”02″)

與如上語句等價的SQL語句是______。

A、SELECT DISTINCT 系號 FROM 教師 WHERE工資>=;

(SELECT MAX(工資) FROM 教師 WHERE 系號=”02″)

B、SELECT DISTINCT 系號 FROM 教師 WHERE 工資>=;

(SELECT MIN(工資) FROM 教師 WHERE 系號=”02″)

C、SELECT DISTINCT 系號 FROM 教師 WHERE 工資>=;

ANY(SELECT 工資 FROM 教師 WHERE 系號=”02″)

D、SELECT DISTINCT 系號 FROM 教師 WHERE 工資>=;

SOME (SELECT 工資 FROM 教師 WHERE 系號=”02″)

二、 填空題

  1. 若按功能劃分,軟體測試的方法通常分為白盒測試方法和______測試方法。

  2. 資料庫系統的三級模式分別為______模式、內部級模式與外部級模式。

  3. 在最壞情況下,氣泡排序的時間複雜度為______。

  4. 在物件導向方法中,資訊隱蔽是通過物件的______性來實現的。

  5. 關係模型的資料操縱即是建立在關係上的資料操縱,一般有______、增加、刪除和修改四種操作。

41.要把幫助檔案設定為複製到硬碟上的Foxhelp.chm檔案,需要在”選項”對話方塊的______選項卡上設定。

  1. TIME( )的返回值的資料型別是______型別。

  2. 在定義欄位有效性規則中,在規則框中輸入的表示式中型別是________。

  3. 設計報表通常包括兩部分內容:______和佈局。

  4. ______是指只有滿足聯接條件的記錄才包含在查詢結果中。

  5. 設有圖書管理資料庫:

圖書(總編號C(6),分類號C(8),書名C(16),作者C(6),出版單位C(20),單價N(6,2))

讀者(借書證號C(4),單位C(8),姓名C(6),性別C(2),職稱C(6),地址C(20))

借閱(借書證號C(4),總編號C(6),借書日期D(8))

檢索書價在15元至25元(含15元和25元)之間的圖書的書名、作者、書價和分類號,結果按分類號升序排序。

SELECT 書名,作者,單價,分類號 FROM 圖書;

WHERE______;

ORDER BY______;

  1. 設有如下關係表R、S和T:

R(BH,XM,XB,DWH)

S(SWH,DWM)

T(BH,XM,XB,DWH)

實現R∪T的SQL語句是_______。

  1. 設有如下關係表R:

R(NO,NAME,SEX,AGE,CLASS)

主關鍵字是NO

其中NO為學號,NAME為姓名,SEX為性別,AGE為年齡,CLASS為班號。寫出實現下列功能的SQL語句。

插入”95031″班學號為30,姓名為”鄭和”的學生記錄;_______。

  1. 設有如下關係表R:

R(NO,NAME,SEX,AGE,CLASS)

主關鍵字是NO

其中NO為學號(數值型),NAME為姓名,SEX為性別,AGE為年齡,CLASS為班號。寫出實現下列功能的SQL語句。

刪除學號為20的學生記錄;______。

第二套題答案

1-5 CBBDD 6-10 CBBCC 11-15 DDCCA 16-20 DCBCA 21-25 BBDAC26-30 CDCBD 31-35 ACBBA

36.黑盒 37.概念或概念級 38.n(n-1)/2 39.封裝 40.查詢 41.檔案位置 42.字元 或 C43.邏輯表示式

44.資料來源 45.內部聯接

  1. 單價 BETWEEN 15 AND 25 或 單價 BETW 15 AND 25 或 單價 BETWE 15 AND 25 或單價>=15 and 單價=15 and 單價=15 and 單價15 and 單價=

  2. SELECT * FROM R UNION SELECT * FROM T 或 SELE * FROM R UNIO SELE * FROM T 或 SELECT FROM R UNIO SELECT * FROM T 或 SELE * FROM R UNION SELE FROM T

  3. INSERT INTO R(NO,NAME,CLASS) VALUES(30,”鄭和”,”95031″) 或 INSE INTO R(NO,NAME,CLASS)VALUES(30,”鄭和”,”95031″)

  4. DELETE FROM R WHERE NO=20 或DELE FROM R WHERE NO=20 或 DELE FROM R WHER NO=20 或 DELETE FROM R WHER NO=20

Oracle 面試題集錦-技術篇

  1. 解釋冷備份和熱備份的不同點以及各自的優點

解答:熱備份針對歸檔模式的資料庫,在資料庫仍舊處於工作狀態時進行備份。而冷備份指在資料庫關閉後,進行備份,適用於所有模式的資料庫。熱備份的 優點在於當備份時,資料庫仍舊可以被使用並且可以將資料庫恢復到任意一個時間點。冷備份的優點在於它的備份和恢復操作相當簡單,並且由於冷備份的資料庫可以工作在非歸檔模式下,資料庫效能會比歸檔模式稍好。(因為不必將archive log寫入硬碟)

  1. 你必須利用備份恢復資料庫,但是你沒有控制檔案,該如何解決問題呢?

解答:重建控制檔案,用帶backup control file 子句的recover命令恢復

資料庫。

  1. 如何轉換init.ora到spfile?

解答:使用create spfile from pfile 命令.

  1. 解釋data block , extent 和 segment的區別(這裡建議用英文術語)

解答:data block是資料庫中最小的邏輯儲存單元。當資料庫的物件需要更多的物理儲存空間時,連續的data block就組成了extent . 一個資料庫物件

擁有的所有extents被稱為該物件的segment.

  1. 給出兩個檢查表結構的方法

解答:1。DESCRIBE命令

  1. DBMS_METADATA.GET_DDL 包

  2. 怎樣檢視資料庫引擎的報錯

解答:alert log.

  1. 比較truncate和delete 命令

解答:兩者都可以用來刪除表中所有的記錄。區別在於:truncate是DDL操作,它移動HWK,不需要 rollback segment .而Delete是DML操作, 需要rollback segment 且花費較長時間.

  1. 使用索引的理由

解答:快速訪問表中的data block

  1. 給出在STAR SCHEMA中的兩種表及它們分別含有的資料

解答:Fact tables 和dimension tables.fact table 包含大量的主要的資訊而 dimension tables 存放對fact table 某些屬性描述的資訊

  1. FACT Table上需要建立何種索引?

解答:點陣圖索引 (bitmap index)

  1. 給出兩種相關約束?

解答:主鍵和外來鍵

  1. 如何在不影響子表的前提下,重建一個母表

解答:子表的外來鍵強制實效,重建母表,啟用外來鍵

  1. 解釋歸檔和非歸檔模式之間的不同和它們各自的優缺點

解答:歸檔模式是指你可以備份所有的資料庫 transactions並恢復到任意一個時間點。非歸檔模式則相反,不能恢復到任意一個時間點。但是非歸檔模式可以帶來資料庫效能上的少許提高.

  1. 如何建立一個備份控制檔案?

解答:Alter database backup control file to trace.

  1. 給出資料庫正常啟動所經歷的幾種狀態 ?

解答:

STARTUP NOMOUNT – 資料庫例項啟動

STARTUP MOUNT – 資料庫裝載

STARTUP OPEN – 資料庫開啟

  1. 哪個column可以用來區別VGV檢視和GV檢視?

解答: INST_ID 指明叢集環境中具體的 某個instance 。

  1. 如何生成explain plan?

解答:執行utlxplan.sql. 建立plan 表

針對特定SQL語句,使用 explain plan set statement_id= ‘tst1′ into plan_table

執行utlxplp.sql 或 utlxpls.sql察看explain plan

  1. 如何增加buffer cache的命中率?

解答:在資料庫較繁忙時,適用buffer cache advisory 工具,查詢v$db_cache_advice . 如果有必要更改,可以使用 altersystem set db_cache_size 命令

  1. ORA-01555的應對方法?

解答:具體的出錯資訊是snapshot too old within rollback seg , 通常可以通過

增大rollback seg來解決問題。當然也需要察看一下具體造成錯誤的SQL文字

  1. 解釋ORACLEHOMEORACLE_HOME和ORACLE_BASE的區別?

解答:ORACLE_BASE是oracle的根目錄,ORACLE_HOME是oracle產品的目錄。

  1. 如何判斷資料庫的時區?

解答:SELECT DBTIMEZONE FROM DUAL;

  1. 解釋GLOBAL_NAMES設為TRUE的用途

解答:GLOBAL_NAMES指明聯接資料庫的方式。如果這個引數設定為TRUE,在建立資料庫連結時就必須用相同的名字連結遠端資料庫

23。如何加密PL/SQL程式?

解答:WRAP

  1. 解釋FUNCTION,PROCEDURE和PACKAGE區別

解答:function 和procedure是PL/SQL程式碼的集合,通常為了完成一個任務。procedure 不需要返回任何值而function將返回一個值在另一

方面,Package是為了完成一個商業功能的一組function和proceudre的集合

  1. 解釋TABLE Function的用途

解答:TABLE Function是通過PL/SQL邏輯返回一組紀錄,用於普通的表/檢視。他們也用於pipeline和ETL過程。

  1. 舉出3種可以收集three advisory statistics

解答:Buffer Cache Advice, Segment Level Statistics, TimedStatistics

  1. Audit trace 存放在哪個oracle目錄結構中?

解答:unix $ORACLE_HOME/rdbms/audit Windows the event viewer

  1. 解釋materialized views的作用

解答:Materialized views 用於減少那些彙總,集合和分組的資訊的集合數量。它們通常適合於資料倉儲和DSS系統。

  1. 當使用者程式出錯,哪個後臺程式負責清理它

解答: PMON

  1. 哪個後臺程式重新整理materialized views?

解答:The Job Queue Processes.

  1. 如何判斷哪個session正在連結以及它們等待的資源?

解答:VSESSION/VSESSION / VSESSION_WAIT

  1. 描述什麼是 redo logs

解答:Redo Logs 是用於存放資料庫資料改動狀況的物理和邏輯結構。可以用來修復資料庫.

  1. 如何進行強制LOG SWITCH?

解答:ALTER SYSTEM SWITCH LOGFILE;

  1. 舉出兩個判斷DDL改動的方法?

解答:你可以使用 Logminer 或 Streams

  1. Coalescing做了什麼?

解答:Coalescing針對於字典管理的tablespace進行碎片整理,將臨近的小extents合併成單個的大extent.

  1. TEMPORARY tablespace和PERMANENTtablespace 的區別是?

解答:A temporary tablespace 用於臨時物件例如排序結構而 permanent tablespaces用來儲存那些’真實’的物件(例如表,回滾段等)

  1. 建立資料庫時自動建立的tablespace名稱?

解答:SYSTEM tablespace.

  1. 建立使用者時,需要賦予新使用者什麼許可權才能使它聯上資料庫。

解答:CONNECT

  1. 如何在tablespace裡增加資料檔案?

解答:ALTER TABLESPACE ADD DATAFILE SIZE

  1. 如何變動資料檔案的大小?

解答:ALTER DATABASE DATAFILE RESIZE ;

  1. 哪個VIEW用來檢查資料檔案的大小?

解答: DBA_DATA_FILES

  1. 哪個VIEW用來判斷tablespace的剩餘空間

解答:DBA_FREE_SPACE

  1. 如何判斷誰往表裡增加了一條紀錄?

解答:auditing

  1. 如何重構索引?

解答: ALTER INDEX REBUILD;

  1. 解釋什麼是Partitioning(分割槽)以及它的優點。

解答:Partition將大表和索引分割成更小,易於管理的分割槽。

  1. 你剛剛編譯了一個PL/SQL Package但是有錯誤報導,如何顯示出錯資訊?

解答:SHOW ERRORS

  1. 如何蒐集表的各種狀態資料?

解答: ANALYZE

The ANALYZE command.

  1. 如何啟動SESSION級別的TRACE

解答: DBMS_SESSION.SET_SQL_TRACE

ALTER SESSION SET SQL_TRACE = TRUE;

  1. IMPORT和SQL*LOADER 這2個工具的不同點

解答:這兩個ORACLE工具都是用來將資料匯入資料庫的。

區別是:IMPORT工具只能處理由另一個ORACLE工具EXPORT生成

的資料。而SQL*LOADER可以匯入不同的ASCII格式的資料來源

50。用於網路連線的2個檔案?

解答: TNSNAMES.ORA and SQLNET.ORA

資料庫面試題目(一)

一:SQL tuning 類

  1. 列舉幾種表連線方式
    Answer:等連線(內連線)、非等連線、自連線、外連線(左、右、全)

Or hash join/merge join/nest loop(cluster join)/index join ??

ORACLE 8i,9i 表連線方法。

一般的相等連線: select * from a, b where a.id = b.id; 這個就屬於內連線。

對於外連線:

Oracle中可以使用“(+) ”來表示,9i可以使用LEFT/RIGHT/FULL OUTER JOIN

LEFT OUTER JOIN:左外關聯

SELECT e.last_name, e.department_id, d.department_name

FROM employees e

LEFT OUTER JOIN departments d

ON (e.department_id = d.department_id);

等價於

SELECT e.last_name, e.department_id, d.department_name

FROM employees e, departments d

WHERE e.department_id=d.department_id(+)

結果為:所有員工及對應部門的記錄,包括沒有對應部門編號department_id的員工記錄。

RIGHT OUTER JOIN:右外關聯

SELECT e.last_name, e.department_id, d.department_name

FROM employees e

RIGHT OUTER JOIN departments d

ON (e.department_id = d.department_id);

等價於

SELECT e.last_name, e.department_id, d.department_name

FROM employees e, departments d

WHERE e.department_id(+)=d.department_id

結果為:所有員工及對應部門的記錄,包括沒有任何員工的部門記錄。

FULL OUTER JOIN:全外關聯

SELECT e.last_name, e.department_id, d.department_name

FROM employees e

FULL OUTER JOIN departments d

ON (e.department_id = d.department_id);

結果為:所有員工及對應部門的記錄,包括沒有對應部門編號department_id的員工記錄和沒有任何員工的部門記錄。

ORACLE8i是不直接支援完全外連線的語法,也就是說不能在左右兩個表上同時加上(+),下面是在ORACLE8i可以參考的完全外連線語法

select t1.id,t2.id from table1 t1,table t2 wheret1.id=t2.id(+)

union

select t1.id,t2.id from table1 t1,table t2 wheret1.id(+)=t2.id

連線型別
定義
圖示
例子

內連線
只連線匹配的行

select A.c1,B.c2 from A join B on A.c3 = B.c3;

左外連線
包含左邊表的全部行(不管右邊的表中是否存在與它們匹配的行)以及右邊表中全部匹配的行

select A.c1,B.c2 from A left join B on A.c3 = B.c3;

右外連線
包含右邊表的全部行(不管左邊的表中是否存在與它們匹配的行)以及左邊表中全部匹配的行

select A.c1,B.c2 from A right join B on A.c3 = B.c3;

全外連線
包含左、右兩個表的全部行,不管在另一邊的表中是否存在與它們匹配的行

select A.c1,B.c2 from A full join B on A.c3 = B.c3;

(theta)連線
使用等值以外的條件來匹配左、右兩個表中的行

select A.c1,B.c2 from A join B on A.c3 != B.c3;

交叉連線
生成笛卡爾積——它不使用任何匹配或者選取條件,而是直接將一個資料來源中的每個行與另一個資料來源的每個行一一匹配

select A.c1,B.c2 from A,B;

  1. 不借助第三方工具,怎樣檢視sql的執行計劃
    I) 使用Explain Plan,查詢PLAN_TABLE;

EXPLAIN PLAN

SET STATEMENT_ID=’QUERY1′

FOR

SELECT *

FROM a

WHERE aa=1;

SELECT operation, options, object_name, object_type, ID,parent_id

FROM plan_table

WHERE STATEMENT_ID = ‘QUERY1′

ORDER BY ID;

II)SQLPLUS中的SET TRACE 即可看到Execution Plan Statistics

SET AUTOTRACE ON;

  1. 如何使用CBO,CBO與RULE的區別
    IF 初始化引數 OPTIMIZER_MODE = CHOOSE THEN –(8I DEFAULT)

IF 做過表分析

THEN 優化器 Optimizer=CBO(COST); /高效/

ELSE

優化器 Optimizer=RBO(RULE); /高效/

END IF;

END IF;

區別:

RBO根據規則選擇最佳執行路徑來執行查詢。

CBO根據表統計找到最低成本的訪問資料的方法確定執行計劃。

使用CBO需要注意:

I) 需要經常對錶進行ANALYZE命令進行分析統計;

II) 需要穩定執行計劃;

III)需要使用提示(Hint);

使用RULE需要注意:

I) 選擇最有效率的表名順序

II) 優化SQL的寫法;

在optimizer_mode=choose時,如果表有統計資訊(分割槽表外),優化器將選擇CBO,否則選RBO。

RBO遵循簡單的分級方法學,使用15種級別要點,當接收到查詢,優化器將評估使用到的要點數目,然後選擇最佳級別(最少的數量)的執行路徑來執行查詢。

CBO嘗試找到最低成本的訪問資料的方法,為了最大的吞吐量或最快的初始響應時間,計算使用不同的執行計劃的成本,並選擇成本最低的一個,關於表的資料內容的統計被用於確定執行計劃。

  1. 如何定位重要(消耗資源多)的SQL
    使用CPU多的使用者session

SELECT a.SID, spid, status, SUBSTR (a.program, 1, 40) prog,a.terminal,a.SQL_TEXT, osuser, VALUE / 60 / 100 VALUE

FROM vsessiona,vsession a, vprocess b, v$sesstat c

WHERE c.statistic# = 12 AND c.SID = a.SID AND a.paddr =b.addr

ORDER BY VALUE DESC;

select sql_text from v$sql

where disk_reads > 1000 or (executions > 0 andbuffer_gets/executions > 30000);

  1. 如何跟蹤某個session的SQL
    利用TRACE 跟蹤

ALTER SESSION SET SQLTRACE ON;

COLUMN SQL format a200;

SELECT machine, sql_text SQL

FROM vsqltexta,vsqltext a, vsession b

WHERE address = sql_address

AND machine = ‘&A’

ORDER BY hash_value, piece;

execdbms_system.set_sql_trace_in_session(sid,serial#,&sql_trace);

select sid,serial# from vsessionwheresid=(selectsidfromvsession where sid = (select sidfrom vmystat where rownum = 1);

execdbms_system.set_ev(&sid,&serial#,&event_10046,&level_12,”);

  1. SQL調整最關注的是什麼
    檢查系統的I/O問題

sar-d能檢查整個系統的iostat(IO statistics)

檢視該SQL的response time(db blockgets/consistent gets/physical reads/sorts (disk))

  1. 說說你對索引的認識(索引的結構、對dml影響、對查詢影響、為什麼提高查詢效能)
    索引有B-TREE、BIT、CLUSTER等型別。ORACLE使用了一個複雜的自平衡B-tree結構;通常來說,在表上建立恰當的索引,查詢時會改 進查詢效能。但在進行插入、刪除、修改時,同時會進行索引的修改,在效能上有一定的影響。有索引且查詢條件能使用索引時,資料庫會先度取索引,根據索引內容和查詢條件,查詢出ROWID,再根據ROWID取出需要的資料。由於索引內容通常比全表內容要少很多,因此通過先讀索引,能減少I/O,提高查詢性 能。

b-tree index/bitmap index/function index/patitionalindex(local/global)索引通常能提高select/update/delete的效能,會降低insert的速度,

  1. 使用索引查詢一定能提高查詢的效能嗎?為什麼
    通常,通過索引查詢資料比全表掃描要快.但是我們也必須注意到它的代價.

索引需要空間來儲存,也需要定期維護, 每當有記錄在表中增減或索引列被修改時,索引本身也會被修改. 這意味著每條記錄的INSERT,DELETE,UPDATE將為此多付出4,5 次的磁碟I/O. 因為索引需要額外的儲存空間和處理,那些不必要的索引反而會使查詢反應時間變慢.使用索引查詢不一定能提高查詢效能,索引範圍查詢(INDEX RANGE SCAN)適用於兩種情況:

基於一個範圍的檢索,一般查詢返回結果集小於表中記錄數的30%宜採用;

基於非唯一性索引的檢索

索引就是為了提高查詢效能而存在的,如果在查詢中索引沒有提高效能,只能說是用錯了索引,或者講是場合不同

  1. 繫結變數是什麼?繫結變數有什麼優缺點?
    繫結變數是指在SQL語句中使用變數,改變變數的值來改變SQL語句的執行結果。

優點:使用繫結變數,可以減少SQL語句的解析,能減少資料庫引擎消耗在SQL語句解析上的資源。提高了程式設計效率和可靠性。減少訪問資料庫的次數, 就能實際上減少ORACLE的工作量。

缺點:經常需要使用動態SQL的寫法,由於引數的不同,可能SQL的執行效率不同;

繫結變數是相對文字變數來講的,所謂文字變數是指在SQL直接書寫查詢條件,

這樣的SQL在不同條件下需要反覆解析,繫結變數是指使用變數來代替直接書寫條件,查詢bind value在執行時傳遞,然後繫結執行。

優點是減少硬解析,降低CPU的爭用,節省shared_pool

缺點是不能使用histogram,sql優化比較困難

  1. 如何穩定(固定)執行計劃
    可以在SQL語句中指定執行計劃。使用HINTS;

query_rewrite_enabled = true

star_transformation_enabled = true

optimizer_features_enable =9.2.0

建立並使用stored outline

  1. 和排序相關的記憶體在8i和9i分別怎樣調整,臨時表空間的作用是什麼
    SORT_AREA_SIZE 在進行排序操作時,如果排序的內容太多,記憶體裡不能全部放下,則需要進行外部排序,

此時需要利用臨時表空間來存放排序的中間結果。

8i中sort_area_size/sort_area_retained_size決定了排序所需要的記憶體,如果排序操作不能在sort_area_size中完成,就會用到temp表空間

9i中如果workarea_size_policy=auto時,

排序在pga內進行,通常pga_aggregate_target的1/20可以用來進行disk sort;

如果workarea_size_policy=manual時,排序需要的記憶體由sort_area_size決定, 在執行order by/groupby/distinct/union/create index/index rebuild/minus等操作時,如果在pga或sort_area_size中不能完成,排序將在臨時表空間進行(disk sort),臨時表空間主要作用就是完成系統中的disk sort.

  1. 存在表T(a,b,c,d),要根據欄位c排序後取第21—30條記錄顯示,請給出sql
    SELECT *

FROM (SELECT ROWNUM AS row_num, tmp_tab.*

FROM (SELECT a, b, c, d

FROM T

ORDER BY c) tmp_tab

WHERE ROWNUM= 20

ORDER BY row_num;

create table t(a number(,b number(,c number(,d number();

/

begin

for i in 1 … 300 loop

insert into tvalues(mod(i,2),i/2,dbms_random.value(1,300),i/4);

end loop;

end;

/

select * from (select c.*,rownum as rn from (select * fromt order by c desc) c) where rn between 21 and 30;

/

select * from (select * from test order by c desc) x whererownum < 30

minus

select * from (select * from test order by c desc) y whererownum < 20 order by 3 desc

相比之 minus效能較差

二:資料庫基本概念類
1 Pctused and pctfree 表示什麼含義有什麼作用
pctused與pctfree控制資料塊是否出現在freelist中, pctfree控制資料塊中保留用於update的空間,當資料塊中的free space小於pctfree設定的空間時,該資料塊從freelist中去掉,當塊由於dml操作free space大於pct_used設定的空間時,該資料庫塊將被新增在freelist連結串列中。

2 簡單描述tablespace / segment / extent/ block之間的關係
tablespace: 一個資料庫劃分為一個或多個邏輯單位,該邏輯單位成為表空間;每一個表空間可能包含一個或多個 Segment;

Segments: Segment指在tablespace中為特定邏輯儲存結構分配的空間。每一個段是由一個或多個extent組成。包括資料段、索引段、回滾段和臨時段。

Extents: 一個 extent 由一系列連續的 Oracle blocks組成.ORACLE為通過extent 來給segment分配空間。

Data Blocks:Oracle 資料庫最小的I/O儲存單位,一個data block對應一個或多個分配給data file的作業系統塊。

table建立時,預設建立了一個data segment,每個data segment含有min extents指定的extents數,每個extent據據表空間的儲存引數分配一定數量的blocks

3 描述tablespace和datafile之間的關係
一個表空間可包含一個或多個資料檔案。表空間利用增加或擴充套件資料檔案擴大表空間,表空間的大小為組成該表空間的資料檔案大小的和。一個datafile只能屬於一個表空間;

一個tablespace可以有一個或多個datafile,每個datafile只能在一個tablespace內, table中的資料,通過hash演算法分佈在tablespace中的各個datafile中,tablespace是邏輯上的概念,datafile則 在物理上儲存了資料庫的種種物件。

4 本地管理表空間和字典管理表空間的特點,ASSM有什麼特點
本地管理表空間:(9i預設)空閒塊列表儲存在表空間的資料檔案頭。

特點:減少資料字典表的競爭,當分配和收縮空間時會產生回滾,不需要合併。

字典管理表空間:(8i預設)空閒塊列表儲存在資料庫中的字典表裡.

特點:片由資料字典管理,可能造成字典表的爭用。儲存在表空間的每一個段都會有不同的儲存字句,需要合併相鄰的塊;

本地管理表空間(Locally Managed Tablespace簡稱LMT)

8i以後出現的一種新的表空間的管理模式,通過點陣圖來管理表空間的空間使用。字典管理表空間(Dictionary-Managed Tablespace簡稱DMT)

8i以前包括以後都還可以使用的一種表空間管理模式,通過資料字典管理表空間的空間使用。動段空間管理(ASSM),它首次出現在Oracle920裡有了ASSM,連結列表freelist被點陣圖所取代,它是一個二進位制的陣列,

能夠迅速有效地管理儲存擴充套件和剩餘區塊(free block),因此能夠改善分段儲存本質,ASSM表空間上建立的段還有另外一個稱呼叫Bitmap Managed Segments(BMB 段)。

5 回滾段的作用是什麼
回滾段用於儲存資料修改前的映象,這些資訊用於生成讀一致性資料庫資訊、在資料庫恢復和Rollback時使用。一個事務只能使用一個回滾段。

事務回滾:當事務修改表中資料的時候,該資料修改前的值(即前影像)會存放在回滾段中,當使用者回滾事務(ROLLBACK)時,ORACLE將會利用回滾段中的資料前影像來將修改的資料恢復到原來的值。

事務恢復:當事務正在處理的時候,例程失敗,回滾段的資訊儲存在undo表空間中,ORACLE將在下次開啟資料庫時利用回滾來恢復未提交的資料。

讀一致性:當一個會話正在修改資料時,其他的會話將看不到該會話未提交的修改。 當一個語句正在執行時,該語句將看不到從該語句開始執行後的未提交的修改(語句級讀一致性)

當ORACLE執行SELECT語句時,ORACLE依照當前的系統改變號(SYSTEM CHANGE NUMBER-SCN)來保證任何前於當前SCN的未提交的改變不被該語句處理。可以想象:當一個長時間的查詢正在執行時, 若其他會話改變了該查詢要查詢的某個資料塊,ORACLE將利用回滾段的資料前影像來構造一個讀一致性檢視

6 日誌的作用是什麼
日誌檔案(Log File)記錄所有對資料庫資料的修改,主要是保護資料庫以防止故障,以及恢復資料時使用。其特點如下:

a)每一個資料庫至少包含兩個日誌檔案組。每個日誌檔案組至少包含兩個日誌檔案成員。

b)日誌檔案組以迴圈方式進行寫操作。

c)每一個日誌檔案成員對應一個物理檔案。

記錄資料庫事務,最大限度地保證資料的一致性與安全性

重做日誌檔案:含對資料庫所做的更改記錄,這樣萬一出現故障可以啟用資料恢復,一個資料庫至少需要兩個重做日誌檔案

歸檔日誌檔案:是重做日誌檔案的離線副本,這些副本可能對於從介質失敗中進行恢復很必要。

7 SGA主要有那些部分,主要作用是什麼
系統全域性區(SGA):是ORACLE為例項分配的一組共享緩衝儲存區,用於存放資料庫資料和控制資訊,以實現對資料庫資料的管理和操作。

SGA主要包括:

a)共享池(shared pool) :用來儲存最近執行的SQL語句和最近使用的資料字典的資料。

b)資料緩衝區 (database buffer cache):用來儲存最近從資料檔案中讀寫過的資料。

c)重作日誌緩衝區(redo log buffer):用來記錄服務或後臺程式對資料庫的操作。

另外在SGA中還有兩個可選的記憶體結構:

d)Java pool: 用來儲存Java程式碼。

e)Large pool: 用來儲存不與SQL直接相關的大型記憶體結構。備份、恢復使用。

GA:db_cache/shared_pool/large_pool/java_pool

db_cache: 資料庫快取(Block Buffer)對於Oracle資料庫的運轉和效能起著非常關鍵的作用,它佔據Oracle資料庫SGA(系統共享記憶體區)的主要部分。Oracle資料 庫通過使用LRU演算法,將最近訪問的資料塊存放到快取中,從而優化對磁碟資料的訪問.

shared_pool: 共享池的大小對於Oracle 效能來說都是很重要的。共享池中儲存資料字典高速緩衝和完全解析或編譯的的PL/SQL 塊和SQL 語句及控制結構

large_pool: 使用MTS配置時,因為要在SGA中分配UGA來保持使用者的會話,就是用Large_pool來保持這個會話記憶體使用RMAN做備份的時候,要使用Large_pool這個記憶體結構來做磁碟I/O快取器

java_pool: 為java procedure預備的記憶體區域,如果沒有使用java proc,java_pool不是必須的

8 Oracle系統程式主要有哪些,作用是什麼
資料寫程式(DBWR):負責將更改的資料從資料庫緩衝區快取記憶體寫入資料檔案

日誌寫程式(LGWR):將重做日誌緩衝區中的更改寫入線上重做日誌檔案

系統監控 (SMON): 檢查資料庫的一致性如有必要還會在資料庫開啟時啟動資料庫的恢復

程式監控 (PMON): 負責在一個Oracle 程式失敗時清理資源

檢查點程式(CKPT):負責在每當緩衝區快取記憶體中的更改永久地記錄在資料庫中時,更新控制檔案和資料檔案中的資料庫狀態資訊。

歸檔程式 (ARCH):在每次日誌切換時把已滿的日誌組進行備份或歸檔

恢復程式 (RECO): 保證分散式事務的一致性,在分散式事務中,要麼同時commit,要麼同時rollback;

作業排程器(CJQ ): 負責將排程與執行系統中已定義好的job,完成一些預定義的工作.

三:備份恢復類
1 備份如何分類
邏輯備份:exp/imp 指定表的邏輯備份

物理備份:

熱備份:alter tablespace begin/end backup;

冷備份:離線備份(database shutdown)

RMAN備份

full backup/incremental backup(累積/差異)

物理備份

物理備份是最主要的備份方式。用於保證資料庫在最小的資料庫丟失或沒有資料丟失的情況下得到恢復。

冷物理

冷物理備份提供了最簡單和最直接的方法保護資料庫因物理損壞丟失。建議在以下幾種情況中使用。

對一個已經存在大最資料量的資料庫,在晚間資料庫可以關閉,此時應用冷物理備份。

對需對資料庫伺服器進行升級,(如更換硬碟),此時需要備份資料庫資訊,並在新的硬碟中恢復這些資料資訊,建議採用冷物理備份。

熱物理

主要是指備份過程在資料庫開啟並且使用者可以使用的情況下進行。需要執行熱物理備份的情況有:

由於資料庫性質要求不間斷工作,因而此時只能採用熱物理備份。

由於備份的要求的時間過長,而資料庫只能短時間關閉時。

邏輯備份 (EXP/IMP)

邏輯備份用於實現資料庫物件的恢復。但不是基於時間點可完全恢復的備份策略。只能作為聯機備份和離線備份的一種補充。

完全邏輯備份

完全邏輯備份是將整個資料庫匯出到一個資料庫的格式檔案中,該檔案可以在不同的資料庫版本、作業系統和硬體平臺之間進行移植。

指定表的邏輯備份

通過備份工具,可以將指定的資料庫表備份出來,這可以避免完全邏輯備份所帶來的時間和財力上的浪費。

2 歸檔是什麼含義
關於歸檔日誌:Oracle要將填滿的線上日誌檔案組歸檔時,則要建立歸檔日誌(archived redo log)。其對資料庫備份和恢復有下列用處:

資料庫後備以及線上和歸檔日誌檔案,在作業系統和磁碟故障中可保證全部提交的事物可被恢復。

在資料庫開啟和正常系統使用下,如果歸檔日誌是永久儲存,線上後備可以進行和使用。

資料庫可執行在兩種不同方式下:NOARCHIVELOG方式或ARCHIVELOG方式

資料庫在NOARCHIVELOG方式下使用時,不能進行線上日誌的歸檔,

資料庫在ARCHIVELOG方式下執行,可實施線上日誌的歸檔

歸檔是歸檔當前的聯機redo日誌檔案。

SVRMGR> alter system archive log current;

資料庫只有執行在ARCHIVELOG模式下,並且能夠進行自動歸檔,才可以進行聯機備份。有了聯機備份才有可能進行完全恢復。

3 如果一個表在2004-08-04 10:30:00 被drop,在有完善的歸檔和備份的情況下,如何恢復
9i 新增的FLASH BACK 應該可以;

Logminer應該可以找出DML。

有完善的歸檔和備份,先歸檔當前資料,然後可以先恢復到刪除的時間點之前,把DROP 的表匯出來,然後再恢復到最後歸檔時間;

手工拷貝回所有備份的資料檔案

Sql〉startup mount;

sql〉alter database recoverautomatic until time ’2004-08-04:10:30:00′;

sql〉alter database open resetlogs;

4 rman是什麼,有何特點
RMAN(Recovery Manager)是DBA的一個重要工具,用於備份、還原和恢復oracle資料庫, RMAN 可以用來備份和恢復資料庫檔案、歸檔日誌、控制檔案、系統引數檔案,也可以用來執行完全或不完全的資料庫恢復。

RMAN有三種不同的使用者介面:COMMAND LINE方式、GUI 方式(整合在OEM 中的備份管理器)、API 方式(用於整合到第三方的備份軟體中)。

具有如下特點:

1)功能類似物理備份,但比物理備份強大N倍;

2)可以壓縮空塊;

3)可以在塊水平上實現增量;

4)可以把備份的輸出打包成備份集,也可以按固定大小分割備份集;

5)備份與恢復的過程可以自動管理;

6)可以使用指令碼(存在Recovery catalog 中)

7)可以做壞塊監測

5 standby的特點
備用資料庫(standby database):ORACLE推出的一種高可用性(HIGH AVAILABLE)資料庫方案,在主節點與備用節點間通過日誌同步來保證資料的同步,備用節點作為主節點的備份,可以實現快速切換與災難性恢復,從 920開始,還開始支援物理與邏輯備用伺服器。

9i中的三種資料保護模式分別是:

1)、MAXIMIZE PROTECTION :最大資料保護與無資料分歧,LGWR將同時傳送到備用節點,在主節點事務確認之前,備用節點也必須完全收到日誌資料。如果網路不好,引起LGWR不能傳送資料,將引起嚴重的效能問題,導致主節點DOWN機。

2)、MAXIMIZE AVAILABILITY :無資料丟失模式,允許資料分歧,允許非同步傳送。

正常情況下執行在最大保護模式,在主節點與備用節點的網路斷開或連線不正常時,自動切換到最大效能模式,主節點的操作還是可以繼續的。在網路不好的情況下有較大的效能影響。

3)、MAXIMIZE PERFORMANCE:這種模式應當可以說是從8i繼承過來的備用伺服器模式,非同步傳送,無資料同步檢查,可能丟失資料,但是能獲得主節點的最大效能。9i在配置DATA GUARD的時候預設就是MAXIMIZE PERFORMANCE

6 對於一個要求恢復時間比較短的系統(資料庫50G,每天歸檔5G),你如何設計備份策略
資料庫比較大邏輯備份沒什麼必要,每天歸檔5G,每週三/週六自動歸檔10G,每月RMAN歸檔全庫。應該有standby。

rman/每月一號 level 0 每週末/週三 level 1 其它每天level2

四:系統管理類

  1. 對於一個存在系統效能的系統,說出你的診斷處理思路
    ü 做statspack收集系統相關資訊 瞭解系統大致情況/確定是否存在引數設定不合適的地方/檢視top 5 event/檢視topsql等

ü 查vsystemevent/vsystem_event/vsession_event/vsessionwaitvsession_wait從vsystem_event開始,確定需要什麼資源(db file sequential read)等,深入研究vsessionevent,vsession_event,確定等待事件涉及的會話,從vsession_wait確定詳細的資源爭用情況(p1-p3的 值:file_id/block_id/blocks等)

ü 通過vsql/vsql/vsqltext/v$sqlarea表確定disk_reads、(buffer_gets/executions)值較大的SQL

  1. 列舉幾種診斷IO、CPU、效能狀況的方法
    top uptime vmstat iostat statspack sql_trace/tkprof

查vsystemevent/vsystem_event/vsession_event/v$session_wait

查v$sqlarea(disk_reads或buffer_gets/executions較大的SQL)

或者第三方的監視工具,TOAD就不錯。

  1. 對statspack有何認識
    認識不深。僅限瞭解。StapSpack是Oracle公司提供的一個收集資料庫執行效能指標的軟體包。可以做資料庫健康檢查報告。

StapSpack是Oracle公司提供的一個收集資料庫執行效能指標的軟體包,該軟體包從8i起,在9i、10g都有顯著的增強

該軟體包的輔助表(儲存相關引數與收集的效能指標的表)由最初的25個增長到43個

收集級別引數由原來的3個(0、5、10)增加到5個(0、5、6、7、10)

通過分析收集的效能指標,資料庫管理員可以詳細地瞭解資料庫目前的執行情況,對資料庫例項、等待事件、SQL等進行優化調整

利用statspack收集的snapshot,可以統計製作資料庫的各種效能指標的統計趨勢圖表。

  1. 如果系統現在需要在一個很大的表上建立一個索引,你會考慮那些因素,如何做以儘量減小對應用的影響
    可以先表分析一下,然後測試建立索引前後對應用的效能影響;

需要考慮的是該索引列不經常更新,不是有很多重複值的情況時, 在大表中使用索引特別有效. 建立的索引可以跟資料表分不同表空間儲存。

在系統比較空閒時nologging選項(如果有dataguard則不可以使用nologging)

大的sort_ared_size或pga_aggregate_target較大

  1. 對raid10 和raid5有何認識
    RAID 10(或稱RAID 1+0)與RAID 0+1不同,它是用硬碟驅動器先組成RAID 1陣列,然後在RAID 1陣列之間再組成RAID 0陣列。

RAID 10模式同RAID 0+1模式一樣具有良好的資料傳輸效能,但卻比RAID 0+1具有更高的可靠性。RAID 10陣列的實際容量為M×n/2,磁碟利用率為50%。RAID10也需要至少4個硬碟驅動器構成,因而價格昂貴。

RAID 10的可靠性同RAID 1一樣,但由於RAID 10硬碟驅動器之間有資料分割,因而資料傳輸效能優良。

RAID 5與RAID 3很相似,不同之處在於RAID 5的奇偶校驗資訊也同資料一樣被分割儲存到所有的硬碟驅動器,而不是寫入一個指定的硬碟驅動器,從而消除了單個奇偶校驗硬碟驅動器的瓶頸問題。RAID 5磁碟陣列的效能比RAID 3有所提高,但仍然需要至少3塊硬碟驅動器。其實際容量為M×(n-1),磁碟利用率為(n-1)/n 。

五:綜合隨意類

  1. 你最擅長的是oracle哪部分?
    pl/sql及sql優化

  2. 喜歡oracle嗎?喜歡上論壇嗎?或者偏好oracle的哪一部分?
    喜歡。PL/SQL比較得心應手。

  3. 隨意說說你覺得oracle最有意思的部分或者最困難的部分
    我對資料庫的備份/恢復和效能調優經驗明顯不足,自然覺得有些困難。

基於ORACLE的研究應該是個寬廣的領域,所以我覺得還是有意思的。

  1. 為何要選擇做DBA呢?
    我對資料庫的備份/恢復和效能調優經驗明顯不足,主要是缺乏環境和交流。

因此,算不上什麼DBA。不過因此我更需要這樣的機會。

不過就整個ORACLE 來說,一直從事與它相關的工作,感情還是頗深的。放棄可惜。而且就技術本身而言我覺得自己還是有學習和創新的能力,它的諸如資料倉儲,資料探勘之類的領域也很廣。

資料庫面試題目(二)

六:Databases Questions & Answers

  1. What are two methods of retrieving SQL?

  2. What cursor type do you use to retrieve multiple recordsets?

  3. What action do you have to perform before retrieving data from the nextresult set of a stored procedure?
    Move the cursor down one row from its current position. A ResultSet cursor isinitially positioned before the first row. Before you can get to the first row,you would need to Move the cursor down by one row ( For ex: in java the firstcall to next makes the first row the current row; the second call makes thesecond row the current row, and so on).

  4. What is the basic form of a SQL statement to read dataout of a table?
    SELECT * FROM table_name;

  5. What structure can you have the database make to speedup table reads?
    The question is not correct. “What structure can you have the database make tospeed up table reads?” It is not clear what exactly the term “structure” meansin this case. Follow the rules of DB tuning we have to:

  1. properly use indexes ( different types of indexes)

  2. properly locate different DB objects across differenttablespaces, files and so on.

  3. Create a special space (tablespace) to locate some ofthe data with special datatypes( for example CLOB, LOB and …)

  1. What is a “join”?
    Joins merge the data of two related tables into a single result set, presentinga denormalized view of the data.

  2. What is a “constraint”?
    A constraint allows you to apply simple referential integrity checks to atable. There are 5 primary types of constraints that are currently supported bySQL Server:

PRIMARY/UNIQUE – enforces uniqueness of a particular tablecolumn.

DEFAULT – specifies a default value for a column in case aninsert operation does not provide one.

FOREIGN KEY – validates that every value in a column existsin a column of another table.

CHECK – checks that every value stored in a column is insome specified list

NOT NULL – is a constraint which does not allow values inthe specific column to be null. And also it is the only constraint which is nota table level constraint.

  1. What is a “primary key”?
    Primary Key is a type of a constraint enforcing uniqueness and data integrityfor each row of a table. All columns participating in a primary key constraintmust possess the NOT NULL property.

  2. What is a “functional dependency”? How does it relate todatabase table design?
    What functional dependence in the context of a database means is that: Assumethat a table exists in the database called TABLE with a composite primary key(A, B) and other non-key attributes (C, D, E). Functional dependency ingeneral, would mean that any non-key attribute – C D or E being dependent onthe primary key (A and B) in our table here.

Partial functional dependency, on the other hand, isanother corollary of the above, which states that all non-key attributes – C Dor E – if dependent on the subset of the primary key (A and B) and not on it asa whole.

Example :

———-

Fully Functional Dependent : C D E –> A B

Partial Functional dependency : C –> A, D E –> B

Hope that helps!

  1. What is a “trigger”?
    A trigger is a database object directly associated with a particular table. Itfires whenever a specific statement/type of statement is issued against thattable. The types of statements are insert, update, delete and query statements.Basically, trigger is a set of SQL statements that execute in response to adata modification/retrieval event on a table.

Other than table triggers there are also schema anddatabase triggers. These can be made to fire when new objects are created, whena user logs in, when the database shutdown etc. Table level triggers can beclassified into row and statement level triggers and those can be furtherbroken down into before and after triggers. Before triggers can modify data.

  1. What is “index covering” of a query?
    A nonclustered index that includes (or covers) all columns used in a query iscalled a covering index. When SQL server can use a nonclustered index toresolve the query, it will prefer to scan the index rather than the table,which typically takes fewer data pages. If your query uses only columnsincluded in the index, then SQL server may scan this index to produce thedesired output.

  2. What is a SQL view?
    View is a precomplied SQL query which is used to select data from one or moretables. A view is like a table but it doesn’t physically take any space. Viewis a good way to present data in a particular format if you use that queryquite often.

View can also be used to restrict users from accessing thetables directly.

A view otherwise known as a virtual table is a mere windowover the base tables in the database. This helps us gain a couple ofadvantages:

  1. Inherent security exposing only the data that is neededto be shown to the end user

  2. Views are updateable based on certain conditions. Forexample, updates can only be directed to one underlying table of the view.After modification if the rows or columns don’t comply with the conditions thatthe view was created with, those rows disappear from the view. You could usethe CHECK OPTION with the view definition, to make sure that any updates tomake the rows invalid will not be permitted to run.

  3. Views are not materialized (given a physical structure)in a database. Each time a view is queried the definition stored in thedatabase is run against the base tables to retrieve the data. One exception tothis is to create a clustered index on the view to make it persistent in thedatabase. Once you create a clustered index on the view, you can create anynumber of non-clustered indexes on the view.

  1. 儲存過程和函式的區別
    儲存過程是使用者定義的一系列sql語句的集合,涉及特定表或其它物件的任務,使用者可以呼叫儲存過程,而函式通常是資料庫已定義的方法,它接收引數並返回某種型別的值並且不涉及特定使用者表。

  2. 事務是什麼?
    事務是作為一個邏輯單元執行的一系列操作,一個邏輯工作單元必須有四個屬性,稱為 ACID(原子性、一致性、隔離性和永續性)屬性,只有這樣才能成為一個事務:

原子性:事務必須是原子工作單元;對於其資料修改,要麼全都執行,要麼全都不執行。

一致性:事務在完成時,必須使所有的資料都保持一致狀態。在相關資料庫中,所有規則都必須應用於事務的修改,以保持所有資料的完整性。事務結束時,所有的內部資料結構(如 B 樹索引或雙向連結串列)都必須是正確的。

隔離性:由併發事務所作的修改必須與任何其它併發事務所作的修改隔離。事務檢視資料時資料所處的狀態,要麼是另一併發事務修改它之前的狀態,要麼是 另一事務修改它之後的狀態,事務不會檢視中間狀態的資料。這稱為可序列性,因為它能夠重新裝載起始資料,並且重播一系列事務,以使資料結束時的狀態與原始事務執行的狀態相同。

永續性:事務完成之後,它對於系統的影響是永久性的。該修改即使出現系統故障也將一直保持。

  1. 遊標的作用?如何知道遊標已經到了最後?
    遊標用於定位結果集的行,通過判斷全域性變數@@FETCH_STATUS可以判斷是否到了最後,通常此變數不等於0表示出錯或到了最後。

  2. 觸發器分為事前觸發和事後觸發,這兩種觸發有和區別。語句級觸發和行級觸發有何區別。
    事前觸發器執行於觸發事件發生之前,而事後觸發器執行於觸發事件發生之後。通常事前觸發器可以獲取事件之前和新的欄位值。

語句級觸發器可以在語句執行前或後執行,而行級觸發在觸發器所影響的每一行觸發一次。

  1. SQL Server常用測試題(1)
    問題描述:

為管理崗位業務培訓資訊,建立3個表:

S (S#,SN,SD,SA) S#,SN,SD,SA 分別代表學號、學員姓名、所屬單位、學員年齡

C (C#,CN ) C#,CN 分別代表課程編號、課程名稱

SC ( S#,C#,G ) S#,C#,G 分別代表學號、所選修的課程編號、學習成績

  1. 使用標準SQL巢狀語句查詢選修課程名稱為’稅收基礎’的學員學號和姓名

–實現程式碼:

SELECT SN,SD FROM S

WHERE [S#] IN(SELECT [S#] FROM C,SC WHERE C.[C#]=SC.[C#]AND CN=N’稅收基礎’)

  1. 使用標準SQL巢狀語句查詢選修課程編號為’C2’的學員姓名和所屬單位

–實現程式碼:

SELECT S.SN,S.SD FROM S,SC

WHERE S.[S#]=SC.[S#] AND SC.[C#]=’C2′

  1. 使用標準SQL巢狀語句查詢不選修課程編號為’C5’的學員姓名和所屬單位

–實現程式碼:

SELECT SN,SD FROM S

WHERE [S#] NOT IN(SELECT [S#] FROM SC WHERE [C#]=’C5′)

  1. 使用標準SQL巢狀語句查詢選修全部課程的學員姓名和所屬單位

–實現程式碼:

SELECT SN,SD FROM S

WHERE [S#] IN( SELECT [S#] FROM SC RIGHT JOIN

C ON SC.[C#]=C.[C#] GROUP BY [S#]

HAVING COUNT(*)=COUNT([S#]))

  1. 查詢選修了課程的學員人數

–實現程式碼:

SELECT 學員人數=COUNT(DISTINCT [S#])FROM SC

  1. 查詢選修課程超過5門的學員學號和所屬單位

–實現程式碼:

SELECT SN,SD FROM S

WHERE [S#] IN(

SELECT [S#] FROM SC

GROUP BY [S#]

HAVING COUNT(DISTINCT [C#])>5)

  1. SQL Server常用測試題(2)
    問題描述:

已知關係模式:

S (SNO,SNAME) 學生關係。SNO 為學號,SNAME 為姓名

C (CNO,CNAME,CTEACHER) 課程關係。CNO 為課程號,CNAME 為課程名,CTEACHER 為任課教師

SC(SNO,CNO,SCGRADE) 選課關係。SCGRADE 為成績

  1. 找出沒有選修過“李明”老師講授課程的所有學生姓名

–實現程式碼:

SELECT SNAME FROM S

WHERE NOT EXISTS(

SELECT * FROM SC,C WHERE SC.CNO=C.CNO AND CNAME=’李明’ AND SC.SNO=S.SNO)

  1. 列出有二門以上(含兩門)不及格課程的學生姓名及其平均成績

–實現程式碼:

SELECT S.SNO,S.SNAME,AVG_SCGRADE=AVG(SC.SCGRADE)

FROM S,SC,(

SELECT SNO FROM SC WHERE SCGRADE=2)A WHERE S.SNO=A.SNO ANDSC.SNO=A.SNO

GROUP BY S.SNO,S.SNAME

  1. 列出既學過“1”號課程,又學過“2”號課程的所有學生姓名

–實現程式碼:

SELECT S.SNO,S.SNAME

FROM S,(SELECT SC.SNO FROM SC,C

WHERE SC.CNO=C.CNO AND C.CNAME IN(’1′,’2′)

GROUP BY SNO

HAVING COUNT(DISTINCT CNO)=2

)SC WHERE S.SNO=SC.SNO

  1. 列出“1”號課成績比“2”號同學該門課成績高的所有學生的學號

–實現程式碼:

SELECT S.SNO,S.SNAME

FROM S,(

SELECT SC1.SNO

FROM SC SC1,C C1,SC SC2,C C2

WHERE SC1.CNO=C1.CNO AND C1.NAME=’1′

AND SC2.CNO=C2.CNO AND C2.NAME=’2′

AND SC1.SCGRADE>SC2.SCGRADE

)SC WHERE S.SNO=SC.SNO

  1. 列出“1”號課成績比“2”號課成績高的所有學生的學號及其“1”號課和“2”號課的成績

–實現程式碼:

SELECT S.SNO,S.SNAME,SC.[1號課成績],SC.[2號課成績]

FROM S,(

SELECT SC1.SNO,[1號課成績]=SC1.SCGRADE,[2號課成績]=SC2.SCGRADE

FROM SC SC1,C C1,SC SC2,C C2

WHERE SC1.CNO=C1.CNO AND C1.NAME=’1′

AND SC2.CNO=C2.CNO AND C2.NAME=’2′

AND SC1.SCGRADE>SC2.SCGRADE

)SC WHERE S.SNO=SC.SNO

  1. Question 1:Can you use a batchSQL or store procedure to calculating the Number of Days in a Month
    找出當月的天數
    select datepart(dd,dateadd(dd,-1,dateadd(mm,1,cast(cast(year(getdate()) asvarchar)+’-’+cast(month(getdate()) as varchar)+’-01′ as datetime))))

  2. Question2:Can you use a SQLstatement to calculating it!
    How can I print “10 to 20″ for books that sell for between $10 and $20,”unknown” for books whose price is null, and “other” for all otherprices?

select bookid,bookname,price=case when price is null then‘unknown’

when price between 10 and 20 then ’10 to 20′ else price end
from books

  1. Question3:Can you use a SQLstatement to finding duplicate values!
    How can I find authors with the same last name?
    You can use the table authors in datatabase pubs. I want to get the result asbelow:
    Output:
    au_lname number_dups
    —————————————- ———–
    Ringer 2
    (1 row(s) affected)
    Answer 3
    select au_lname,number_dups=count(1) from authors group by au_lname
  2. Question4:Can you create a cross-tab report in mySQL Server!
    How can I get the report about sale quality for each store and each quarter andthe total sale quality for each quarter at year 1993?
    You can use the table sales and stores in datatabase pubs.
    Table Sales record all sale detail item for each store. Column store_id is theid of each store, ord_date is the order date of each sale item, and column qtyis the sale qulity. Table stores record all store information.
    I want to get the result look like as below:
    Output:
    stor_name Total Qtr1 Qtr2 Qtr3 Qtr4
    —————————————- ———– ———– ———– ———– ———–
    Barnum’s 50 0 50 0 0
    Bookbeat 55 25 30 0 0
    Doc-U-Mat: Quality Laundry and Books 85 0 85 0 0
    Fricative Bookshop 60 35 0 0 25
    Total 250 60 165 0 25

Answer 4:用動態SQL實現

  1. Question5: The Fastest Way to Recompile All StoredProcedures
    I have a problem with a database running in SQL Server 6.5 (Service Pack 4). Wemoved the database (object transfer) from one machine to another last night,and an error (specific to a stored procedure) is cropping up. However, I can’ttell which procedure is causing it. Permissions are granted in all of ourstored procedures; is there a way from the isql utility to force all storedprocedures to recompile?
    Tips: sp_recompile can recomplie a store procedure each time
    Answer 5:在執行儲存過程時,使用 withrecompile 選項強制編譯新的計劃;使用sp_recompile系統儲存過程強制在下次執行時進行重新編譯

  2. Question6: How can I add row numbers to my result set?
    In database pubs, have a table titles , now I want the result shown asbelow,each row have a row number, how can you do that?
    Result:
    line-no title_id
    ———– ——–
    1 BU1032
    2 BU1111
    3 BU2075
    4 BU7832
    5 MC2222
    6 MC3021
    7 MC3026
    8 PC1035
    9 PC8888
    10 PC9999
    11 PS1372
    12 PS2091
    13 PS2106
    14 PS3333
    15 PS7777
    16 TC3218
    17 TC4203
    18 TC7777

Answer 6:
–SQL 2005的寫法
select row_number() as line_no ,title_id from titles
–SQL 2000的寫法
select line_no identity(int,1,1),title_id into #t from titles
select * from #t
drop table #t

  1. Question 7: Can you tell me what the difference of twoSQL statements at performance of execution?

Statement 1:
if NOT EXISTS ( select * from publishers where state = ‘NY’)
begin
SELECT ‘Sales force needs to penetrate New York market’
end
else
begin
SELECT ‘We have publishers in New York’
end
Statement 2:
if EXISTS ( select * from publishers where state = ‘NY’)
begin
SELECT ‘We have publishers in New York’
end
else
begin
SELECT ‘Sales force needs to penetrate New York market’
end
Answer 7:不同點:執行時的事務數,處理時間,從客戶端到伺服器端傳送的資料量大小

  1. Question8: How can I list all California authorsregardless of whether they have written a book?
    In database pubs, have a table authors and titleauthor , table authors has acolumn state, and titleauhtor have books each author written.
    CA behalf of california in table authors.
    Answer 8:
    select * from authors where state=’CA’

  2. Question9: How can I get a list of the stores that have bought both‘bussiness’ and ‘mod_cook’ type books?
    In database pubs, use three table stores,sales and titles to implement thisrequestment. Now I want to get the result as below:
    stor_id stor_name
    ——- —————————————-

    7896 Fricative Bookshop



    Answer 9:
    select distinct a.stor_id, a.stor_name from stores a,sales b,titles c
    where a.stor_id=b.stor_id and b.title_id=c.title_id and c.type=’business’ and
    exists(select 1 from sales k,titles g where stor_id=b.stor_id
    and k.title_id=g.title_id and g.type=’mod_cook’)

  3. Question10: How can I list non-contignous data?
    In database pubs, I create a table test using statement as below, and I insertseveral row as below
    create table test
    ( id int primary key )
    go

insert into test values (1 )
insert into test values (2 )
insert into test values (3 )
insert into test values (4 )
insert into test values (5 )
insert into test values (6 )
insert into test values (8 )
insert into test values (9 )
insert into test values (11)
insert into test values (12)
insert into test values (13)
insert into test values (14)
insert into test values (18)
insert into test values (19)
go

Now I want to list the result of the non-contignous row asbelow,how can I do it?
Missing after Missing before
————- ————–
6 8
9 11

Answer 10:
select id from test t where not exists(select 1 from test where id=t.id+1)
or not exists(select 1 from test where id=t.id-1)

  1. Question11: How can I list all book with pricesgreather than the average price of books of the same type?
    In database pubs, have a table named titles , its column named price mean theprice of the book, and another named type mean the type of books.
    Now I want to get the result as below:
    type title price
    ———— ——————————————————————————– ———————
    business The Busy Executive’s Database Guide 19.9900



Answer 11:
select a.type,a.title,a.price from titles a,
(select type,price=avg(price) from titles group by type)b
where a.type=b.type and a.price>b.price

試題點評:通覽整個試題,我們不難發現,這份試題是針對SQL Server資料庫人員的。而從難度分析上來看,這份試題也屬於同類試題中比較難的了。之所以說它難,首先是限定時間的全英文試題;其次,儘管這份試題主要是考核開發能力,但卻涉及到了演算法的選擇和效能的調優;最後,這份試題還夾進了SQL Server資料庫的升級問題。因此,綜上所述,我們估計這是一家從事程式外包工作的外企招聘後臺開發或與後臺開發相關的SQL Server高階程式設計師的試題。

相關文章