數(shù)據(jù)庫基礎(chǔ)面試_第1頁
數(shù)據(jù)庫基礎(chǔ)面試_第2頁
數(shù)據(jù)庫基礎(chǔ)面試_第3頁
數(shù)據(jù)庫基礎(chǔ)面試_第4頁
數(shù)據(jù)庫基礎(chǔ)面試_第5頁
已閱讀5頁,還剩127頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、數(shù)據(jù)庫基礎(chǔ)(面試常見題)一、數(shù)據(jù)庫基礎(chǔ)1. 數(shù)據(jù)抽象:物理抽象、概念抽象、視圖級抽象,內(nèi)模式、模式、外模式2. SQL語言包括數(shù)據(jù)定義、數(shù)據(jù)操縱(Data Manipulation),數(shù)據(jù)控制(Data Control)數(shù)據(jù)定義:Create Table,Alter Table,Drop Table, Craete/Drop Index等數(shù)據(jù)操縱:Select ,insert,update,delete,數(shù)據(jù)控制:grant,revoke3. SQL常用命令:CREATE TABLE Student(ID NUMBER PRIMARY KEY,NAME VARCHAR2(50) NOT NUL

2、L);/建表CREATE VIEW view_name ASSelect * 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;/更新數(shù)據(jù)DELETE

3、FROM Tablename WHERE condition;/刪除GRANT (Select,delete,) ON (對象) TO USER_NAME WITH GRANT OPTION;/授權(quán)REVOKE (權(quán)限表) ON(對象) FROM USER_NAME WITH REVOKE OPTION /撤權(quán)列出工作人員及其領(lǐng)導的名字:Select E.NAME, S.NAME FROM EMPLOYEE E SWHERE E.SUPERName=S.Name4. 視圖:5. 完整性約束:實體完整性、參照完整性、用戶定義完整性6. 第三范式:1NF:每個屬性是不可分的。 2NF:若關(guān)系R是N

4、F,且每個非主屬性都完全函數(shù)依賴于R的鍵。例SLC(SID#, CourceID#, SNAME,Grade),則不是2NF; 3NF:若R是2NF,且它的任何非鍵屬性都不傳遞依賴于任何候選鍵。7. ER(實體/聯(lián)系)模型8. 索引作用9. 事務:是一系列的數(shù)據(jù)庫操作,是數(shù)據(jù)庫應用的基本邏輯單位。事務性質(zhì):原子性、? 原子性。即不可分割性,事務要么全部被執(zhí)行,要么就全部不被執(zhí)行。? 一致性或可串性。事務的執(zhí)行使得數(shù)據(jù)庫從一種正確狀態(tài)轉(zhuǎn)換成另一種正確狀態(tài)? 隔離性。在事務正確提交之前,不允許把該事務對數(shù)據(jù)的任何改變提供給任何其他事務,? 持久性。事務正確提交后,其結(jié)果將永久保存在數(shù)據(jù)庫中,即使在

5、事務提交后有了其他故障,事務的處理結(jié)果也會得到保存。10. 鎖:共享鎖、互斥鎖兩段鎖協(xié)議:階段:加鎖階段 階段:解鎖階段11. 死鎖及處理:事務循環(huán)等待數(shù)據(jù)鎖,則會死鎖。死鎖處理:預防死鎖協(xié)議,死鎖恢復機制12. 存儲過程:存儲過程就是編譯好了的一些sql語句。1.存儲過程因為SQL語句已經(jīng)預編繹過了,因此運行的速度比較快。2. 可保證數(shù)據(jù)的安全性和完整性。通過存儲過程可以使沒有權(quán)限的用戶在控制之下間接地存取數(shù)據(jù)庫,從而保證數(shù)據(jù)的安全。通過存儲過程可以使相關(guān)的動作在一起發(fā)生,從而可以維護數(shù)據(jù)庫的完整性。3.可以降低網(wǎng)絡的通信量。存儲過程主要是在服務器上運行,減少對客戶機的壓力。4:存儲過程可以

6、接受參數(shù)、輸出參數(shù)、返回單個或多個結(jié)果集以及返回值??梢韵虺绦蚍祷劐e誤原因5:存儲過程可以包含程序流、邏輯以及對數(shù)據(jù)庫的查詢。同時可以實體封裝和隱藏了數(shù)據(jù)邏輯。13. 觸發(fā)器: 當滿足觸發(fā)器條件,則系統(tǒng)自動執(zhí)行觸發(fā)器的觸發(fā)體。觸發(fā)時間:有before,after.觸發(fā)事件:有insert,update,delete三種。觸發(fā)類型:有行觸發(fā)、語句觸發(fā)14.內(nèi)聯(lián)接,外聯(lián)接區(qū)別?內(nèi)連接是保證兩個表中所有的行都要滿足連接條件,而外連接則不然。在外連接中,某些不滿條件的列也會顯示出來,也就是說,只限制其中一個表的行,而不限制另一個表的行。分左連接、右連接、全連接三種SQL試題2一、教師號星期號是否有課有

7、有有有有寫一條sql語句讓你變?yōu)檫@樣的表教師號星期一星期二星期三各星期下的數(shù)字表示:對應的教師在星期幾已經(jīng)排的課數(shù)二、書表(books)book_id,book_name,creatdate,Lastmodifydate,decription001,三個人的世界,2005-02-02,2005-07-07,NULL作者表(authors)A_id,A_name01,王紛02,李尚03,泰和部門表(depts)d_id,d_name001,編輯一部002,編輯二部003,編輯三部書和作者關(guān)聯(lián)表(bookmap)book_id,A_id001,01001,02001,03部門和作者關(guān)聯(lián)表(depm

8、ap)d_id,a_id001,01002,02003,03找出每個部門的所寫的總書兩,比如,一本書有3個人寫,如果三個人在不同的部門,則每個部門的總數(shù)量就是1.最后結(jié)果如下:部門,書量編輯一部,1編輯二部,1編輯三部,1三、兩個表情況表名:wu_planID plan model corp_code plannum prixis1 00001 exx22 nokia 2000 02 00002 lc001 sony 3000 0表名:wu_bomID plan pact amount1 00001 aa1 3002 00001 aa2 2003 00002 bb1 5004 00002 bb

9、2 8005 00002 bb3 400查詢這兩個表中plan唯一,每一個plan中,amount最少的,plannum大于prixis的記錄結(jié)果是:ID plan model corp_code plannum prixis pact amount1 00001 exx22 nokia 2000 0 a2 2002 00002 lc001 sony 3000 0 bb3 400四、表1結(jié)構(gòu)如下:部門 條碼 品名 銷售額 銷售數(shù)量 銷售日期表2結(jié)構(gòu)如下課別 部門要求:先按部門排序,再按銷售額、銷售數(shù)量排序檢索出某個課別每個部門一個時期內(nèi)的商品銷售額的前三名,如查詢01課別2007年4月15日到

10、2007年4月22日每個部門一個周內(nèi)的商品銷售額合計的前三名SQL 面試題目匯總1觸發(fā)器的作用? 答:觸發(fā)器是一中特殊的存儲過程,主要是通過事件來觸發(fā)而被執(zhí)行的。它可以強化約束,來維護數(shù)據(jù)的完整性和一致性,可以跟蹤數(shù)據(jù)庫內(nèi)的操作從而不允許未經(jīng)許可的更新和變化??梢月?lián)級運算。如,某表上的觸發(fā)器上包含對另一個表的數(shù)據(jù)操作,而該操作又會導致該表觸發(fā)器被觸發(fā)。2。什么是存儲過程?用什么來調(diào)用?答:存儲過程是一個預編譯的SQL語句,優(yōu)點是允許模塊化的設計,就是說只需創(chuàng)建一次,以后在該程序中就可以調(diào)用多次。如果某次操作需要執(zhí)行多次SQL,使用存儲過程比單純SQL語句執(zhí)行要快??梢杂靡粋€命令對象來調(diào)用存儲過

11、程。3。索引的作用?和它的優(yōu)點缺點是什么?答:索引就一種特殊的查詢表,數(shù)據(jù)庫的搜索引擎可以利用它加速對數(shù)據(jù)的檢索。它很類似與現(xiàn)實生活中書的目錄,不需要查詢整本書內(nèi)容就可以找到想要的數(shù)據(jù)。索引可以是唯一的,創(chuàng)建索引允許指定單個列或者是多個列。缺點是它減慢了數(shù)據(jù)錄入的速度,同時也增加了數(shù)據(jù)庫的尺寸大小。3。什么是內(nèi)存泄漏?答:一般我們所說的內(nèi)存泄漏指的是堆內(nèi)存的泄漏。堆內(nèi)存是程序從堆中為其分配的,大小任意的,使用完后要顯示釋放內(nèi)存。當應用程序用關(guān)鍵字new等創(chuàng)建對象時,就從堆中為它分配一塊內(nèi)存,使用完后程序調(diào)用free或者delete釋放該內(nèi)存,否則就說該內(nèi)存就不能被使用,我們就說該內(nèi)存被泄漏了。

12、4。維護數(shù)據(jù)庫的完整性和一致性,你喜歡用觸發(fā)器還是自寫業(yè)務邏輯?為什么?答:我是這樣做的,盡可能使用約束,如check,主鍵,外鍵,非空字段等來約束,這樣做效率最高,也最方便。其次是使用觸發(fā)器,這種方法可以保證,無論什么業(yè)務系統(tǒng)訪問數(shù)據(jù)庫都可以保證數(shù)據(jù)的完整新和一致性。最后考慮的是自寫業(yè)務邏輯,但這樣做麻煩,編程復雜,效率低下。5。什么是事務?什么是鎖?答:事務就是被綁定在一起作為一個邏輯工作單元的SQL語句分組,如果任何一個語句操作失敗那么整個操作就被失敗,以后操作就會回滾到操作前狀態(tài),或者是上有個節(jié)點。為了確保要么執(zhí)行,要么不執(zhí)行,就可以使用事務。要將有組語句作為事務考慮,就需要通過ACI

13、D測試,即原子性,一致性,隔離性和持久性。 鎖:在所以的DBMS中,鎖是實現(xiàn)事務的關(guān)鍵,鎖可以保證事務的完整性和并發(fā)性。與現(xiàn)實生活中鎖一樣,它可以使某些數(shù)據(jù)的擁有者,在某段時間內(nèi)不能使用某些數(shù)據(jù)或數(shù)據(jù)結(jié)構(gòu)。當然鎖還分級別的。6。什么叫視圖?游標是什么?答:視圖是一種虛擬的表,具有和物理表相同的功能??梢詫σ晥D進行增,改,查,操作,試圖通常是有一個表或者多個表的行或列的子集。對視圖的修改不影響基本表。它使得我們獲取數(shù)據(jù)更容易,相比多表查詢。 游標:是對查詢出來的結(jié)果集作為一個單元來有效的處理。游標可以定在該單元中的特定行,從結(jié)果集的當前行檢索一行或多行??梢詫Y(jié)果集當前行做修改。一般不使用游標,

14、但是需要逐條處理數(shù)據(jù)的時候,游標顯得十分重要。7。為管理業(yè)務培訓信息,建立3個表: S(S#,SN,SD,SA)S#,SN,SD,SA分別代表學號,學員姓名,所屬單位,學員年齡 C(C#,CN)C#,CN分別代表課程編號,課程名稱 SC(S#,C#,G) S#,C#,G分別代表學號,所選的課程編號,學習成績 (1)使用標準SQL嵌套語句查詢選修課程名稱為稅收基礎(chǔ)的學員學號和姓名? 答案:select s# ,sn from s where S# in(select S# from c,sc where c.c#=sc.c# and cn=稅收基礎(chǔ)) (2) 使用標準SQL嵌套語句查詢選修課程編

15、號為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 sc where c#=c5) (4)查詢選修了課程的學員人數(shù)答:select 學員人數(shù)=count(distinct s#) from sc (5) 查詢選修課程超過5門的學員學號和所屬單位?答:select sn,sd from s where s# in(select s

16、# from sc group by s# having count(distinct c#)5)目前在職場中很難找到非常合格的數(shù)據(jù)庫開發(fā)人員。有人說:“SQL開發(fā)是一門語言,它很容易學,但是很難掌握?!比A為/sql-1981.html在面試過程中多次碰到兩道SQL查詢的題目,一是查詢A(ID,Name)表中第31至40條記錄,ID作為主鍵可能是不是連續(xù)增長的列,完整的查詢語句如下:select top 10 * from A where ID (select max(ID) from (select top 30 ID from A order by A ) T) order by A另外一

17、道題目的要求是查詢表A中存在ID重復三次以上的記錄,完整的查詢語句如下:select * from(select count(ID) as count from table group by ID)T where T.count3以上兩道題目非常有代表意義,望各位把自己碰到的有代表的查詢都貼上來。create table testtable1(id int IDENTITY,department varchar(12)select * from testtable1insert into testtable1 values(設計)insert into testtable1 values(市場

18、)insert into testtable1 values(售后)/*結(jié)果id department1 設計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

19、(4,陳七)/*用一條SQL語句,怎么顯示如下結(jié)果id dptID department name1 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數(shù)據(jù)庫開發(fā)人員時,我運用了一套標準的基準技術(shù)問題。下面這些問題是我覺得能夠真正有助于淘汰不合格應聘者的問題。它們按照從易到難的順序排列。

20、當你問到關(guān)于主鍵和外鍵的問題時,后面的問題都十分有難度,因為答案可能會更難解釋和說明,尤其是在面試的情形下。你能向我簡要敘述一下SQL Server 2000中使用的一些數(shù)據(jù)庫對象嗎?你希望聽到的答案包括這樣一些對象:表格、視圖、用戶定義的函數(shù),以及存儲過程;如果他們還能夠提到像觸發(fā)器這樣的對象就更好了。如果應聘者不能回答這個基本的問題,那么這不是一個好兆頭。NULL是什么意思?NULL(空)這個值是數(shù)據(jù)庫世界里一個非常難纏的東西,所以有不少應聘者會在這個問題上跌跟頭您也不要覺得意外。NULL這個值表示UNKNOWN(未知):它不表示“”(空字符串)。假設您的SQL Server數(shù)據(jù)庫里有AN

21、SI_NULLS,當然在默認情況下會有,對NULL這個值的任何比較都會生產(chǎn)一個NULL值。您不能把任何值與一個 UNKNOWN值進行比較,并在邏輯上希望獲得一個答案。您必須使用IS NULL操作符。什么是索引?SQL Server 2000里有什么類型的索引?任何有經(jīng)驗的數(shù)據(jù)庫開發(fā)人員都應該能夠很輕易地回答這個問題。一些經(jīng)驗不太多的開發(fā)人員能夠回答這個問題,但是有些地方會說不清楚。簡單地說,索引是一個數(shù)據(jù)結(jié)構(gòu),用來快速訪問數(shù)據(jù)庫表格或者視圖里的數(shù)據(jù)。在SQL Server里,它們有兩種形式:聚集索引和非聚集索引。聚集索引在索引的葉級保存數(shù)據(jù)。這意味著不論聚集索引里有表格的哪個(或哪些)字段,這

22、些字段都會按順序被保存在表格。由于存在這種排序,所以每個表格只會有一個聚集索引。非聚集索引在索引的葉級有一個行標識符。這個行標識符是一個指向磁盤上數(shù)據(jù)的指針。它允許每個表格有多個非聚集索引。什么是主鍵?什么是外鍵?主鍵是表格里的(一個或多個)字段,只用來定義表格里的行;主鍵里的值總是唯一的。外鍵是一個用來建立兩個表格之間關(guān)系的約束。這種關(guān)系一般都涉及一個表格里的主鍵字段與另外一個表格(盡管可能是同一個表格)里的一系列相連的字段。那么這些相連的字段就是外鍵。什么是觸發(fā)器?SQL Server 2000有什么不同類型的觸發(fā)器?讓未來的數(shù)據(jù)庫開發(fā)人員知道可用的觸發(fā)器類型以及如何實現(xiàn)它們是非常有益的。

23、觸發(fā)器是一種專用類型的存儲過程,它被捆綁到SQL Server 2000的表格或者視圖上。在SQL Server 2000里,有INSTEAD-OF和AFTER兩種觸發(fā)器。INSTEAD-OF觸發(fā)器是替代數(shù)據(jù)操控語言(Data Manipulation Language,DML)語句對表格執(zhí)行語句的存儲過程。例如,如果我有一個用于TableA的INSTEAD-OF-UPDATE觸發(fā)器,同時對這個表格執(zhí)行一個更新語句,那么INSTEAD-OF-UPDATE觸發(fā)器里的代碼會執(zhí)行,而不是我執(zhí)行的更新語句則不會執(zhí)行操作。AFTER觸發(fā)器要在DML語句在數(shù)據(jù)庫里使用之后才執(zhí)行。這些類型的觸發(fā)器對于監(jiān)視發(fā)

24、生在數(shù)據(jù)庫表格里的數(shù)據(jù)變化十分好用。您如何確一個帶有名為Fld1字段的TableB表格里只具有Fld1字段里的那些值,而這些值同時在名為TableA的表格的Fld1字段里?這個與關(guān)系相關(guān)的問題有兩個可能的答案。第一個答案(而且是您希望聽到的答案)是使用外鍵限制。外鍵限制用來維護引用的完整性。它被用來確保表格里的字段只保存有已經(jīng)在不同的(或者相同的)表格里的另一個字段里定義了的值。這個字段就是候選鍵(通常是另外一個表格的主鍵)。另外一種答案是觸發(fā)器。觸發(fā)器可以被用來保證以另外一種方式實現(xiàn)與限制相同的作用,但是它非常難設置與維護,而且性能一般都很糟糕。由于這個原因,微軟建議開發(fā)人員使用外鍵限制而不

25、是觸發(fā)器來維護引用的完整性。對一個投入使用的在線事務處理表格有過多索引需要有什么樣的性能考慮?你正在尋找進行與數(shù)據(jù)操控有關(guān)的應聘人員。對一個表格的索引越多,數(shù)據(jù)庫引擎用來更新、插入或者刪除數(shù)據(jù)所需要的時間就越多,因為在數(shù)據(jù)操控發(fā)生的時候索引也必須要維護。你可以用什么來確保表格里的字段只接受特定范圍里的值?這個問題可以用多種方式來回答,但是只有一個答案是“好”答案。您希望聽到的回答是Check限制,它在數(shù)據(jù)庫表格里被定義,用來限制輸入該列的值。觸發(fā)器也可以被用來限制數(shù)據(jù)庫表格里的字段能夠接受的值,但是這種辦法要求觸發(fā)器在表格里被定義,這可能會在某些情況下影響到性能。因此,微軟建議使用Check限

26、制而不是其他的方式來限制域的完整性。如果應聘者能夠正確地回答這個問題,那么他的機會就非常大了,因為這表明他們具有使用存儲過程的經(jīng)驗。返回參數(shù)總是由存儲過程返回,它用來表示存儲過程是成功還是失敗。返回參數(shù)總是INT數(shù)據(jù)類型。OUTPUT參數(shù)明確要求由開發(fā)人員來指定,它可以返回其他類型的數(shù)據(jù),例如字符型和數(shù)值型的值。(可以用作輸出參數(shù)的數(shù)據(jù)類型是有一些限制的。)您可以在一個存儲過程里使用多個OUTPUT參數(shù),而您只能夠使用一個返回參數(shù)。什么是相關(guān)子查詢?如何使用這些查詢?經(jīng)驗更加豐富的開發(fā)人員將能夠準確地描述這種類型的查詢。相關(guān)子查詢是一種包含子查詢的特殊類型的查詢。查詢里包含的子查詢會真正請求外

27、部查詢的值,從而形成一個類似于循環(huán)的狀況。數(shù)據(jù)庫面試一:SQL tuning 類1. 列舉幾種表連接方式Answer:等連接(內(nèi)連接)、非等連接、自連接、外連接(左、右、全)Or hash join/merge join/nest loop(cluster join)/index join ?ORACLE 8i,9i 表連接方法。一般的相等連接: select * from a, b where a.id = b.id; 這個就屬于內(nèi)連接。對于外連接:Oracle中可以使用“(+) ”來表示,9i可以使用LEFT/RIGHT/FULL OUTER JOINLEFT OUTER JOIN:左外關(guān)

28、聯(lián)SELECT e.last_name, e.department_id, d.department_nameFROM employees eLEFT OUTER JOIN departments dON (e.department_id = d.department_id);等價于SELECT e.last_name, e.department_id, d.department_nameFROM employees e, departments dWHERE e.department_id=d.department_id(+)結(jié)果為:所有員工及對應部門的記錄,包括沒有對應部門編號depart

29、ment_id的員工記錄。RIGHT OUTER JOIN:右外關(guān)聯(lián)SELECT e.last_name, e.department_id, d.department_nameFROM employees eRIGHT OUTER JOIN departments dON (e.department_id = d.department_id);等價于SELECT e.last_name, e.department_id, d.department_nameFROM employees e, departments dWHERE e.department_id(+)=d.department_i

30、d結(jié)果為:所有員工及對應部門的記錄,包括沒有任何員工的部門記錄。FULL OUTER JOIN:全外關(guān)聯(lián)SELECT e.last_name, e.department_id, d.department_nameFROM employees eFULL OUTER JOIN departments dON (e.department_id = d.department_id);結(jié)果為:所有員工及對應部門的記錄,包括沒有對應部門編號department_id的員工記錄和沒有任何員工的部門記錄。ORACLE8i是不直接支持完全外連接的語法,也就是說不能在左右兩個表上同時加上(+),下面是在ORAC

31、LE8i可以參考的完全外連接語法select t1.id,t2.id from table1 t1,table t2 where t1.id=t2.id(+)unionselect t1.id,t2.id from table1 t1,table t2 where t1.id(+)=t2.id連接類型定義圖示例子內(nèi)連接只連接匹配的行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.c

32、3 = 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;交叉連接生成笛卡爾積它不使用任何匹配或者選取條件,而是直接

33、將一個數(shù)據(jù)源中的每個行與另一個數(shù)據(jù)源的每個行一一匹配select A.c1,B.c2 from A,B;2. 不借助第三方工具,怎樣查看sql的執(zhí)行計劃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;

34、II)SQLPLUS中的SET TRACE 即可看到Execution Plan Statistics SET AUTOTRACE ON;3. 如何使用CBO,CBO與RULE的區(qū)別 IF 初始化參數(shù) OPTIMIZER_MODE = CHOOSE THEN -(8I DEFAULT) IF 做過表分析 THEN 優(yōu)化器 Optimizer=CBO(COST); /*高效*/ ELSE 優(yōu)化器 Optimizer=RBO(RULE); /*高效*/ END IF; END IF; 區(qū)別: RBO根據(jù)規(guī)則選擇最佳執(zhí)行路徑來運行查詢。 CBO根據(jù)表統(tǒng)計找到最低成本的訪問數(shù)據(jù)的方法確定執(zhí)行計劃。 使

35、用CBO需要注意: I) 需要經(jīng)常對表進行ANALYZE命令進行分析統(tǒng)計; II) 需要穩(wěn)定執(zhí)行計劃; III)需要使用提示(Hint); 使用RULE需要注意:I) 選擇最有效率的表名順序II) 優(yōu)化SQL的寫法;在optimizer_mode=choose時,如果表有統(tǒng)計信息(分區(qū)表外),優(yōu)化器將選擇CBO,否則選RBO。RBO遵循簡單的分級方法學,使用15種級別要點,當接收到查詢,優(yōu)化器將評估使用到的要點數(shù)目,然后選擇最佳級別(最少的數(shù)量)的執(zhí)行路徑來運行查詢。CBO嘗試找到最低成本的訪問數(shù)據(jù)的方法,為了最大的吞吐量或最快的初始響應時間,計算使用不同的執(zhí)行計劃的成本,并選擇成本最低的一個

36、,關(guān)于表的數(shù)據(jù)內(nèi)容的統(tǒng)計被用于確定執(zhí)行計劃。4. 如何定位重要(消耗資源多)的SQL使用CPU多的用戶sessionSELECT a.SID, spid, status, SUBSTR (gram, 1, 40) prog, a.terminal,a.SQL_TEXT, osuser, VALUE / 60 / 100 VALUEFROM v$session a, v$process b, v$sesstat cWHERE c.statistic# = 12 AND c.SID = a.SID AND a.paddr = b.addrORDER BY VALUE DESC;select sql

37、_text from v$sqlwhere disk_reads 1000 or (executions 0 and buffer_gets/executions 30000);5. 如何跟蹤某個session的SQL利用TRACE 跟蹤 ALTER SESSION SET SQLTRACE ON; COLUMN SQL format a200; SELECT machine, sql_text SQL FROM v$sqltext a, v$session b WHERE address = sql_address AND machine = &A ORDER BY hash_value,

38、piece;exec dbms_system.set_sql_trace_in_session(sid,serial#,&sql_trace);select sid,serial# from v$session where sid = (select sid from v$mystat where rownum = 1);exec dbms_system.set_ev(&sid,&serial#,&event_10046,&level_12,);6. SQL調(diào)整最關(guān)注的是什么檢查系統(tǒng)的I/O問題sard能檢查整個系統(tǒng)的iostat(IO statistics)查看該SQL的response t

39、ime(db block gets/consistent gets/physical reads/sorts (disk)7. 說說你對索引的認識(索引的結(jié)構(gòu)、對dml影響、對查詢影響、為什么提高查詢性能)索引有B-TREE、BIT、CLUSTER等類型。ORACLE使用了一個復雜的自平衡B-tree結(jié)構(gòu);通常來說,在表上建立恰當?shù)乃饕?,查詢時會改進查詢性能。但在進行插入、刪除、修改時,同時會進行索引的修改,在性能上有一定的影響。有索引且查詢條件能使用索引時,數(shù)據(jù)庫會先度取索引,根據(jù)索引內(nèi)容和查詢條件,查詢出ROWID,再根據(jù)ROWID取出需要的數(shù)據(jù)。由于索引內(nèi)容通常比全表內(nèi)容要少很多,因此通

40、過先讀索引,能減少I/O,提高查詢性能。b-tree index/bitmap index/function index/patitional index(local/global)索引通常能提高select/update/delete的性能,會降低insert的速度,8. 使用索引查詢一定能提高查詢的性能嗎?為什么通常,通過索引查詢數(shù)據(jù)比全表掃描要快.但是我們也必須注意到它的代價.索引需要空間來存儲,也需要定期維護, 每當有記錄在表中增減或索引列被修改時,索引本身也會被修改. 這意味著每條記錄的INSERT,DELETE,UPDATE將為此多付出4,5 次的磁盤I/O. 因為索引需要額外的存

41、儲空間和處理,那些不必要的索引反而會使查詢反應時間變慢.使用索引查詢不一定能提高查詢性能,索引范圍查詢(INDEX RANGE SCAN)適用于兩種情況:基于一個范圍的檢索,一般查詢返回結(jié)果集小于表中記錄數(shù)的30%宜采用;基于非唯一性索引的檢索索引就是為了提高查詢性能而存在的,如果在查詢中索引沒有提高性能,只能說是用錯了索引,或者講是場合不同9. 綁定變量是什么?綁定變量有什么優(yōu)缺點?綁定變量是指在SQL語句中使用變量,改變變量的值來改變SQL語句的執(zhí)行結(jié)果。優(yōu)點:使用綁定變量,可以減少SQL語句的解析,能減少數(shù)據(jù)庫引擎消耗在SQL語句解析上的資源。提高了編程效率和可靠性。減少訪問數(shù)據(jù)庫的次數(shù)

42、, 就能實際上減少ORACLE的工作量。缺點:經(jīng)常需要使用動態(tài)SQL的寫法,由于參數(shù)的不同,可能SQL的執(zhí)行效率不同;綁定變量是相對文本變量來講的,所謂文本變量是指在SQL直接書寫查詢條件,這樣的SQL在不同條件下需要反復解析,綁定變量是指使用變量來代替直接書寫條件,查詢bind value在運行時傳遞,然后綁定執(zhí)行。優(yōu)點是減少硬解析,降低CPU的爭用,節(jié)省shared_pool缺點是不能使用histogram,sql優(yōu)化比較困難10. 如何穩(wěn)定(固定)執(zhí)行計劃可以在SQL語句中指定執(zhí)行計劃。使用HINTS;query_rewrite_enabled = truestar_transforma

43、tion_enabled = trueoptimizer_features_enable = 9.2.0創(chuàng)建并使用stored outline11. 和排序相關(guān)的內(nèi)存在8i和9i分別怎樣調(diào)整,臨時表空間的作用是什么SORT_AREA_SIZE 在進行排序操作時,如果排序的內(nèi)容太多,內(nèi)存里不能全部放下,則需要進行外部排序,此時需要利用臨時表空間來存放排序的中間結(jié)果。8i中sort_area_size/sort_area_retained_size決定了排序所需要的內(nèi)存, 如果排序操作不能在sort_area_size中完成,就會用到temp表空間9i中如果workarea_size_policy

44、=auto時,排序在pga內(nèi)進行,通常pga_aggregate_target的1/20可以用來進行disk sort;如果workarea_size_policy=manual時,排序需要的內(nèi)存由sort_area_size決定, 在執(zhí)行order by/group by/distinct/union/create index/index rebuild/minus等操作時,如果在pga或sort_area_size中不能完成,排序?qū)⒃谂R時表空間進行(disk sort),臨時表空間主要作用就是完成系統(tǒng)中的disk sort.12. 存在表T(a,b,c,d),要根據(jù)字段c排序后取第2130

45、條記錄顯示,請給出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 = 20ORDER BY row_num;create table t(a number(,b number(,c number(,d number();/beginfor i in 1 . 300 loopinsert into t values(mod(i,2),i/2,dbms_random.value(1,300),i/4);end

46、loop;end;/select * from (select c.*,rownum as rn from (select * from t order by c desc) c) where rn between 21 and 30;/select * from (select * from test order by c desc) x where rownum 30minusselect * from (select * from test order by c desc) y where rownum alter system archive log current;數(shù)據(jù)庫只有運行在A

47、RCHIVELOG模式下,并且能夠進行自動歸檔,才可以進行聯(lián)機備份。有了聯(lián)機備份才有可能進行完全恢復。3 如果一個表在2004-08-04 10:30:00 被drop,在有完善的歸檔和備份的情況下,如何恢復9i 新增的FLASH BACK 應該可以;Logminer應該可以找出DML。有完善的歸檔和備份,先歸檔當前數(shù)據(jù),然后可以先恢復到刪除的時間點之前,把DROP 的表導出來,然后再恢復到最后歸檔時間;手工拷貝回所有備份的數(shù)據(jù)文件Sqlstartup mount;sqlalter database recover automatic until time 2004-08-04:10:30:0

48、0;sqlalter database open resetlogs;4 rman是什么,有何特點RMAN(Recovery Manager)是DBA的一個重要工具,用于備份、還原和恢復oracle數(shù)據(jù)庫, RMAN 可以用來備份和恢復數(shù)據(jù)庫文件、歸檔日志、控制文件、系統(tǒng)參數(shù)文件,也可以用來執(zhí)行完全或不完全的數(shù)據(jù)庫恢復。RMAN有三種不同的用戶接口:COMMAND LINE方式、GUI 方式(集成在OEM 中的備份管理器)、API 方式(用于集成到第三方的備份軟件中)。具有如下特點:1)功能類似物理備份,但比物理備份強大N倍;2)可以壓縮空塊;3)可以在塊水平上實現(xiàn)增量;4)可以把備份的輸出打

49、包成備份集,也可以按固定大小分割備份集;5)備份與恢復的過程可以自動管理;6)可以使用腳本(存在Recovery catalog 中)7)可以做壞塊監(jiān)測5 standby的特點備用數(shù)據(jù)庫(standby database):ORACLE推出的一種高可用性(HIGH AVAILABLE)數(shù)據(jù)庫方案,在主節(jié)點與備用節(jié)點間通過日志同步來保證數(shù)據(jù)的同步,備用節(jié)點作為主節(jié)點的備份,可以實現(xiàn)快速切換與災難性恢復,從920開始,還開始支持物理與邏輯備用服務器。9i中的三種數(shù)據(jù)保護模式分別是:1)、MAXIMIZE PROTECTION :最大數(shù)據(jù)保護與無數(shù)據(jù)分歧,LGWR將同時傳送到備用節(jié)點,在主節(jié)點事務確

50、認之前,備用節(jié)點也必須完全收到日志數(shù)據(jù)。如果網(wǎng)絡不好,引起LGWR不能傳送數(shù)據(jù),將引起嚴重的性能問題,導致主節(jié)點DOWN機。2)、MAXIMIZE AVAILABILITY :無數(shù)據(jù)丟失模式,允許數(shù)據(jù)分歧,允許異步傳送。正常情況下運行在最大保護模式,在主節(jié)點與備用節(jié)點的網(wǎng)絡斷開或連接不正常時,自動切換到最大性能模式,主節(jié)點的操作還是可以繼續(xù)的。在網(wǎng)絡不好的情況下有較大的性能影響。3)、MAXIMIZE PERFORMANCE:這種模式應當可以說是從8i繼承過來的備用服務器模式,異步傳送,無數(shù)據(jù)同步檢查,可能丟失數(shù)據(jù),但是能獲得主節(jié)點的最大性能。9i在配置DATA GUARD的時候默認就是MAX

51、IMIZE PERFORMANCE6 對于一個要求恢復時間比較短的系統(tǒng)(數(shù)據(jù)庫50G,每天歸檔5G),你如何設計備份策略數(shù)據(jù)庫比較大邏輯備份沒什么必要,每天歸檔5G,每周三/周六自動歸檔10G,每月RMAN歸檔全庫。應該有standby。rman/每月一號 level 0 每周末/周三 level 1 其它每天level 2四:系統(tǒng)管理類1. 對于一個存在系統(tǒng)性能的系統(tǒng),說出你的診斷處理思路 做statspack收集系統(tǒng)相關(guān)信息 了解系統(tǒng)大致情況/確定是否存在參數(shù)設置不合適的地方/查看top 5 event/查看top sql等 查v$system_event/v$session_event/

52、v$session_wait 從v$system_event開始,確定需要什么資源(db file sequential read)等,深入研究v$session_event,確定等待事件涉及的會話,從v$session_wait確定詳細的資源爭用情況(p1-p3的值:file_id/block_id/blocks等) 通過v$sql/v$sqltext/v$sqlarea表確定disk_reads、(buffer_gets/executions)值較大的SQL2. 列舉幾種診斷IO、CPU、性能狀況的方法top uptime vmstat iostat statspack sql_trace

53、/tkprof查v$system_event/v$session_event/v$session_wait查v$sqlarea(disk_reads或buffer_gets/executions較大的SQL)或者第三方的監(jiān)視工具,TOAD就不錯。3. 對statspack有何認識認識不深。僅限了解。StapSpack是Oracle公司提供的一個收集數(shù)據(jù)庫運行性能指標的軟件包??梢宰鰯?shù)據(jù)庫健康檢查報告。StapSpack是Oracle公司提供的一個收集數(shù)據(jù)庫運行性能指標的軟件包,該軟件包從8i起,在9i、10g都有顯著的增強該軟件包的輔助表(存儲相關(guān)參數(shù)與收集的性能指標的表)由最初的25個增長到

54、43個收集級別參數(shù)由原來的3個(0、5、10)增加到5個(0、5、6、7、10)通過分析收集的性能指標,數(shù)據(jù)庫管理員可以詳細地了解數(shù)據(jù)庫目前的運行情況,對數(shù)據(jù)庫實例、等待事件、SQL等進行優(yōu)化調(diào)整利用statspack收集的snapshot,可以統(tǒng)計制作數(shù)據(jù)庫的各種性能指標的統(tǒng)計趨勢圖表。4. 如果系統(tǒng)現(xiàn)在需要在一個很大的表上創(chuàng)建一個索引,你會考慮那些因素,如何做以盡量減小對應用的影響可以先表分析一下,然后測試創(chuàng)建索引前后對應用的性能影響;需要考慮的是該索引列不經(jīng)常更新,不是有很多重復值的情況時, 在大表中使用索引特別有效. 創(chuàng)建的索引可以跟數(shù)據(jù)表分不同表空間存儲。在系統(tǒng)比較空閑時nologg

55、ing選項(如果有dataguard則不可以使用nologging)大的sort_ared_size或pga_aggregate_target較大5. 對raid10 和raid5有何認識RAID 10(或稱RAID 10)與RAID 01不同,它是用硬盤驅(qū)動器先組成RAID 1陣列,然后在RAID 1陣列之間再組成RAID 0陣列。RAID 10模式同RAID 0+1模式一樣具有良好的數(shù)據(jù)傳輸性能,但卻比RAID 0+1具有更高的可靠性。RAID 10陣列的實際容量為Mn/2,磁盤利用率為50。RAID 10也需要至少4個硬盤驅(qū)動器構(gòu)成,因而價格昂貴。RAID 10的可靠性同RAID 1一樣

56、,但由于RAID 10硬盤驅(qū)動器之間有數(shù)據(jù)分割,因而數(shù)據(jù)傳輸性能優(yōu)良。RAID 5與RAID 3很相似,不同之處在于RAID 5的奇偶校驗信息也同數(shù)據(jù)一樣被分割保存到所有的硬盤驅(qū)動器,而不是寫入一個指定的硬盤驅(qū)動器,從而消除了單個奇偶校驗硬盤驅(qū)動器的瓶頸問題。RAID 5磁盤陣列的性能比RAID 3有所提高,但仍然需要至少3塊硬盤驅(qū)動器。其實際容量為M(n-1),磁盤利用率為(n-1)/n 。五:綜合隨意類1. 你最擅長的是oracle哪部分?pl/sql及sql優(yōu)化2. 喜歡oracle嗎?喜歡上論壇嗎?或者偏好oracle的哪一部分?喜歡。PL/SQL比較得心應手。3. 隨意說說你覺得or

57、acle最有意思的部分或者最困難的部分我對數(shù)據(jù)庫的備份/恢復和性能調(diào)優(yōu)經(jīng)驗明顯不足,自然覺得有些困難?;贠RACLE的研究應該是個寬廣的領(lǐng)域,所以我覺得還是有意思的。4. 為何要選擇做DBA呢?我對數(shù)據(jù)庫的備份/恢復和性能調(diào)優(yōu)經(jīng)驗明顯不足,主要是缺乏環(huán)境和交流。因此,算不上什么DBA。不過因此我更需要這樣的機會。不過就整個ORACLE 來說,一直從事與它相關(guān)的工作,感情還是頗深的。放棄可惜。而且就技術(shù)本身而言我覺得自己還是有學習和創(chuàng)新的能力,它的諸如數(shù)據(jù)倉庫,數(shù)據(jù)挖掘之類的領(lǐng)域也很廣。數(shù)據(jù)庫面試筆試題集第一套一選擇題1. 下面敘述正確的是_。A、算法的執(zhí)行效率與數(shù)據(jù)的存儲結(jié)構(gòu)無關(guān)B、算法的空

58、間復雜度是指算法程序中指令(或語句)的條數(shù)C、算法的有窮性是指算法必須能在執(zhí)行有限個步驟之后終止D、以上三種描述都不對2. 以下數(shù)據(jù)結(jié)構(gòu)中不屬于線性數(shù)據(jù)結(jié)構(gòu)的是_。A、隊列B、線性表C、二叉樹D、棧3. 在一棵二叉樹上第5層的結(jié)點數(shù)最多是_。A、8 B、16 C、32 D、154. 下面描述中,符合結(jié)構(gòu)化程序設計風格的是_。A、使用順序、選擇和重復(循環(huán))三種基本控制結(jié)構(gòu)表示程序的控制邏輯B、模塊只有一個入口,可以有多個出口C、注重提高程序的執(zhí)行效率 D、不使用goto語句5. 下面概念中,不屬于面向?qū)ο蠓椒ǖ氖莀。A、對象 B、繼承 C、類 D、過程調(diào)用6. 在結(jié)構(gòu)化方法中,用數(shù)據(jù)流程圖(D

59、FD)作為描述工具的軟件開發(fā)階段是_。A、可行性分析 B、需求分析 C、詳細設計 D、程序編碼7. 在軟件開發(fā)中,下面任務不屬于設計階段的是_。A、數(shù)據(jù)結(jié)構(gòu)設計 B、給出系統(tǒng)模塊結(jié)構(gòu) C、定義模塊算法 D、定義需求并建立系統(tǒng)模型8. 數(shù)據(jù)庫系統(tǒng)的核心是_。A、數(shù)據(jù)模型 B、數(shù)據(jù)庫管理系統(tǒng) C、軟件工具 D、數(shù)據(jù)庫9. 下列敘述中正確的是_。A、數(shù)據(jù)庫是一個獨立的系統(tǒng),不需要操作系統(tǒng)的支持B、數(shù)據(jù)庫設計是指設計數(shù)據(jù)庫管理系統(tǒng)C、數(shù)據(jù)庫技術(shù)的根本目標是要解決數(shù)據(jù)共享的問題D、數(shù)據(jù)庫系統(tǒng)中,數(shù)據(jù)的物理結(jié)構(gòu)必須與邏輯結(jié)構(gòu)一致10. 下列模式中,能夠給出數(shù)據(jù)庫物理存儲結(jié)構(gòu)與物理存取方法的是_。A、內(nèi)模式

60、 B、外模式 C、概念模式 D、邏輯模式11. Visual FoxPro數(shù)據(jù)庫文件是_。A、存放用戶數(shù)據(jù)的文件 B、管理數(shù)據(jù)庫對象的系統(tǒng)文件C、存放用戶數(shù)據(jù)和系統(tǒng)的文件 D、前三種說法都對12. SQL語句中修改表結(jié)構(gòu)的命令是_。A、MODIFY TABLE B、MODIFY STRUCTURE C、ALTER TABLE D、ALTER STRUCTURE13. 如果要創(chuàng)建一個數(shù)據(jù)組分組報表,第一個分組表達式是部門,第二個分組表達式是性別,第三個分組表達式是基本工資,當前索引的索引表達式應當是_。A、部門+性別+基本工資 B、部門+性別+STR(基本工資)C、STR(基本工資)+性別+部門

溫馨提示

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

評論

0/150

提交評論