數(shù)據(jù)庫基礎(chǔ)(面試常見題)
一俭茧、數(shù)據(jù)庫基礎(chǔ)
Oracle對象有哪些?
答案:表漓帚,表空間母债,用戶,視圖尝抖,索引毡们,存儲過程,函數(shù)昧辽,觸發(fā)器
Oracle體系衙熔?
答:Oracle服務(wù)器由Oracle實例和Oracle數(shù)據(jù)庫兩大部分組成。
Oracle實例
是一種數(shù)據(jù)庫訪問機制搅荞,主要由內(nèi)存結(jié)構(gòu)和進程結(jié)構(gòu)組成红氯。
內(nèi)存結(jié)構(gòu)主要包括系統(tǒng)全局區(qū)(System Global Area,SGA)咕痛、進程全局區(qū)(Process Global Area倍权,PGA)等
實例的后臺進程有5個是必須的
SMON 系統(tǒng)監(jiān)視器進程
PMON 進程監(jiān)視器進程
DBWR 數(shù)據(jù)庫書寫器
LGWR 日志書寫器
CKPT 檢查點進程
每個實例只能操作其對應(yīng)的一個數(shù)據(jù)庫爱沟,但一個數(shù)據(jù)庫可以同時被幾個實例操作(RAC)
Oracle數(shù)據(jù)庫
由以下三種操作系統(tǒng)文件組成:
控制文件(control files)
數(shù)據(jù)文件(data files)
重做日志文件(redo log files)
其它服務(wù)器文件:
初始化參數(shù)文件(parameter files)
口令文件(password files)
歸檔重做日志文件(archived redo log files)
<u>http://blog.itpub.net/28974745/viewspace-2144907/</u>
2. SQL語言包括數(shù)據(jù)定義仿野、數(shù)據(jù)操縱(Data Manipulation),數(shù)據(jù)控制(Data Control)
DDL(data define language)數(shù)據(jù)定義語言:Create Table,Alter Table,Drop Table, Create/DropIndex等准潭;
DML數(shù)據(jù)操縱:Select ,insert,update,delete,
延伸面試題:oracle中trunscate(截斷)和delete區(qū)別?
DCL數(shù)據(jù)控制: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;//更新數(shù)據(jù)
DELETE FROM Tablename WHERE condition;//刪除
GRANT (Select,delete,…) ON (對象) TO USER_NAME [WITHGRANT 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 S
WHERE E.SUPERName=S.Name
4. 視圖:
也稱虛表, 不占用物理空間腔丧,因為視圖本身的定義語句還是要存儲在數(shù)據(jù)表里的放椰。視圖只有邏輯定義王暗。每次使用的時候,只是重新執(zhí)行SQL。
視圖是從一個或多個實際表中獲得的庄敛,這些表的數(shù)據(jù)存放在數(shù)據(jù)庫中。那些用于產(chǎn)生視圖的表叫做該視圖的基表科汗。一個視圖也可以從另一個視圖中產(chǎn)生藻烤。
視圖作用:
1)按業(yè)務(wù)需求從多張數(shù)據(jù)表中展示數(shù)據(jù);
2)簡化查詢語句头滔;
3)提供某些安全性保證. 視圖提供了隱藏敏感的列
4)簡化用戶權(quán)限的管理. 可以將視圖的權(quán)限授予用戶怖亭。
視圖創(chuàng)建的基本語法:
Create view 視圖名
Is
sql語句
視圖分類:
簡單視圖定義:是指基于單個表建立的,不包含任何函數(shù)坤检、表達式和分組數(shù)據(jù)的視 圖兴猩。
只讀視圖, 創(chuàng)建視圖后加入 with read only
連接視圖定義:是指基于多個表所創(chuàng)建的視圖,即早歇,定義視圖的查詢是一個連接查詢倾芝。 主要目的是為了簡化連接查詢
復雜視圖定義:是指包含函數(shù)、表達式箭跳、或分組數(shù)據(jù)的視圖晨另。主要目的是為了簡化查詢。主要用于執(zhí)行查詢操作谱姓,并不用于執(zhí)行DML操作借尿。
實施崗位:
強制創(chuàng)建視圖
強制視圖定義:正常情況下,如果基表不存在屉来,創(chuàng)建視圖就會失敗路翻。但是可以使用force選項強制創(chuàng)建視圖(前提:創(chuàng)建視圖的語句沒有語法錯誤!)茄靠,此時該視圖處于失效狀態(tài)茂契。
5. 完整性約束:實體完整性、參照完整性慨绳、用戶定義完整性
6. 第三范式:
1NF:每個屬性是不可分的账嚎。
2NF:在滿足1NF基礎(chǔ)上,其他非主鍵字段唯一依賴主鍵;
3NF:在滿足2NF基礎(chǔ)上儡蔓,在關(guān)聯(lián)表中外鍵表中的外鍵是唯一依賴主鍵表中的主鍵郭蕉。
7. ER(實體/聯(lián)系)模型
8. 索引作用
索引加快數(shù)據(jù)檢索的速度;
基本語法:
create index 索引名
on 表名(列名,…)
9. 事務(wù):是一系列的數(shù)據(jù)庫操作喂江,是數(shù)據(jù)庫應(yīng)用的基本邏輯單位召锈。事務(wù)性質(zhì):原子性、
l 原子性获询。即不可分割性涨岁,事務(wù)要么全部被執(zhí)行拐袜,要么就全部不被執(zhí)行。
l 一致性或可串性梢薪。事務(wù)的執(zhí)行使得數(shù)據(jù)庫從一種正確狀態(tài)轉(zhuǎn)換成另一種正確狀態(tài)
l 隔離性蹬铺。在事務(wù)正確提交之前,不允許把該事務(wù)對數(shù)據(jù)的任何改變提供給任何其他事務(wù)秉撇,
l 持久性甜攀。事務(wù)正確提交后,其結(jié)果將永久保存在數(shù)據(jù)庫中琐馆,即使在事務(wù)提交后有了其他故障规阀,事務(wù)的處理結(jié)果也會得到保存。
9.1 兩個事務(wù)并發(fā)訪問數(shù)據(jù)庫數(shù)據(jù)時可能存在的問題
1. 幻讀:
事務(wù)T1讀取一條指定where條件的語句瘦麸,返回結(jié)果集谁撼。此時事務(wù)T2插入一行新記錄并commit,恰好滿足T1的where條件滋饲。然后T1使用相同的條件再次查詢厉碟,結(jié)果集中可以看到T2插入的記錄,這條新紀錄就是幻讀屠缭。
2. 不可重復讀饶:
事務(wù)T1讀取一行記錄,緊接著事務(wù)T2修改了T1剛剛讀取的記錄并commit勿她,然后T1再次查詢袄秩,發(fā)現(xiàn)與第一次讀取的記錄不同,這稱為不可重復讀逢并。
3. 臟讀:
事務(wù)T1更新了一行記錄之剧,還未提交所做的修改,這個T2讀取了更新后的數(shù)據(jù)砍聊,然后T1執(zhí)行回滾操作背稼,取消剛才的修改,所以T2所讀取的行就無效玻蝌,也就是臟數(shù)據(jù)蟹肘。
9.2 oracle并發(fā)事務(wù)解決方案
Oracle sql編程并發(fā)事務(wù)隔離級別兩個設(shè)置:
REPEATABLE READ(不允許不可重復讀和臟讀,只允許幻想讀)
isolation level read committed(可幻讀和重復讀)
oracle悲觀鎖:
select * from test where id = 10 for update
11. 死鎖及處理:事務(wù)循環(huán)等待數(shù)據(jù)鎖俯树,則會死鎖帘腹。
死鎖產(chǎn)生條件
Mutual exclusion(互斥):資源不能被共享,只能由一個進程使用许饿。
Hold and wait(請求并保持):已經(jīng)得到資源的進程可以再次申請新的資源阳欲。
No pre-emption(不可剝奪):已經(jīng)分配的資源不能從相應(yīng)的進程中被強制地剝奪。
Circular wait(循環(huán)等待條件):系統(tǒng)中若干進程組成環(huán)路,該環(huán)路中每個進程都在等
待相鄰進程正占用的資源球化。
12. 存儲過程:存儲過程就是編譯好了的一些sql語句秽晚。
1)存儲過程因為SQL語句已經(jīng)預(yù)編繹過了,因此運行的速度比較快筒愚。
- 可保證數(shù)據(jù)的安全性和完整性赴蝇。通過存儲過程可以使沒有權(quán)限的用戶在控制之下間接地存取數(shù)據(jù)庫,從而保證數(shù)據(jù)的安全巢掺。通過存儲過程可以使相關(guān)的動作在一起發(fā)生句伶,從而可以維護數(shù)據(jù)庫的完整性。
3)可以降低網(wǎng)絡(luò)的通信量址遇。存儲過程主要是在服務(wù)器上運行,減少對客戶機的壓力斋竞。
4)存儲過程可以接受參數(shù)倔约、輸出參數(shù)“映酰可以向程序返回錯誤原因
5)存儲過程可以包含程序流浸剩、邏輯以及對數(shù)據(jù)庫的查詢。同時可以實體封裝和隱藏了數(shù)據(jù)邏輯鳄袍。
13. 觸發(fā)器: 當滿足觸發(fā)器條件绢要,則系統(tǒng)自動執(zhí)行觸發(fā)器的觸發(fā)體。
觸發(fā)時間:有before,after.觸發(fā)事件:有insert,update,delete三種拗小。觸發(fā)類型:有行觸發(fā)重罪、語句觸發(fā)
語句:
|
CREATE TRIGGER 觸發(fā)器名 BEFORE|AFTER 觸發(fā)事件
ON 表名 FOR EACH ROW
BEGIN
執(zhí)行語句列表
END
Create trigger ok before insert
On user for each row
Begin
Insert into temp_log values(null,’abc’)
End
|
14.內(nèi)聯(lián)接,外聯(lián)接區(qū)別?
內(nèi)連接是保證兩個表中所有的行都要滿足連接條件哀九。
內(nèi)連接: from A,B where 連接條件剿配; from A inner join B on 連接條件;
在外連接中阅束,某些不滿條件的列也會顯示出來呼胚,也就是說,只限制其中一個表的行息裸,而不限制另一個表的行蝇更。分左連接、右連接呼盆、全連接三種
Select * From A left [outer] join B on連接條件年扩;
Select * From A right [outer] join B on連接條件;
Select * From A full [outer] join B on連接條件访圃;
自然連接通過同名的列名進行自動連接
Select * From A nature join B常遂;
SQL 面試題目匯總
1.觸發(fā)器的作用?
答:觸發(fā)器是一中特殊的存儲過程,主要是通過事件來觸發(fā)而被執(zhí)行的克胳。它可以強化約束平绩,來維護數(shù)據(jù)的完整性和一致性,可以跟蹤數(shù)據(jù)庫內(nèi)的操作從而不允許未經(jīng)許可的更新和變化漠另∧蟠疲可以聯(lián)級運算。如笆搓,某表上的觸發(fā)器上包含對另一個表的數(shù)據(jù)操作性湿,而該操作又會導致該表觸發(fā)器被觸發(fā)。
2满败。什么是存儲過程肤频?用什么來調(diào)用?
答:存儲過程是一個預(yù)編譯的SQL語句算墨,優(yōu)點是允許模塊化的設(shè)計宵荒,就是說只需創(chuàng)建一次,以后在該程序中就可以調(diào)用多次净嘀。如果某次操作需要執(zhí)行多次SQL报咳,使用存儲過程比單純SQL語句執(zhí)行要快⊥诓兀可以用一個命令對象來調(diào)用存儲過程暑刃。
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)存拨黔。當應(yīng)用程序用關(guān)鍵字new等 創(chuàng)建對象時蛔溃,就從堆中為它分配一塊內(nèi)存,使用完后程序調(diào)用free或者delete釋放該內(nèi)存,否則就說該內(nèi)存就不能被使用贺待,我們就說該內(nèi)存被泄漏了徽曲。
4。維護數(shù)據(jù)庫的完整性和一致性麸塞,你喜歡用觸發(fā)器還是自寫業(yè)務(wù)邏輯秃臣?為什么?
答:我是這樣做的哪工,盡可能使用約束奥此,如check,主鍵,外鍵雁比,非空字段等來約束稚虎,這樣做效率最高,也最方便偎捎。其次是使用觸發(fā)器蠢终,這種方法可以保證,無論什么業(yè)務(wù)系統(tǒng)訪問數(shù)據(jù)庫都可以保證數(shù)據(jù)的完整新和一致性鸭限。最后考慮的是自寫業(yè)務(wù)邏輯蜕径,但這樣做麻煩两踏,編程復雜败京,效率低下。
5梦染。什么是事務(wù)赡麦?什么是鎖?
答:事務(wù)就是被綁定在一起作為一個邏輯工作單元的SQL語句分組帕识,如果任何一個語句操作失敗那么整個操作就被失敗泛粹,以后操作就會回滾到操作前狀態(tài),或者是上有個節(jié)點肮疗。為了確保要么執(zhí)行晶姊,要么不執(zhí)行,就可以使用事務(wù)伪货。要將有組語句作為事務(wù)考慮们衙,就需要通過ACID測試,即原子性碱呼,一致性蒙挑,隔離性和持久性。
鎖:在所以的DBMS中愚臀,鎖是實現(xiàn)事務(wù)的關(guān)鍵忆蚀,鎖可以保證事務(wù)的完整性和并發(fā)性。與現(xiàn)實生活中鎖一樣,它可以使某些數(shù)據(jù)的擁有者馋袜,在某段時間內(nèi)不能使用某些數(shù)據(jù)或數(shù)據(jù)結(jié)構(gòu)男旗。當然鎖還分級別的。
6桃焕。什么叫視圖剑肯?游標是什么?
答:視圖是一種虛擬的表观堂,具有和物理表相同的功能让网。可以對視圖進行增师痕,改溃睹,查,操作胰坟,試圖通常是有一個表或者多個表的行或列的子集因篇。對視圖的修改不影響基本表。它使得我們獲取數(shù)據(jù)更容易笔横,相比多表查詢竞滓。
游標:是對查詢出來的結(jié)果集作為一個單元來有效的處理。游標可以定在該單元中的特定行吹缔,從結(jié)果集的當前行檢索一行或多行商佑。可以對結(jié)果集當前行做修改厢塘。一般不使用游標茶没,但是需要逐條處理數(shù)據(jù)的時候,游標顯得十分重要晚碾。
NULL是什么意思?
NULL(空)這個值是數(shù)據(jù)庫世界里一個非常難纏的東西抓半,所以有不少應(yīng)聘者會在這個問題上跌跟頭您也不要覺得意外。
NULL這個值表示UNKNOWN(未知):它不表示“”(空字符串)格嘁。假設(shè)您的SQL Server數(shù)據(jù)庫里有ANSI_NULLS笛求,當然在默認情況下會有,對NULL這個值的任何比較都會生產(chǎn)一個NULL值糕簿。您不能把任何值與一個 UNKNOWN值進行比較探入,并在邏輯上希望獲得一個答案。您必須使用IS NULL操作符冶伞。
什么是索引?SQL Server 2000里有什么類型的索引?
任何有經(jīng)驗的數(shù)據(jù)庫開發(fā)人員都應(yīng)該能夠很輕易地回答這個問題新症。一些經(jīng)驗不太多的開發(fā)人員能夠回答這個問題,但是有些地方會說不清楚响禽。
簡單地說徒爹,索引是一個數(shù)據(jù)結(jié)構(gòu)荚醒,用來快速訪問數(shù)據(jù)庫表格或者視圖里的數(shù)據(jù)。在SQL Server里隆嗅,它們有兩種形式:聚集索引和非聚集索引界阁。聚集索引在索引的葉級保存數(shù)據(jù)。這意味著不論聚集索引里有表格的哪個(或哪些)字段胖喳,這些字段都 會按順序被保存在表格泡躯。由于存在這種排序,所以每個表格只會有一個聚集索引丽焊。非聚集索引在索引的葉級有一個行標識符较剃。這個行標識符是一個指向磁盤上數(shù)據(jù)的指針。它允許每個表格有多個非聚集索引技健。
什么是主鍵?什么是外鍵?
主鍵是表格里的(一個或多個)字段写穴,只用來定義表格里的行;主鍵里的值總是唯一的。外鍵是一個用來建立兩個表格之間關(guān)系的約束雌贱。這種關(guān)系一般都涉及一個表格里的主鍵字段與另外一個表格(盡管可能是同一個表格)里的一系列相連的字段啊送。那么這些相連的字段就是外鍵。
什么是觸發(fā)器?SQL Server 2000有什么不同類型的觸發(fā)器?
讓未來的數(shù)據(jù)庫開發(fā)人員知道可用的觸發(fā)器類型以及如何實現(xiàn)它們是非常有益的欣孤。
觸發(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ā)生在數(shù)據(jù)庫表格里的數(shù)據(jù)變化十分好用。
您如何確一個帶有名為Fld1字段的TableB表格里只具有Fld1字段里的那些值幔妨,而這些值同時在名為TableA的表格的Fld1字段里?
這個與關(guān)系相關(guān)的問題有兩個可能的答案鹦赎。第一個答案(而且是您希望聽到的答案)是使用外鍵限制。外鍵限制用來維護引用的完整性误堡。它被用來確保表格里 的字段只保存有已經(jīng)在不同的(或者相同的)表格里的另一個字段里定義了的值古话。這個字段就是候選鍵(通常是另外一個表格的主鍵)。
另外一種答案是觸發(fā)器锁施。觸發(fā)器可以被用來保證以另外一種方式實現(xiàn)與限制相同的作用陪踩,但是它非常難設(shè)置與維護,而且性能一般都很糟糕。由于這個原因茬贵,微軟建議開發(fā)人員使用外鍵限制而不是觸發(fā)器來維護引用的完整性钉汗。
對一個投入使用的在線事務(wù)處理表格有過多索引需要有什么樣的性能考慮?
你正在尋找進行與數(shù)據(jù)操控有關(guān)的應(yīng)聘人員。對一個表格的索引越多傻谁,數(shù)據(jù)庫引擎用來更新孝治、插入或者刪除數(shù)據(jù)所需要的時間就越多,因為在數(shù)據(jù)操控發(fā)生的時候索引也必須要維護审磁。
你可以用什么來確保表格里的字段只接受特定范圍里的值?
這個問題可以用多種方式來回答谈飒,但是只有一個答案是“好”答案。您希望聽到的回答是Check限制态蒂,它在數(shù)據(jù)庫表格里被定義步绸,用來限制輸入該列的值。
觸發(fā)器也可以被用來限制數(shù)據(jù)庫表格里的字段能夠接受的值吃媒,但是這種辦法要求觸發(fā)器在表格里被定義瓤介,這可能會在某些情況下影響到性能。因此赘那,微軟建議使用Check限制而不是其他的方式來限制域的完整性刑桑。
如果應(yīng)聘者能夠正確地回答這個問題,那么他的機會就非常大了募舟,因為這表明他們具有使用存儲過程的經(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)子查詢是一種包含子查詢的特殊類型的查詢缨睡。查詢里包含的子查詢會真正請求外部查詢的值鸟悴,從而形成一個類似于循環(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 JOIN
LEFT OUTER JOIN:左外關(guān)聯(lián)
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(+)
結(jié)果為:所有員工及對應(yīng)部門的記錄季希,包括沒有對應(yīng)部門編號department_id的員工記錄。
RIGHT OUTER JOIN:右外關(guān)聯(lián)
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
結(jié)果為:所有員工及對應(yīng)部門的記錄幽纷,包括沒有任何員工的部門記錄式塌。
FULL OUTER JOIN:全外關(guān)聯(lián)
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);
結(jié)果為:所有員工及對應(yīng)部門的記錄,包括沒有對應(yīng)部門編號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
連接類型
定義
圖示
例子
內(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.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;
交叉連接
生成笛卡爾積——它不使用任何匹配或者選取條件伦意,而是直接將一個數(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;
II)SQLPLUS中的SET TRACE 即可看到Execution Plan Statistics
SET AUTOTRACE ON;
7. 說說你對索引的認識(索引的結(jié)構(gòu)、對dml影響驮肉、對查詢影響熏矿、為什么提高查詢性能)
索引有B-TREE、BIT离钝、CLUSTER等類型票编。ORACLE使用了一個復雜的自平衡B-tree結(jié)構(gòu);通常來說,在表上建立恰當?shù)乃饕芽剩樵儠r會改 進查詢性能慧域。但在進行插入、刪除奖恰、修改時吊趾,同時會進行索引的修改宛裕,在性能上有一定的影響瑟啃。有索引且查詢條件能使用索引時,數(shù)據(jù)庫會先度取索引揩尸,根據(jù)索引內(nèi)容和查詢條件蛹屿,查詢出ROWID,再根據(jù)ROWID取出需要的數(shù)據(jù)岩榆。由于索引內(nèi)容通常比全表內(nèi)容要少很多错负,因此通過先讀索引坟瓢,能減少I/O,提高查詢性 能犹撒。
b-tree index/bitmap index/function index/patitionalindex(local/global)索引通常能提高select/update/delete的性能,會降低insert的速度,
8. 使用索引查詢一定能提高查詢的性能嗎折联?為什么
通常,通過索引查詢數(shù)據(jù)比全表掃描要快.但是我們也必須注意到它的代價.
索引需要空間來存儲,也需要定期維護, 每當有記錄在表中增減或索引列被修改時,索引本身也會被修改. 這意味著每條記錄的INSERT,DELETE,UPDATE將為此多付出4,5 次的磁盤I/O. 因為索引需要額外的存儲空間和處理,那些不必要的索引反而會使查詢反應(yīng)時間變慢.使用索引查詢不一定能提高查詢性能,索引范圍查詢(INDEX RANGE SCAN)適用于兩種情況:
基于一個范圍的檢索,一般查詢返回結(jié)果集小于表中記錄數(shù)的30%宜采用;
基于非唯一性索引的檢索
索引就是為了提高查詢性能而存在的,如果在查詢中索引沒有提高性能,只能說是用錯了索引,或者講是場合不同
9. 綁定變量是什么?綁定變量有什么優(yōu)缺點识颊?
綁定變量是指在SQL語句中使用變量诚镰,改變變量的值來改變SQL語句的執(zhí)行結(jié)果。
優(yōu)點:使用綁定變量祥款,可以減少SQL語句的解析清笨,能減少數(shù)據(jù)庫引擎消耗在SQL語句解析上的資源。提高了編程效率和可靠性刃跛。減少訪問數(shù)據(jù)庫的次數(shù), 就能實際上減少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 = true
star_transformation_enabled = true
optimizer_features_enable =9.2.0
創(chuàng)建并使用stored outline
11. 和排序相關(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=auto時,
排序在pga內(nèi)進行,通常pga_aggregate_target的1/20可以用來進行disk sort;
如果workarea_size_policy=manual時,排序需要的內(nèi)存由sort_area_size決定, 在執(zhí)行order by/groupby/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排序后取第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性能較差
二:數(shù)據(jù)庫基本概念類
1 Pctused and pctfree 表示什么含義有什么作用
pctused與pctfree控制數(shù)據(jù)塊是否出現(xiàn)在freelist中, pctfree控制數(shù)據(jù)塊中保留用于update的空間,當數(shù)據(jù)塊中的free space小于pctfree設(shè)置的空間時,該數(shù)據(jù)塊從freelist中去掉,當塊由于dml操作free space大于pct_used設(shè)置的空間時,該數(shù)據(jù)庫塊將被添加在freelist鏈表中颈娜。
2 簡單描述tablespace / segment / extent/ block之間的關(guān)系
tablespace: 一個數(shù)據(jù)庫劃分為一個或多個邏輯單位,該邏輯單位成為表空間;每一個表空間可能包含一個或多個 Segment;
Segments: Segment指在tablespace中為特定邏輯存儲結(jié)構(gòu)分配的空間浙宜。每一個段是由一個或多個extent組成官辽。包括數(shù)據(jù)段、索引段粟瞬、回滾段和臨時段同仆。
Extents: 一個 extent 由一系列連續(xù)的 Oracle blocks組成.ORACLE為通過extent 來給segment分配空間。
Data Blocks:Oracle 數(shù)據(jù)庫最小的I/O存儲單位裙品,一個data block對應(yīng)一個或多個分配給data file的操作系統(tǒng)塊俗批。
table創(chuàng)建時,默認創(chuàng)建了一個data segment,每個data segment含有min extents指定的extents數(shù),每個extent據(jù)據(jù)表空間的存儲參數(shù)分配一定數(shù)量的blocks
3 描述tablespace和datafile之間的關(guān)系
一個表空間可包含一個或多個數(shù)據(jù)文件俗或。表空間利用增加或擴展數(shù)據(jù)文件擴大表空間,表空間的大小為組成該表空間的數(shù)據(jù)文件大小的和岁忘。一個datafile只能屬于一個表空間;
一個tablespace可以有一個或多個datafile,每個datafile只能在一個tablespace內(nèi), table中的數(shù)據(jù),通過hash算法分布在tablespace中的各個datafile中,tablespace是邏輯上的概念,datafile則 在物理上儲存了數(shù)據(jù)庫的種種對象辛慰。
4 本地管理表空間和字典管理表空間的特點,ASSM有什么特點
本地管理表空間:(9i默認)空閑塊列表存儲在表空間的數(shù)據(jù)文件頭干像。
特點:減少數(shù)據(jù)字典表的競爭昆雀,當分配和收縮空間時會產(chǎn)生回滾,不需要合并蝠筑。
字典管理表空間:(8i默認)空閑塊列表存儲在數(shù)據(jù)庫中的字典表里.
特點:片由數(shù)據(jù)字典管理狞膘,可能造成字典表的爭用。存儲在表空間的每一個段都會有不同的存儲字句什乙,需要合并相鄰的塊;
本地管理表空間(Locally Managed Tablespace簡稱LMT)
8i以后出現(xiàn)的一種新的表空間的管理模式挽封,通過位圖來管理表空間的空間使用。字典管理表空間(Dictionary-Managed Tablespace簡稱DMT)
8i以前包括以后都還可以使用的一種表空間管理模式臣镣,通過數(shù)據(jù)字典管理表空間的空間使用辅愿。動段空間管理(ASSM),它首次出現(xiàn)在Oracle920里有了ASSM忆某,鏈接列表freelist被位圖所取代点待,它是一個二進制的數(shù)組,
能夠迅速有效地管理存儲擴展和剩余區(qū)塊(free block)弃舒,因此能夠改善分段存儲本質(zhì)癞埠,ASSM表空間上創(chuàng)建的段還有另外一個稱呼叫Bitmap Managed Segments(BMB 段)。
5 回滾段的作用是什么
回滾段用于保存數(shù)據(jù)修改前的映象聋呢,這些信息用于生成讀一致性數(shù)據(jù)庫信息苗踪、在數(shù)據(jù)庫恢復和Rollback時使用。一個事務(wù)只能使用一個回滾段削锰。
事務(wù)回滾:當事務(wù)修改表中數(shù)據(jù)的時候通铲,該數(shù)據(jù)修改前的值(即前影像)會存放在回滾段中,當用戶回滾事務(wù)(ROLLBACK)時器贩,ORACLE將會利用回滾段中的數(shù)據(jù)前影像來將修改的數(shù)據(jù)恢復到原來的值颅夺。
事務(wù)恢復:當事務(wù)正在處理的時候,例程失敗蛹稍,回滾段的信息保存在undo表空間中吧黄,ORACLE將在下次打開數(shù)據(jù)庫時利用回滾來恢復未提交的數(shù)據(jù)。
讀一致性:當一個會話正在修改數(shù)據(jù)時稳摄,其他的會話將看不到該會話未提交的修改稚字。 當一個語句正在執(zhí)行時,該語句將看不到從該語句開始執(zhí)行后的未提交的修改(語句級讀一致性)
當ORACLE執(zhí)行SELECT語句時厦酬,ORACLE依照當前的系統(tǒng)改變號(SYSTEM CHANGE NUMBER-SCN)來保證任何前于當前SCN的未提交的改變不被該語句處理胆描。可以想象:當一個長時間的查詢正在執(zhí)行時仗阅, 若其他會話改變了該查詢要查詢的某個數(shù)據(jù)塊昌讲,ORACLE將利用回滾段的數(shù)據(jù)前影像來構(gòu)造一個讀一致性視圖
6 日志的作用是什么
日志文件(Log File)記錄所有對數(shù)據(jù)庫數(shù)據(jù)的修改,主要是保護數(shù)據(jù)庫以防止故障,以及恢復數(shù)據(jù)時使用减噪。其特點如下:
a)每一個數(shù)據(jù)庫至少包含兩個日志文件組短绸。每個日志文件組至少包含兩個日志文件成員。
b)日志文件組以循環(huán)方式進行寫操作筹裕。
c)每一個日志文件成員對應(yīng)一個物理文件醋闭。
記錄數(shù)據(jù)庫事務(wù),最大限度地保證數(shù)據(jù)的一致性與安全性
重做日志文件:含對數(shù)據(jù)庫所做的更改記錄,這樣萬一出現(xiàn)故障可以啟用數(shù)據(jù)恢復,一個數(shù)據(jù)庫至少需要兩個重做日志文件
歸檔日志文件:是重做日志文件的脫機副本朝卒,這些副本可能對于從介質(zhì)失敗中進行恢復很必要证逻。
7 SGA主要有那些部分,主要作用是什么
系統(tǒng)全局區(qū)(SGA):是ORACLE為實例分配的一組共享緩沖存儲區(qū)抗斤,用于存放數(shù)據(jù)庫數(shù)據(jù)和控制信息囚企,以實現(xiàn)對數(shù)據(jù)庫數(shù)據(jù)的管理和操作。
SGA主要包括:
a)共享池(shared pool) :用來存儲最近執(zhí)行的SQL語句和最近使用的數(shù)據(jù)字典的數(shù)據(jù)瑞眼。
b)數(shù)據(jù)緩沖區(qū) (database buffer cache):用來存儲最近從數(shù)據(jù)文件中讀寫過的數(shù)據(jù)龙宏。
c)重作日志緩沖區(qū)(redo log buffer):用來記錄服務(wù)或后臺進程對數(shù)據(jù)庫的操作。
另外在SGA中還有兩個可選的內(nèi)存結(jié)構(gòu):
d)java pool: 用來存儲Java代碼伤疙。
e)Large pool: 用來存儲不與SQL直接相關(guān)的大型內(nèi)存結(jié)構(gòu)银酗。備份、恢復使用徒像。
GA:db_cache/shared_pool/large_pool/java_pool
db_cache: 數(shù)據(jù)庫緩存(Block Buffer)對于Oracle數(shù)據(jù)庫的運轉(zhuǎn)和性能起著非常關(guān)鍵的作用花吟,它占據(jù)Oracle數(shù)據(jù)庫SGA(系統(tǒng)共享內(nèi)存區(qū))的主要部分。Oracle數(shù)據(jù) 庫通過使用LRU算法厨姚,將最近訪問的數(shù)據(jù)塊存放到緩存中衅澈,從而優(yōu)化對磁盤數(shù)據(jù)的訪問.
shared_pool: 共享池的大小對于Oracle 性能來說都是很重要的。共享池中保存數(shù)據(jù)字典高速緩沖和完全解析或編譯的的PL/SQL 塊和SQL 語句及控制結(jié)構(gòu)
large_pool: 使用MTS配置時谬墙,因為要在SGA中分配UGA來保持用戶的會話今布,就是用Large_pool來保持這個會話內(nèi)存使用RMAN做備份的時候,要使用Large_pool這個內(nèi)存結(jié)構(gòu)來做磁盤I/O緩存器
java_pool: 為java procedure預(yù)備的內(nèi)存區(qū)域,如果沒有使用java proc,java_pool不是必須的
8 Oracle系統(tǒng)進程主要有哪些拭抬,作用是什么
數(shù)據(jù)寫進程(DBWR):負責將更改的數(shù)據(jù)從數(shù)據(jù)庫緩沖區(qū)高速緩存寫入數(shù)據(jù)文件
日志寫進程(LGWR):將重做日志緩沖區(qū)中的更改寫入在線重做日志文件
系統(tǒng)監(jiān)控 (SMON): 檢查數(shù)據(jù)庫的一致性如有必要還會在數(shù)據(jù)庫打開時啟動數(shù)據(jù)庫的恢復
進程監(jiān)控 (PMON): 負責在一個Oracle 進程失敗時清理資源
檢查點進程(CKPT):負責在每當緩沖區(qū)高速緩存中的更改永久地記錄在數(shù)據(jù)庫中時,更新控制文件和數(shù)據(jù)文件中的數(shù)據(jù)庫狀態(tài)信息部默。
歸檔進程 (ARCH):在每次日志切換時把已滿的日志組進行備份或歸檔
恢復進程 (RECO): 保證分布式事務(wù)的一致性,在分布式事務(wù)中,要么同時commit,要么同時rollback;
作業(yè)調(diào)度器(CJQ ): 負責將調(diào)度與執(zhí)行系統(tǒng)中已定義好的job,完成一些預(yù)定義的工作.
三:備份恢復類
1 備份如何分類
邏輯備份:exp/imp 指定表的邏輯備份
物理備份:
熱備份:alter tablespace begin/end backup;
冷備份:脫機備份(database shutdown)
RMAN備份
full backup/incremental backup(累積/差異)
物理備份
物理備份是最主要的備份方式。用于保證數(shù)據(jù)庫在最小的數(shù)據(jù)庫丟失或沒有數(shù)據(jù)丟失的情況下得到恢復造虎。
冷物理
冷物理備份提供了最簡單和最直接的方法保護數(shù)據(jù)庫因物理損壞丟失傅蹂。建議在以下幾種情況中使用。
對一個已經(jīng)存在大最數(shù)據(jù)量的數(shù)據(jù)庫,在晚間數(shù)據(jù)庫可以關(guān)閉份蝴,此時應(yīng)用冷物理備份犁功。
對需對數(shù)據(jù)庫服務(wù)器進行升級,(如更換硬盤)婚夫,此時需要備份數(shù)據(jù)庫信息浸卦,并在新的硬盤中恢復這些數(shù)據(jù)信息,建議采用冷物理備份案糙。
熱物理
主要是指備份過程在數(shù)據(jù)庫打開并且用戶可以使用的情況下進行限嫌。需要執(zhí)行熱物理備份的情況有:
由于數(shù)據(jù)庫性質(zhì)要求不間斷工作,因而此時只能采用熱物理備份时捌。
由于備份的要求的時間過長怒医,而數(shù)據(jù)庫只能短時間關(guān)閉時。
邏輯備份 (EXP/IMP)
邏輯備份用于實現(xiàn)數(shù)據(jù)庫對象的恢復奢讨。但不是基于時間點可完全恢復的備份策略稚叹。只能作為聯(lián)機備份和脫機備份的一種補充。
完全邏輯備份
完全邏輯備份是將整個數(shù)據(jù)庫導出到一個數(shù)據(jù)庫的格式文件中禽笑,該文件可以在不同的數(shù)據(jù)庫版本入录、操作系統(tǒng)和硬件平臺之間進行移植。
指定表的邏輯備份
通過備份工具佳镜,可以將指定的數(shù)據(jù)庫表備份出來僚稿,這可以避免完全邏輯備份所帶來的時間和財力上的浪費。
2 歸檔是什么含義
關(guān)于歸檔日志:Oracle要將填滿的在線日志文件組歸檔時,則要建立歸檔日志(archived redo log)蟀伸。其對數(shù)據(jù)庫備份和恢復有下列用處:
數(shù)據(jù)庫后備以及在線和歸檔日志文件蚀同,在操作系統(tǒng)和磁盤故障中可保證全部提交的事物可被恢復。
在數(shù)據(jù)庫打開和正常系統(tǒng)使用下啊掏,如果歸檔日志是永久保存蠢络,在線后備可以進行和使用。
數(shù)據(jù)庫可運行在兩種不同方式下:NOARCHIVELOG方式或ARCHIVELOG方式
數(shù)據(jù)庫在NOARCHIVELOG方式下使用時迟蜜,不能進行在線日志的歸檔,
數(shù)據(jù)庫在ARCHIVELOG方式下運行刹孔,可實施在線日志的歸檔
歸檔是歸檔當前的聯(lián)機redo日志文件。
SVRMGR> alter system archive log current;
數(shù)據(jù)庫只有運行在ARCHIVELOG模式下娜睛,并且能夠進行自動歸檔髓霞,才可以進行聯(lián)機備份。有了聯(lián)機備份才有可能進行完全恢復畦戒。
3 如果一個表在2004-08-04 10:30:00 被drop方库,在有完善的歸檔和備份的情況下,如何恢復
9i 新增的FLASH BACK 應(yīng)該可以;
Logminer應(yīng)該可以找出DML障斋。
有完善的歸檔和備份纵潦,先歸檔當前數(shù)據(jù)徐鹤,然后可以先恢復到刪除的時間點之前,把DROP 的表導出來邀层,然后再恢復到最后歸檔時間返敬;
手工拷貝回所有備份的數(shù)據(jù)文件
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數(shù)據(jù)庫, RMAN 可以用來備份和恢復數(shù)據(jù)庫文件涧团、歸檔日志只磷、控制文件、系統(tǒng)參數(shù)文件,也可以用來執(zhí)行完全或不完全的數(shù)據(jù)庫恢復泌绣。
RMAN有三種不同的用戶接口:COMMAND LINE方式钮追、GUI 方式(集成在OEM 中的備份管理器)、API 方式(用于集成到第三方的備份軟件中)阿迈。
具有如下特點:
1)功能類似物理備份元媚,但比物理備份強大N倍;
2)可以壓縮空塊苗沧;
3)可以在塊水平上實現(xiàn)增量刊棕;
4)可以把備份的輸出打包成備份集,也可以按固定大小分割備份集待逞;
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)快速切換與災(zāi)難性恢復,從 920開始,還開始支持物理與邏輯備用服務(wù)器怜庸。
9i中的三種數(shù)據(jù)保護模式分別是:
1)当犯、MAXIMIZE PROTECTION :最大數(shù)據(jù)保護與無數(shù)據(jù)分歧,LGWR將同時傳送到備用節(jié)點割疾,在主節(jié)點事務(wù)確認之前嚎卫,備用節(jié)點也必須完全收到日志數(shù)據(jù)。如果網(wǎng)絡(luò)不好宏榕,引起LGWR不能傳送數(shù)據(jù)拓诸,將引起嚴重的性能問題,導致主節(jié)點DOWN機担扑。
2)恰响、MAXIMIZE AVAILABILITY :無數(shù)據(jù)丟失模式,允許數(shù)據(jù)分歧涌献,允許異步傳送胚宦。
正常情況下運行在最大保護模式,在主節(jié)點與備用節(jié)點的網(wǎng)絡(luò)斷開或連接不正常時,自動切換到最大性能模式枢劝,主節(jié)點的操作還是可以繼續(xù)的井联。在網(wǎng)絡(luò)不好的情況下有較大的性能影響。
3)您旁、MAXIMIZE PERFORMANCE:這種模式應(yīng)當可以說是從8i繼承過來的備用服務(wù)器模式烙常,異步傳送,無數(shù)據(jù)同步檢查鹤盒,可能丟失數(shù)據(jù)蚕脏,但是能獲得主節(jié)點的最大性能。9i在配置DATA GUARD的時候默認就是MAXIMIZE PERFORMANCE
6 對于一個要求恢復時間比較短的系統(tǒng)(數(shù)據(jù)庫50G,每天歸檔5G)侦锯,你如何設(shè)計備份策略
數(shù)據(jù)庫比較大邏輯備份沒什么必要驼鞭,每天歸檔5G,每周三/周六自動歸檔10G尺碰,每月RMAN歸檔全庫挣棕。應(yīng)該有standby。
rman/每月一號 level 0 每周末/周三 level 1 其它每天level2
四:系統(tǒng)管理類
1. 對于一個存在系統(tǒng)性能的系統(tǒng)亲桥,說出你的診斷處理思路
ü 做statspack收集系統(tǒng)相關(guān)信息 了解系統(tǒng)大致情況/確定是否存在參數(shù)設(shè)置不合適的地方/查看top 5 event/查看topsql等
ü 查vsession_event/v
system_event開始,確定需要什么資源(db file sequential read)等洛心,深入研究v
session_wait確定詳細的資源爭用情況(p1-p3的 值:file_id/block_id/blocks等)
ü 通過vsqltext/v$sqlarea表確定disk_reads题篷、(buffer_gets/executions)值較大的SQL
2. 列舉幾種診斷IO词身、CPU、性能狀況的方法
top uptime vmstat iostat statspack sql_trace/tkprof
查vsession_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個增長到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)建一個索引,你會考慮那些因素育特,如何做以盡量減小對應(yīng)用的影響
可以先表分析一下丙号,然后測試創(chuàng)建索引前后對應(yīng)用的性能影響;
需要考慮的是該索引列不經(jīng)常更新缰冤,不是有很多重復值的情況時, 在大表中使用索引特別有效. 創(chuàng)建的索引可以跟數(shù)據(jù)表分不同表空間存儲犬缨。
在系統(tǒng)比較空閑時nologging選項(如果有dataguard則不可以使用nologging)
大的sort_ared_size或pga_aggregate_target較大
5. 對raid10 和raid5有何認識
RAID 10(或稱RAID 1+0)與RAID 0+1不同,它是用硬盤驅(qū)動器先組成RAID 1陣列锋谐,然后在RAID 1陣列之間再組成RAID 0陣列遍尺。
RAID 10模式同RAID 0+1模式一樣具有良好的數(shù)據(jù)傳輸性能截酷,但卻比RAID 0+1具有更高的可靠性涮拗。RAID 10陣列的實際容量為M×n/2,磁盤利用率為50%迂苛。RAID10也需要至少4個硬盤驅(qū)動器構(gòu)成三热,因而價格昂貴。
RAID 10的可靠性同RAID 1一樣三幻,但由于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 有缆。
Oracle 面試題集錦-技術(shù)篇
1. 解釋冷備份和熱備份的不同點以及各自的優(yōu)點
解答:熱備份針對歸檔模式的數(shù)據(jù)庫浸踩,在數(shù)據(jù)庫仍舊處于工作狀態(tài)時進行備份肘习。而冷備份指在數(shù)據(jù)庫關(guān)閉后洋闽,進行備份雕薪,適用于所有模式的數(shù)據(jù)庫边篮。熱備份的 優(yōu)點在于當備份時心傀,數(shù)據(jù)庫仍舊可以被使用并且可以將數(shù)據(jù)庫恢復到任意一個時間點循头。冷備份的優(yōu)點在于它的備份和恢復操作相當簡單略吨,并且由于冷備份的數(shù)據(jù)庫可以工作在非歸檔模式下,數(shù)據(jù)庫性能會比歸檔模式稍好魂务。(因為不必將archive log寫入硬盤)
2. 你必須利用備份恢復數(shù)據(jù)庫曼验,但是你沒有控制文件逆害,該如何解決問題呢?
解答:重建控制文件,用帶backup control file 子句的recover命令恢復
數(shù)據(jù)庫蚣驼。
3. 如何轉(zhuǎn)換init.ora到spfile?
解答:使用create spfile from pfile 命令.
4. 解釋data block , extent 和 segment的區(qū)別(這里建議用英文術(shù)語)
解答:data block是數(shù)據(jù)庫中最小的邏輯存儲單元魄幕。當數(shù)據(jù)庫的對象需要更多的物理存儲空間時,連續(xù)的data block就組成了extent . 一個數(shù)據(jù)庫對象
擁有的所有extents被稱為該對象的segment.
5. 給出兩個檢查表結(jié)構(gòu)的方法
解答:1颖杏。DESCRIBE命令
2. DBMS_METADATA.GET_DDL 包
6. 怎樣查看數(shù)據(jù)庫引擎的報錯
解答:alert log.
7. 比較truncate和delete 命令
解答:兩者都可以用來刪除表中所有的記錄纯陨。區(qū)別在于:truncate是DDL操作,它移動HWK留储,不需要 rollback segment .而Delete是DML操作, 需要rollback segment 且花費較長時間.
8. 使用索引的理由
解答:快速訪問表中的data block
9. 給出在STAR SCHEMA中的兩種表及它們分別含有的數(shù)據(jù)
解答:Fact tables 和dimension tables.fact table 包含大量的主要的信息而 dimension tables 存放對fact table 某些屬性描述的信息
10. FACT Table上需要建立何種索引?
解答:位圖索引 (bitmap index)
11. 給出兩種相關(guān)約束?
解答:主鍵和外鍵
12. 如何在不影響子表的前提下翼抠,重建一個母表
解答:子表的外鍵強制實效,重建母表获讳,激活外鍵
13. 解釋歸檔和非歸檔模式之間的不同和它們各自的優(yōu)缺點
解答:歸檔模式是指你可以備份所有的數(shù)據(jù)庫 transactions并恢復到任意一個時間點阴颖。非歸檔模式則相反,不能恢復到任意一個時間點丐膝。但是非歸檔模式可以帶來數(shù)據(jù)庫性能上的少許提高.
14. 如何建立一個備份控制文件?
解答:Alter database backup control file to trace.
15. 給出數(shù)據(jù)庫正常啟動所經(jīng)歷的幾種狀態(tài) ?
解答:
STARTUP NOMOUNT – 數(shù)據(jù)庫實例啟動
STARTUP MOUNT – 數(shù)據(jù)庫裝載
STARTUP OPEN – 數(shù)據(jù)庫打開
16. 哪個column可以用來區(qū)別V視圖?
解答: INST_ID 指明集群環(huán)境中具體的 某個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的命中率?
解答:在數(shù)據(jù)庫較繁忙時帅矗,適用buffer cache advisory 工具偎肃,查詢v$db_cache_advice . 如果有必要更改,可以使用 altersystem set db_cache_size 命令
19. ORA-01555的應(yīng)對方法?
解答:具體的出錯信息是snapshot too old within rollback seg , 通郴氪耍可以通過
增大rollback seg來解決問題累颂。當然也需要察看一下具體造成錯誤的SQL文本
20. 解釋ORACLE_BASE的區(qū)別?
解答:ORACLE_BASE是oracle的根目錄,ORACLE_HOME是oracle產(chǎn)品的目錄凛俱。
21. 如何判斷數(shù)據(jù)庫的時區(qū)?
解答:SELECT DBTIMEZONE FROM DUAL;
22. 解釋GLOBAL_NAMES設(shè)為TRUE的用途
解答:GLOBAL_NAMES指明聯(lián)接數(shù)據(jù)庫的方式紊馏。如果這個參數(shù)設(shè)置為TRUE,在建立數(shù)據(jù)庫鏈接時就必須用相同的名字連結(jié)遠程數(shù)據(jù)庫
23。如何加密PL/SQL程序?
解答:WRAP
24. 解釋FUNCTION,PROCEDURE和PACKAGE區(qū)別
解答:function 和procedure是PL/SQL代碼的集合蒲犬,通常為了完成一個任務(wù)朱监。procedure 不需要返回任何值而function將返回一個值在另一
方面,Package是為了完成一個商業(yè)功能的一組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目錄結(jié)構(gòu)中?
解答:unix $ORACLE_HOME/rdbms/audit Windows the event viewer
28. 解釋materialized views的作用
解答:Materialized views 用于減少那些匯總篇裁,集合和分組的信息的集合數(shù)量沛慢。它們通常適合于數(shù)據(jù)倉庫和DSS系統(tǒng)。
29. 當用戶進程出錯达布,哪個后臺進程負責清理它
解答: PMON
30. 哪個后臺進程刷新materialized views?
解答:The Job Queue Processes.
31. 如何判斷哪個session正在連結(jié)以及它們等待的資源?
解答:VSESSION_WAIT
32. 描述什么是 redo logs
解答:Redo Logs 是用于存放數(shù)據(jù)庫數(shù)據(jù)改動狀況的物理和邏輯結(jié)構(gòu)团甲。可以用來修復數(shù)據(jù)庫.
33. 如何進行強制LOG SWITCH?
解答:ALTER SYSTEM SWITCH LOGFILE;
34. 舉出兩個判斷DDL改動的方法?
解答:你可以使用 Logminer 或 Streams
35. Coalescing做了什么?
解答:Coalescing針對于字典管理的tablespace進行碎片整理黍聂,將臨近的小extents合并成單個的大extent.
36. TEMPORARY tablespace和PERMANENTtablespace 的區(qū)別是?
解答:A temporary tablespace 用于臨時對象例如排序結(jié)構(gòu)而 permanent tablespaces用來存儲那些’真實’的對象(例如表躺苦,回滾段等)
37. 創(chuàng)建數(shù)據(jù)庫時自動建立的tablespace名稱?
解答:SYSTEM tablespace.
38. 創(chuàng)建用戶時身腻,需要賦予新用戶什么權(quán)限才能使它聯(lián)上數(shù)據(jù)庫。
解答:CONNECT
39. 如何在tablespace里增加數(shù)據(jù)文件?
解答:ALTER TABLESPACE ADD DATAFILE SIZE
40. 如何變動數(shù)據(jù)文件的大小?
解答:ALTER DATABASE DATAFILE RESIZE ;
41. 哪個VIEW用來檢查數(shù)據(jù)文件的大小?
解答: DBA_DATA_FILES
42. 哪個VIEW用來判斷tablespace的剩余空間
解答:DBA_FREE_SPACE
43. 如何判斷誰往表里增加了一條紀錄?
解答:auditing
44. 如何重構(gòu)索引?
解答: ALTER INDEX REBUILD;
45. 解釋什么是Partitioning(分區(qū))以及它的優(yōu)點匹厘。
解答:Partition將大表和索引分割成更小嘀趟,易于管理的分區(qū)。
46. 你剛剛編譯了一個PL/SQL Package但是有錯誤報道愈诚,如何顯示出錯信息?
解答:SHOW ERRORS
47. 如何搜集表的各種狀態(tài)數(shù)據(jù)?
解答: ANALYZE
The ANALYZE command.
48. 如何啟動SESSION級別的TRACE
解答: DBMS_SESSION.SET_SQL_TRACE
ALTER SESSION SET SQL_TRACE = TRUE;
49. IMPORT和SQL*LOADER 這2個工具的不同點
解答:這兩個ORACLE工具都是用來將數(shù)據(jù)導入數(shù)據(jù)庫的她按。
區(qū)別是:IMPORT工具只能處理由另一個ORACLE工具EXPORT生成
的數(shù)據(jù)。而SQL*LOADER可以導入不同的ASCII格式的數(shù)據(jù)源
50炕柔。用于網(wǎng)絡(luò)連接的2個文件?
解答: TNSNAMES.ORA and SQLNET.ORA
數(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 JOIN
LEFT OUTER JOIN:左外關(guān)聯(lián)
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(+)
結(jié)果為:所有員工及對應(yīng)部門的記錄框弛,包括沒有對應(yīng)部門編號department_id的員工記錄。
RIGHT OUTER JOIN:右外關(guān)聯(lián)
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
結(jié)果為:所有員工及對應(yīng)部門的記錄捕捂,包括沒有任何員工的部門記錄瑟枫。
FULL OUTER JOIN:全外關(guān)聯(lián)
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);
結(jié)果為:所有員工及對應(yīng)部門的記錄,包括沒有對應(yīng)部門編號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
連接類型
定義
圖示
例子
內(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.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;
交叉連接
生成笛卡爾積——它不使用任何匹配或者選取條件隙弛,而是直接將一個數(shù)據(jù)源中的每個行與另一個數(shù)據(jù)源的每個行一一匹配
select A.c1,B.c2 from A,B;
7. 說說你對索引的認識(索引的結(jié)構(gòu)架馋、對dml影響、對查詢影響全闷、為什么提高查詢性能)
索引有B-TREE叉寂、BIT、CLUSTER等類型总珠。ORACLE使用了一個復雜的自平衡B-tree結(jié)構(gòu);通常來說屏鳍,在表上建立恰當?shù)乃饕贝浚樵儠r會改 進查詢性能。但在進行插入钓瞭、刪除驳遵、修改時,同時會進行索引的修改山涡,在性能上有一定的影響超埋。有索引且查詢條件能使用索引時,數(shù)據(jù)庫會先度取索引佳鳖,根據(jù)索引內(nèi)容和查詢條件霍殴,查詢出ROWID,再根據(jù)ROWID取出需要的數(shù)據(jù)系吩。由于索引內(nèi)容通常比全表內(nèi)容要少很多来庭,因此通過先讀索引,能減少I/O穿挨,提高查詢性 能月弛。
b-tree index/bitmap index/function index/patitionalindex(local/global)索引通常能提高select/update/delete的性能,會降低insert的速度,
8. 使用索引查詢一定能提高查詢的性能嗎?為什么
通常,通過索引查詢數(shù)據(jù)比全表掃描要快.但是我們也必須注意到它的代價.
索引需要空間來存儲,也需要定期維護, 每當有記錄在表中增減或索引列被修改時,索引本身也會被修改. 這意味著每條記錄的INSERT,DELETE,UPDATE將為此多付出4,5 次的磁盤I/O. 因為索引需要額外的存儲空間和處理,那些不必要的索引反而會使查詢反應(yīng)時間變慢.使用索引查詢不一定能提高查詢性能,索引范圍查詢(INDEX RANGE SCAN)適用于兩種情況:
基于一個范圍的檢索,一般查詢返回結(jié)果集小于表中記錄數(shù)的30%宜采用;
基于非唯一性索引的檢索
索引就是為了提高查詢性能而存在的,如果在查詢中索引沒有提高性能,只能說是用錯了索引,或者講是場合不同
9. 綁定變量是什么科盛?綁定變量有什么優(yōu)缺點帽衙?
綁定變量是指在SQL語句中使用變量,改變變量的值來改變SQL語句的執(zhí)行結(jié)果贞绵。
優(yōu)點:使用綁定變量厉萝,可以減少SQL語句的解析,能減少數(shù)據(jù)庫引擎消耗在SQL語句解析上的資源榨崩。提高了編程效率和可靠性谴垫。減少訪問數(shù)據(jù)庫的次數(shù), 就能實際上減少ORACLE的工作量。
缺點:經(jīng)常需要使用動態(tài)SQL的寫法母蛛,由于參數(shù)的不同翩剪,可能SQL的執(zhí)行效率不同;
綁定變量是相對文本變量來講的,所謂文本變量是指在SQL直接書寫查詢條件彩郊,
這樣的SQL在不同條件下需要反復解析,綁定變量是指使用變量來代替直接書寫條件前弯,查詢bind value在運行時傳遞,然后綁定執(zhí)行秫逝。
優(yōu)點是減少硬解析,降低CPU的爭用,節(jié)省shared_pool
缺點是不能使用histogram,sql優(yōu)化比較困難
二:數(shù)據(jù)庫基本概念類
1 Pctused and pctfree 表示什么含義有什么作用
pctused與pctfree控制數(shù)據(jù)塊是否出現(xiàn)在freelist中, pctfree控制數(shù)據(jù)塊中保留用于update的空間,當數(shù)據(jù)塊中的free space小于pctfree設(shè)置的空間時,該數(shù)據(jù)塊從freelist中去掉,當塊由于dml操作free space大于pct_used設(shè)置的空間時,該數(shù)據(jù)庫塊將被添加在freelist鏈表中恕出。
2 簡單描述tablespace / segment / extent/ block之間的關(guān)系
tablespace: 一個數(shù)據(jù)庫劃分為一個或多個邏輯單位,該邏輯單位成為表空間;每一個表空間可能包含一個或多個 Segment;
Segments: Segment指在tablespace中為特定邏輯存儲結(jié)構(gòu)分配的空間筷登。每一個段是由一個或多個extent組成剃根。包括數(shù)據(jù)段、索引段前方、回滾段和臨時段狈醉。
Extents: 一個 extent 由一系列連續(xù)的 Oracle blocks組成.ORACLE為通過extent 來給segment分配空間廉油。
Data Blocks:Oracle 數(shù)據(jù)庫最小的I/O存儲單位,一個data block對應(yīng)一個或多個分配給data file的操作系統(tǒng)塊苗傅。
table創(chuàng)建時,默認創(chuàng)建了一個data segment,每個data segment含有min extents指定的extents數(shù),每個extent據(jù)據(jù)表空間的存儲參數(shù)分配一定數(shù)量的blocks
3 描述tablespace和datafile之間的關(guān)系
一個表空間可包含一個或多個數(shù)據(jù)文件抒线。表空間利用增加或擴展數(shù)據(jù)文件擴大表空間,表空間的大小為組成該表空間的數(shù)據(jù)文件大小的和渣慕。一個datafile只能屬于一個表空間;
一個tablespace可以有一個或多個datafile,每個datafile只能在一個tablespace內(nèi), table中的數(shù)據(jù),通過hash算法分布在tablespace中的各個datafile中,tablespace是邏輯上的概念,datafile則 在物理上儲存了數(shù)據(jù)庫的種種對象嘶炭。
4 本地管理表空間和字典管理表空間的特點,ASSM有什么特點
本地管理表空間:(9i默認)空閑塊列表存儲在表空間的數(shù)據(jù)文件頭逊桦。
特點:減少數(shù)據(jù)字典表的競爭眨猎,當分配和收縮空間時會產(chǎn)生回滾,不需要合并强经。
字典管理表空間:(8i默認)空閑塊列表存儲在數(shù)據(jù)庫中的字典表里.
特點:片由數(shù)據(jù)字典管理睡陪,可能造成字典表的爭用。存儲在表空間的每一個段都會有不同的存儲字句匿情,需要合并相鄰的塊;
本地管理表空間(Locally Managed Tablespace簡稱LMT)
8i以后出現(xiàn)的一種新的表空間的管理模式兰迫,通過位圖來管理表空間的空間使用。字典管理表空間(Dictionary-Managed Tablespace簡稱DMT)
8i以前包括以后都還可以使用的一種表空間管理模式炬称,通過數(shù)據(jù)字典管理表空間的空間使用汁果。動段空間管理(ASSM),它首次出現(xiàn)在Oracle920里有了ASSM玲躯,鏈接列表freelist被位圖所取代据德,它是一個二進制的數(shù)組,
能夠迅速有效地管理存儲擴展和剩余區(qū)塊(free block)府蔗,因此能夠改善分段存儲本質(zhì)晋控,ASSM表空間上創(chuàng)建的段還有另外一個稱呼叫Bitmap Managed Segments(BMB 段)。
5 回滾段的作用是什么
回滾段用于保存數(shù)據(jù)修改前的映象姓赤,這些信息用于生成讀一致性數(shù)據(jù)庫信息、在數(shù)據(jù)庫恢復和Rollback時使用仲吏。一個事務(wù)只能使用一個回滾段不铆。
事務(wù)回滾:當事務(wù)修改表中數(shù)據(jù)的時候,該數(shù)據(jù)修改前的值(即前影像)會存放在回滾段中裹唆,當用戶回滾事務(wù)(ROLLBACK)時誓斥,ORACLE將會利用回滾段中的數(shù)據(jù)前影像來將修改的數(shù)據(jù)恢復到原來的值。
事務(wù)恢復:當事務(wù)正在處理的時候许帐,例程失敗劳坑,回滾段的信息保存在undo表空間中,ORACLE將在下次打開數(shù)據(jù)庫時利用回滾來恢復未提交的數(shù)據(jù)成畦。
讀一致性:當一個會話正在修改數(shù)據(jù)時距芬,其他的會話將看不到該會話未提交的修改涝开。 當一個語句正在執(zhí)行時,該語句將看不到從該語句開始執(zhí)行后的未提交的修改(語句級讀一致性)
當ORACLE執(zhí)行SELECT語句時框仔,ORACLE依照當前的系統(tǒng)改變號(SYSTEM CHANGE NUMBER-SCN)來保證任何前于當前SCN的未提交的改變不被該語句處理舀武。可以想象:當一個長時間的查詢正在執(zhí)行時离斩, 若其他會話改變了該查詢要查詢的某個數(shù)據(jù)塊银舱,ORACLE將利用回滾段的數(shù)據(jù)前影像來構(gòu)造一個讀一致性視圖
6 日志的作用是什么
日志文件(Log File)記錄所有對數(shù)據(jù)庫數(shù)據(jù)的修改,主要是保護數(shù)據(jù)庫以防止故障,以及恢復數(shù)據(jù)時使用跛梗。其特點如下:
a)每一個數(shù)據(jù)庫至少包含兩個日志文件組寻馏。每個日志文件組至少包含兩個日志文件成員。
b)日志文件組以循環(huán)方式進行寫操作核偿。
c)每一個日志文件成員對應(yīng)一個物理文件诚欠。
記錄數(shù)據(jù)庫事務(wù),最大限度地保證數(shù)據(jù)的一致性與安全性
重做日志文件:含對數(shù)據(jù)庫所做的更改記錄,這樣萬一出現(xiàn)故障可以啟用數(shù)據(jù)恢復,一個數(shù)據(jù)庫至少需要兩個重做日志文件
歸檔日志文件:是重做日志文件的脫機副本宪祥,這些副本可能對于從介質(zhì)失敗中進行恢復很必要聂薪。
8 Oracle系統(tǒng)進程主要有哪些,作用是什么
數(shù)據(jù)寫進程(DBWR):負責將更改的數(shù)據(jù)從數(shù)據(jù)庫緩沖區(qū)高速緩存寫入數(shù)據(jù)文件
日志寫進程(LGWR):將重做日志緩沖區(qū)中的更改寫入在線重做日志文件
系統(tǒng)監(jiān)控 (SMON): 檢查數(shù)據(jù)庫的一致性如有必要還會在數(shù)據(jù)庫打開時啟動數(shù)據(jù)庫的恢復
進程監(jiān)控 (PMON): 負責在一個Oracle 進程失敗時清理資源
檢查點進程(CKPT):負責在每當緩沖區(qū)高速緩存中的更改永久地記錄在數(shù)據(jù)庫中時,更新控制文件和數(shù)據(jù)文件中的數(shù)據(jù)庫狀態(tài)信息蝗羊。
歸檔進程 (ARCH):在每次日志切換時把已滿的日志組進行備份或歸檔
恢復進程 (RECO): 保證分布式事務(wù)的一致性,在分布式事務(wù)中,要么同時commit,要么同時rollback;
作業(yè)調(diào)度器(CJQ ): 負責將調(diào)度與執(zhí)行系統(tǒng)中已定義好的job,完成一些預(yù)定義的工作.
2. 列舉幾種診斷IO藏澳、CPU、性能狀況的方法
top uptime vmstat iostat statspack sql_trace/tkprof
查vsession_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個增長到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)建一個索引,你會考慮那些因素七芭,如何做以盡量減小對應(yīng)用的影響
可以先表分析一下素挽,然后測試創(chuàng)建索引前后對應(yīng)用的性能影響;
需要考慮的是該索引列不經(jīng)常更新狸驳,不是有很多重復值的情況時, 在大表中使用索引特別有效. 創(chuàng)建的索引可以跟數(shù)據(jù)表分不同表空間存儲预明。
在系統(tǒng)比較空閑時nologging選項(如果有dataguard則不可以使用nologging)
大的sort_ared_size或pga_aggregate_target較大
13. 存儲過程和函數(shù)的區(qū)別
存儲過程是用戶定義的一系列sql語句的集合,涉及特定表或其它對象的任務(wù)耙箍,用戶可以調(diào)用存儲過程撰糠,而函數(shù)通常是數(shù)據(jù)庫已定義的方法,它接收參數(shù)并返回某種類型的值并且不涉及特定用戶表辩昆。
14. 事務(wù)是什么?
事務(wù)是作為一個邏輯單元執(zhí)行的一系列操作阅酪,一個邏輯工作單元必須有四個屬性,稱為 ACID(原子性汁针、一致性术辐、隔離性和持久性)屬性,只有這樣才能成為一個事務(wù):
原子性:事務(wù)必須是原子工作單元;對于其數(shù)據(jù)修改施无,要么全都執(zhí)行辉词,要么全都不執(zhí)行。
一致性:事務(wù)在完成時猾骡,必須使所有的數(shù)據(jù)都保持一致狀態(tài)瑞躺。在相關(guān)數(shù)據(jù)庫中,所有規(guī)則都必須應(yīng)用于事務(wù)的修改兴想,以保持所有數(shù)據(jù)的完整性幢哨。事務(wù)結(jié)束時,所有的內(nèi)部數(shù)據(jù)結(jié)構(gòu)(如 B 樹索引或雙向鏈表)都必須是正確的嫂便。
隔離性:由并發(fā)事務(wù)所作的修改必須與任何其它并發(fā)事務(wù)所作的修改隔離捞镰。事務(wù)查看數(shù)據(jù)時數(shù)據(jù)所處的狀態(tài),要么是另一并發(fā)事務(wù)修改它之前的狀態(tài)毙替,要么是 另一事務(wù)修改它之后的狀態(tài)曼振,事務(wù)不會查看中間狀態(tài)的數(shù)據(jù)。這稱為可串行性蔚龙,因為它能夠重新裝載起始數(shù)據(jù),并且重播一系列事務(wù)映胁,以使數(shù)據(jù)結(jié)束時的狀態(tài)與原始事務(wù)執(zhí)行的狀態(tài)相同木羹。
持久性:事務(wù)完成之后,它對于系統(tǒng)的影響是永久性的。該修改即使出現(xiàn)系統(tǒng)故障也將一直保持坑填。
15. 游標的作用?如何知道游標已經(jīng)到了最后?
游標用于定位結(jié)果集的行抛人,通過判斷全局變量@@FETCH_STATUS可以判斷是否到了最后,通常此變量不等于0表示出錯或到了最后脐瑰。
16. 觸發(fā)器分為事前觸發(fā)和事后觸發(fā)妖枚,這兩種觸發(fā)有和區(qū)別。語句級觸發(fā)和行級觸發(fā)有何區(qū)別苍在。
事前觸發(fā)器運行于觸發(fā)事件發(fā)生之前绝页,而事后觸發(fā)器運行于觸發(fā)事件發(fā)生之后。通常事前觸發(fā)器可以獲取事件之前和新的字段值寂恬。
語句級觸發(fā)器可以在語句執(zhí)行前或后執(zhí)行续誉,而行級觸發(fā)在觸發(fā)器所影響的每一行觸發(fā)一次。
試題點評:通覽整個試題初肉,我們不難發(fā)現(xiàn)酷鸦,這份試題是針對SQL Server數(shù)據(jù)庫人員的。而從難度分析上來看牙咏,這份試題也屬于同類試題中比較難的了臼隔。之所以說它難,首先是限定時間的全英文試題妄壶;其次摔握,盡管這份試題主要是考核開發(fā)能力,但卻涉及到了算法的選擇和性能的調(diào)優(yōu)盯拱;最后盒发,這份試題還夾進了SQL Server數(shù)據(jù)庫的升級問題。因此狡逢,綜上所述宁舰,我們估計這是一家從事程序外包工作的外企招聘后臺開發(fā)或與后臺開發(fā)相關(guān)的SQL Server高級程序員的試題