數據庫基礎複習以及一些面試題

1、數據庫基礎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);//建表java

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

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 面試題目彙總sql

1.觸發器的做用?數據庫

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

2。什麼是存儲過程?用什麼來調用?c#

答:存儲過程是一個預編譯的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;

2. 不借助第三方工具,怎樣查看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;

3. 如何使用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嘗試找到最低成本的訪問數據的方法,爲了最大的吞吐量或最快的初始響應時間,計算使用不一樣的執行計劃的成本,並選擇成本最低的一個,關於表的數據內容的統計被用於肯定執行計劃。

4. 如何定位重要(消耗資源多)的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 v$session a, v$process 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);

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, piece;

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

select sid,serial# from v$session where sid = (select sidfrom v$mystat where rownum = 1);

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

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

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

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

7. 說說你對索引的認識(索引的結構、對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的速度,

8. 使用索引查詢必定能提升查詢的性能嗎?爲何
一般,經過索引查詢數據比全表掃描要快.可是咱們也必須注意到它的代價.

索引須要空間來存儲,也須要按期維護, 每當有記錄在表中增減或索引列被修改時,索引自己也會被修改. 這意味着每條記錄的INSERT,DELETE,UPDATE將爲此多付出4,5 次的磁盤I/O. 由於索引須要額外的存儲空間和處理,那些沒必要要的索引反而會使查詢反應時間變慢.使用索引查詢不必定能提升查詢性能,索引範圍查詢(INDEX RANGE SCAN)適用於兩種狀況:

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

基於非惟一性索引的檢索

索引就是爲了提升查詢性能而存在的,若是在查詢中索引沒有提升性能,只能說是用錯了索引,或者講是場合不一樣

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

優勢:使用綁定變量,能夠減小SQL語句的解析,能減小數據庫引擎消耗在SQL語句解析上的資源。提升了編程效率和可靠性。減小訪問數據庫的次數, 就能實際上減小ORACLE的工做量。

缺點:常常須要使用動態SQL的寫法,因爲參數的不一樣,可能SQL的執行效率不一樣;

綁定變量是相對文本變量來說的,所謂文本變量是指在SQL直接書寫查詢條件,

這樣的SQL在不一樣條件下須要反覆解析,綁定變量是指使用變量來代替直接書寫條件,查詢bind value在運行時傳遞,而後綁定執行。

優勢是減小硬解析,下降CPU的爭用,節省shared_pool

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

10. 如何穩定(固定)執行計劃
能夠在SQL語句中指定執行計劃。使用HINTS;

query_rewrite_enabled = true

star_transformation_enabled = true

optimizer_features_enable =9.2.0

建立並使用stored outline

11. 和排序相關的內存在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.

12. 存在表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等

ü 查v$system_event/v$session_event/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)值較大的SQL

2. 列舉幾種診斷IO、CPU、性能情況的方法
top uptime vmstat iostat statspack sql_trace/tkprof

查v$system_event/v$session_event/v$session_wait

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

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

3. 對statspack有何認識
認識不深。僅限瞭解。StapSpack是Oracle公司提供的一個收集數據庫運行性能指標的軟件包。能夠作數據庫健康檢查報告。

StapSpack是Oracle公司提供的一個收集數據庫運行性能指標的軟件包,該軟件包從8i起,在9i、10g都有顯著的加強

該軟件包的輔助表(存儲相關參數與收集的性能指標的表)由最初的25個增加到43個

收集級別參數由原來的3個(0、五、10)增長到5個(0、五、六、七、10)

經過分析收集的性能指標,數據庫管理員能夠詳細地瞭解數據庫目前的運行狀況,對數據庫實例、等待事件、SQL等進行優化調整

利用statspack收集的snapshot,能夠統計製做數據庫的各類性能指標的統計趨勢圖表。

4. 若是系統如今須要在一個很大的表上建立一個索引,你會考慮那些因素,如何作以儘可能減少對應用的影響
能夠先表分析一下,而後測試建立索引先後對應用的性能影響;

須要考慮的是該索引列不常常更新,不是有不少重複值的狀況時, 在大表中使用索引特別有效. 建立的索引能夠跟數據表分不一樣表空間存儲。

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

大的sort_ared_size或pga_aggregate_target較大

5. 對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的研究應該是個寬廣的領域,因此我以爲仍是有意思的。

4. 爲什麼要選擇作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 書名=」現代網絡技術基礎」)
2、填空題
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語句填空:
______
48. 設有圖書管理數據庫:
圖書(總編號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;
_______
49. 設有圖書管理數據庫:
圖書(總編號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″)

2、 填空題

36. 若按功能劃分,軟件測試的方法一般分爲白盒測試方法和______測試方法。

37. 數據庫系統的三級模式分別爲______模式、內部級模式與外部級模式。

38. 在最壞狀況下,冒泡排序的時間複雜度爲______。

39. 在面向對象方法中,信息隱蔽是經過對象的______性來實現的。

40. 關係模型的數據操縱便是創建在關係上的數據操縱,通常有______、增長、刪除和修改四種操做。

41.要把幫助文件設置爲複製到硬盤上的Foxhelp.chm文件,須要在」選項」對話框的______選項卡上設置。

42. TIME( )的返回值的數據類型是______類型。

43. 在定義字段有效性規則中,在規則框中輸入的表達式中類型是________。

44. 設計報表一般包括兩部份內容:______和佈局。

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

46. 設有圖書管理數據庫:

圖書(總編號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______;

47. 設有以下關係表R、S和T:

R(BH,XM,XB,DWH)

S(SWH,DWM)

T(BH,XM,XB,DWH)

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

48. 設有以下關係表R:

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

主關鍵字是NO

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

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

49. 設有以下關係表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.內部聯接

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

47. 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

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

49. 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寫入硬盤)

2. 你必須利用備份恢復數據庫,可是你沒有控制文件,該如何解決問題呢?

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

數據庫。

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

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

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

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

擁有的全部extents被稱爲該對象的segment.

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

解答:1。DESCRIBE命令

2. DBMS_METADATA.GET_DDL 包

6. 怎樣查看數據庫引擎的報錯

解答:alert log.

7. 比較truncate和delete 命令

解答:二者均可以用來刪除表中全部的記錄。區別在於:truncate是DDL操做,它移動HWK,不須要 rollback segment .而Delete是DML操做, 須要rollback segment 且花費較長時間.

8. 使用索引的理由

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

9. 給出在STAR SCHEMA中的兩種表及它們分別含有的數據

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

10. FACT Table上須要創建何種索引?

解答:位圖索引 (bitmap index)

11. 給出兩種相關約束?

解答:主鍵和外鍵

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

解答:子表的外鍵強制實效,重建母表,激活外鍵

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

解答:歸檔模式是指你能夠備份全部的數據庫 transactions並恢復到任意一個時間點。非歸檔模式則相反,不能恢復到任意一個時間點。可是非歸檔模式能夠帶來數據庫性能上的少量提升.

14. 如何創建一個備份控制文件?

解答:Alter database backup control file to trace.

15. 給出數據庫正常啓動所經歷的幾種狀態 ?

解答:

STARTUP NOMOUNT – 數據庫實例啓動

STARTUP MOUNT – 數據庫裝載

STARTUP OPEN – 數據庫打開

16. 哪一個column能夠用來區別V$視圖和GV$視圖?

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

17. 如何生成explain plan?

解答:運行utlxplan.sql. 創建plan 表

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

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

18. 如何增長buffer cache的命中率?

解答:在數據庫較繁忙時,適用buffer cache advisory 工具,查詢v$db_cache_advice . 若是有必要更改,可使用 altersystem set db_cache_size 命令

19. ORA-01555的應對方法?

解答:具體的出錯信息是snapshot too old within rollback seg , 一般能夠經過

增大rollback seg來解決問題。固然也須要察看一下具體形成錯誤的SQL文本

20. 解釋$ORACLE_HOME和$ORACLE_BASE的區別?

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

21. 如何判斷數據庫的時區?

解答:SELECT DBTIMEZONE FROM DUAL;

22. 解釋GLOBAL_NAMES設爲TRUE的用途

解答:GLOBAL_NAMES指明聯接數據庫的方式。若是這個參數設置爲TRUE,在創建數據庫連接時就必須用相同的名字連結遠程數據庫

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

解答:WRAP

24. 解釋FUNCTION,PROCEDURE和PACKAGE區別

解答:function 和procedure是PL/SQL代碼的集合,一般爲了完成一個任務。procedure 不須要返回任何值而function將返回一個值在另外一

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

25. 解釋TABLE Function的用途

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

26. 舉出3種能夠收集three advisory statistics

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

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

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

28. 解釋materialized views的做用

解答:Materialized views 用於減小那些彙總,集合和分組的信息的集合數量。它們一般適合於數據倉庫和DSS系統。

29. 當用戶進程出錯,哪一個後臺進程負責清理它

解答: PMON

30. 哪一個後臺進程刷新materialized views?

解答:The Job Queue Processes.

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

解答:V$SESSION / V$SESSION_WAIT

32. 描述什麼是 redo logs

解答:Redo Logs 是用於存放數據庫數據改動情況的物理和邏輯結構。能夠用來修復數據庫.

33. 如何進行強制LOG SWITCH?

解答:ALTER SYSTEM SWITCH LOGFILE;

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

解答:你可使用 Logminer 或 Streams

35. Coalescing作了什麼?

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

36. TEMPORARY tablespace和PERMANENTtablespace 的區別是?

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

37. 建立數據庫時自動創建的tablespace名稱?

解答:SYSTEM tablespace.

38. 建立用戶時,須要賦予新用戶什麼權限才能使它聯上數據庫。

解答:CONNECT

39. 如何在tablespace裏增長數據文件?

解答:ALTER TABLESPACE ADD DATAFILE SIZE

40. 如何變更數據文件的大小?

解答:ALTER DATABASE DATAFILE RESIZE ;

41. 哪一個VIEW用來檢查數據文件的大小?

解答: DBA_DATA_FILES

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

解答:DBA_FREE_SPACE

43. 如何判斷誰往表裏增長了一條紀錄?

解答:auditing

44. 如何重構索引?

解答: ALTER INDEX REBUILD;

45. 解釋什麼是Partitioning(分區)以及它的優勢。

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

46. 你剛剛編譯了一個PL/SQL Package可是有錯誤報道,如何顯示出錯信息?

解答:SHOW ERRORS

47. 如何蒐集表的各類狀態數據?

解答: ANALYZE

The ANALYZE command.

48. 如何啓動SESSION級別的TRACE

解答: DBMS_SESSION.SET_SQL_TRACE

ALTER SESSION SET SQL_TRACE = TRUE;

49. 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;

2. 不借助第三方工具,怎樣查看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;

3. 如何使用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嘗試找到最低成本的訪問數據的方法,爲了最大的吞吐量或最快的初始響應時間,計算使用不一樣的執行計劃的成本,並選擇成本最低的一個,關於表的數據內容的統計被用於肯定執行計劃。

4. 如何定位重要(消耗資源多)的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 v$session a, v$process 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);

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, piece;

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

select sid,serial# from v$session where sid = (select sidfrom v$mystat where rownum = 1);

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

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

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

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

7. 說說你對索引的認識(索引的結構、對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的速度,

8. 使用索引查詢必定能提升查詢的性能嗎?爲何
一般,經過索引查詢數據比全表掃描要快.可是咱們也必須注意到它的代價.

索引須要空間來存儲,也須要按期維護, 每當有記錄在表中增減或索引列被修改時,索引自己也會被修改. 這意味着每條記錄的INSERT,DELETE,UPDATE將爲此多付出4,5 次的磁盤I/O. 由於索引須要額外的存儲空間和處理,那些沒必要要的索引反而會使查詢反應時間變慢.使用索引查詢不必定能提升查詢性能,索引範圍查詢(INDEX RANGE SCAN)適用於兩種狀況:

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

基於非惟一性索引的檢索

索引就是爲了提升查詢性能而存在的,若是在查詢中索引沒有提升性能,只能說是用錯了索引,或者講是場合不一樣

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

優勢:使用綁定變量,能夠減小SQL語句的解析,能減小數據庫引擎消耗在SQL語句解析上的資源。提升了編程效率和可靠性。減小訪問數據庫的次數, 就能實際上減小ORACLE的工做量。

缺點:常常須要使用動態SQL的寫法,因爲參數的不一樣,可能SQL的執行效率不一樣;

綁定變量是相對文本變量來說的,所謂文本變量是指在SQL直接書寫查詢條件,

這樣的SQL在不一樣條件下須要反覆解析,綁定變量是指使用變量來代替直接書寫條件,查詢bind value在運行時傳遞,而後綁定執行。

優勢是減小硬解析,下降CPU的爭用,節省shared_pool

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

10. 如何穩定(固定)執行計劃
能夠在SQL語句中指定執行計劃。使用HINTS;

query_rewrite_enabled = true

star_transformation_enabled = true

optimizer_features_enable =9.2.0

建立並使用stored outline

11. 和排序相關的內存在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.

12. 存在表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等

ü 查v$system_event/v$session_event/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)值較大的SQL

2. 列舉幾種診斷IO、CPU、性能情況的方法
top uptime vmstat iostat statspack sql_trace/tkprof

查v$system_event/v$session_event/v$session_wait

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

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

3. 對statspack有何認識
認識不深。僅限瞭解。StapSpack是Oracle公司提供的一個收集數據庫運行性能指標的軟件包。能夠作數據庫健康檢查報告。

StapSpack是Oracle公司提供的一個收集數據庫運行性能指標的軟件包,該軟件包從8i起,在9i、10g都有顯著的加強

該軟件包的輔助表(存儲相關參數與收集的性能指標的表)由最初的25個增加到43個

收集級別參數由原來的3個(0、五、10)增長到5個(0、五、六、七、10)

經過分析收集的性能指標,數據庫管理員能夠詳細地瞭解數據庫目前的運行狀況,對數據庫實例、等待事件、SQL等進行優化調整

利用statspack收集的snapshot,能夠統計製做數據庫的各類性能指標的統計趨勢圖表。

4. 若是系統如今須要在一個很大的表上建立一個索引,你會考慮那些因素,如何作以儘可能減少對應用的影響
能夠先表分析一下,而後測試建立索引先後對應用的性能影響;

須要考慮的是該索引列不常常更新,不是有不少重複值的狀況時, 在大表中使用索引特別有效. 建立的索引能夠跟數據表分不一樣表空間存儲。

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

大的sort_ared_size或pga_aggregate_target較大

5. 對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的研究應該是個寬廣的領域,因此我以爲仍是有意思的。

4. 爲什麼要選擇作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 …)

6. What is a 「join」?
Joins merge the data of two related tables into a single result set, presentinga denormalized view of the data.

7. 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.

8. 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.

9. 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!

10. 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.

11. 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.

12. 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.

13. 存儲過程和函數的區別
存儲過程是用戶定義的一系列sql語句的集合,涉及特定表或其它對象的任務,用戶能夠調用存儲過程,而函數一般是數據庫已定義的方法,它接收參數並返回某種類型的值而且不涉及特定用戶表。

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

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

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

隔離性:由併發事務所做的修改必須與任何其它併發事務所做的修改隔離。事務查看數據時數據所處的狀態,要麼是另外一併發事務修改它以前的狀態,要麼是 另外一事務修改它以後的狀態,事務不會查看中間狀態的數據。這稱爲可串行性,由於它可以從新裝載起始數據,而且重播一系列事務,以使數據結束時的狀態與原始事務執行的狀態相同。

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

15. 遊標的做用?如何知道遊標已經到了最後?
遊標用於定位結果集的行,經過判斷全局變量@@FETCH_STATUS能夠判斷是否到了最後,一般此變量不等於0表示出錯或到了最後。

16. 觸發器分爲事前觸發和過後觸發,這兩種觸發有和區別。語句級觸發和行級觸發有何區別。
事前觸發器運行於觸發事件發生以前,而過後觸發器運行於觸發事件發生以後。一般事前觸發器能夠獲取事件以前和新的字段值。

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

 

 

轉自:http://www.cnblogs.com/luolizhi/p/5248230.html

相關文章
相關標籤/搜索