![數(shù)據(jù)庫程序員面試分模擬題5_第1頁](http://file4.renrendoc.com/view5/M00/23/27/wKhkGGZX2A6AXHxaAALOCeJFnFg079.jpg)
![數(shù)據(jù)庫程序員面試分模擬題5_第2頁](http://file4.renrendoc.com/view5/M00/23/27/wKhkGGZX2A6AXHxaAALOCeJFnFg0792.jpg)
![數(shù)據(jù)庫程序員面試分模擬題5_第3頁](http://file4.renrendoc.com/view5/M00/23/27/wKhkGGZX2A6AXHxaAALOCeJFnFg0793.jpg)
![數(shù)據(jù)庫程序員面試分模擬題5_第4頁](http://file4.renrendoc.com/view5/M00/23/27/wKhkGGZX2A6AXHxaAALOCeJFnFg0794.jpg)
![數(shù)據(jù)庫程序員面試分模擬題5_第5頁](http://file4.renrendoc.com/view5/M00/23/27/wKhkGGZX2A6AXHxaAALOCeJFnFg0795.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
數(shù)據(jù)庫程序員面試分模擬題5簡答題1.
如何實時查看日志輸出?正確答案:在Linux中,可以使用命令“tail-f”來實時查看日志的輸出。在Windows下也有tail.exe工具,直接復(fù)制到目錄(江南博哥)C:\Windows\System32下,然后直接輸入命令“tail-f文件名”即可。
2.
Oracle中哪個包可以獲取環(huán)境變量的值?正確答案:可以通過DBMS_SYSTEM.GET_ENV來獲取環(huán)境變量的當(dāng)前生效值。[考點]系統(tǒng)包
3.
控制文件包含哪些基本內(nèi)容?正確答案:控制文件主要包含如下條目,可以通過dump控制文件內(nèi)容看到,命令為“altersystemseteventsimmediatetracenamecontrolflevel12';”,也可以通過視圖V$CONTROLFILE_RECORD_SECTION看到。
4.
什么是降序索引和升序索引?正確答案:對于升序索引(AscendingIndexes),數(shù)據(jù)庫按升序排列的順序存儲數(shù)據(jù)。索引默認(rèn)按照升序存儲列值。默認(rèn)情況下,字符數(shù)據(jù)按每個字節(jié)中包含的二進(jìn)制值排序,數(shù)值數(shù)據(jù)按從小到大排序,日期數(shù)據(jù)從早到晚排序。
降序索引(DescendingIndexes)將存儲在一個特定的列或多列中的數(shù)據(jù)按降序排序。創(chuàng)建降序索引時使用DESC關(guān)鍵字,如下:
CREATEINDEXIND_DESCONTESTDESC(ADESC,BASC);
需要注意的是,降序索引在DBA_INDEXES的INDEX_TYPE列表現(xiàn)為FUNCTION-BASED即函數(shù)索引,但是在DBA_IND_EXPRESSIONS不能體現(xiàn)其升序或降序,只能通過視圖DBA_IND_COLUMNS的DESCEND列來查詢。[考點]分類
5.
MySQL有哪幾個默認(rèn)數(shù)據(jù)庫?正確答案:在MySQL中,數(shù)據(jù)庫也可以稱為Schema。在安裝MySQL后,默認(rèn)有informationschema、mysql、performance_schema和sys這幾個數(shù)據(jù)庫,如下:
1.數(shù)據(jù)庫information_schema
information_schema是信息數(shù)據(jù)庫,是MySQL5.0新增的一個數(shù)據(jù)庫,其中保存著關(guān)于MySQL服務(wù)器所維護(hù)的所有其他數(shù)據(jù)庫的信息。information_schema提供了訪問數(shù)據(jù)庫元數(shù)據(jù)的方式。元數(shù)據(jù)是關(guān)于數(shù)據(jù)的數(shù)據(jù),例如,數(shù)據(jù)庫名或表名、列的數(shù)據(jù)類型、訪問權(quán)限等。information_schema是一個虛擬數(shù)據(jù)庫,有數(shù)個只讀表,它們實際上是視圖,而不是基本表,因此,無法看到與之相關(guān)的任何文件。
2.數(shù)據(jù)庫mysql
這個是MySQL的核心數(shù)據(jù)庫,主要存儲著數(shù)據(jù)庫的用戶、權(quán)限設(shè)置、MySQL自己需要使用的控制和管理信息。它不可以被刪除,如果對MySQL不是很了解,那么也不要輕易修改這個數(shù)據(jù)庫里面的表信息。
3.數(shù)據(jù)庫performance_schema
這是從MySOL5.5版本開始新增的一個數(shù)據(jù)庫,主要用于收集數(shù)據(jù)庫服務(wù)器性能數(shù)據(jù),需要設(shè)置參數(shù)performance_schema才可以啟動該功能。這個功能從MySQL5.6.6開始,默認(rèn)是開啟的(在MySQL5.6.6版本以下默認(rèn)是關(guān)閉的),其值為1或ON表示啟用,為0或OFF表示關(guān)閉。需要注意的是,該參數(shù)是靜態(tài)參數(shù),只能寫在f中,不能動態(tài)修改。
4.數(shù)據(jù)庫sys
MySOL5.7提供了sys系統(tǒng)數(shù)據(jù)庫。sys數(shù)據(jù)庫結(jié)合了information_schema和performance_schema的相關(guān)數(shù)據(jù),里面包含了一系列的存儲過程、自定義函數(shù)以及視圖來幫助DBA快速地了解系統(tǒng)的元數(shù)據(jù)信息,為DBA解決性能瓶頸提供了巨大幫助。sys數(shù)據(jù)庫目前只包含一個表,表名為sys_config。
另外需要注意的一點是,在MySQL5.7以前還存在一個默認(rèn)的test庫,用于測試,而在MySQL5.7及其之后的版本中去掉了該庫。
6.
Oracle刪除數(shù)據(jù)庫的方式有哪幾種?正確答案:有如下幾種方式可以用來刪除Oracle數(shù)據(jù)庫:
1)直接在OS級別調(diào)用dbca命令以靜默的方式刪除數(shù)據(jù)庫,如下所示,其中,mydb為數(shù)據(jù)庫名:
dbca-silent-deleteDatabase-sourceDBmydb
2)SQL窗口:
ALTERDATABASECLOSE;
ALTERSYSTEMENABLERESTRICTEDSESSION;
DROPDATABASE;
或
STARTUPFORCEMOUNTRESTRICT;
DROPDATABASE;
注意:強烈推薦第1種方式,對于第2種方式,若是在RAC環(huán)境中,數(shù)據(jù)庫需要設(shè)置參數(shù)CLUSTER_DATABASE為FALSE后才可以執(zhí)行DROPDATABASE,設(shè)置的命令為ALTERSYSTEMSETCLUSTER_DATABASE=FALSESID='*'SCOPE=SPFILE;。[考點]建庫與刪庫
7.
數(shù)據(jù)的物理獨立性和邏輯獨立性分別指的是什么?正確答案:數(shù)據(jù)獨立性表示應(yīng)用程序與數(shù)據(jù)庫中存儲的數(shù)據(jù)不存在依賴關(guān)系,包括數(shù)據(jù)的物理獨立性和數(shù)據(jù)的邏輯獨立性。數(shù)據(jù)庫管理系統(tǒng)的模式結(jié)構(gòu)和二級映像功能保證了數(shù)據(jù)庫中的數(shù)據(jù)具有很高的物理獨立性和邏輯獨立性。
物理獨立性是指用戶的應(yīng)用程序與存儲在磁盤上的數(shù)據(jù)庫中數(shù)據(jù)是相互獨立的。即:數(shù)據(jù)在磁盤上怎樣存儲由DBMS管理,用戶程序不需要了解,應(yīng)用程序要處理的只是數(shù)據(jù)的邏輯結(jié)構(gòu),這樣當(dāng)數(shù)據(jù)的物理存儲改變了,應(yīng)用程序不用改變。
邏輯獨立性是指用戶的應(yīng)用程序與數(shù)據(jù)庫的邏輯結(jié)構(gòu)是相互獨立的,即:當(dāng)數(shù)據(jù)的邏輯結(jié)構(gòu)改變時,用戶程序也可以不變。[考點]數(shù)據(jù)庫系統(tǒng)的組成與結(jié)構(gòu)
8.
使用SCOTT/TIGER用戶下的EMP表和DEPT表完成下列練習(xí),表的結(jié)構(gòu)說明如下:
EMP員工表(EMPNO員工號/ENAME員工姓名/JOB工作/MGR上級編號MIREDATE受雇日期/SAL薪金/COMM傭金/DEPTNO部門編號)
DEPT部門表(DEPTNO部門編號/DNAME部門名稱/LOC地點)
工資=薪金+傭金
1)列出至少有一個員工的所有部門。
2)列出薪金比“SMITH”多的所有員工。
3)列出所有員工的姓名及其直接上級的姓名。
4)列出受雇日期早于其直接上級的所有員工。
5)列出部門名稱和這些部門的員工信息,同時列出那些沒有員工的部門。
6)列出所有工作為“CLERK”辦事員的姓名及其部門名稱。
7)列出最低薪金大于1500的各種工作。
8)列出在部門“SALES”銷售部工作的員工的姓名,假定不知道銷售部的部門編號。
9)列出薪金高于公司平均薪金的所有員工。
10)列出與員工“SCOTT”從事相同工作的所有員工。
11)列出薪金等于部門編號為30的員工的薪金的所有員工的姓名和薪金。
12)列出薪金高于在部門30工作的所有員工的薪金的員工姓名和薪金。
13)列出在每個部門工作的員工數(shù)量、平均工資和平均服務(wù)期限。
14)列出所有員工的姓名、部門名稱和工資。
15)列出所有部門的詳細(xì)信息和部門人數(shù)。
16)列出各種工作的最低工資。
17)列出工作為“MANAGER”的員工的最低薪金。
18)列出所有員工的年工資,按年薪從低到高排序。正確答案:本題考查編寫SQL語句的能力,答案如下:
1)考查兩個表聯(lián)合查詢,及GROUPBY...HAVING的用法,最終的SQL如下:
SELECTDNAMEFROMSCOTT.DEPTTWHERET.DEPTNOIN(SELECTT.DEPTNOFROMSCOTT.EMPGROUPBYT.DEPTNOHAVINGCOUNT(*)>1)
2)經(jīng)典的自連接查詢,最終的SQL如下:
SELECTENAMEFROMSCOTT.EMPTWHERESAL>(SELECTSALFROMSCOTT.EMPWHEREENAMELIKE='SMITH);
3)多次對自己查詢,為表取個別名,內(nèi)部查詢可以像對象一樣引用外部的對象的字段,這里引用與編程中的作用域相似,即與{}類比,最終的SQL如下:
SELECTENANE,(SELECTENAMEFROMSCOTT.EMPWHERESCOTT.EMPNOIN(A.MGR))FROMSCOTT.EMPA;
4)日期可直接用來比較,最終的SQL如下:
SELECTENAMEFROMSCOTT.EMPAWHEREHIREDATE<(SELECTHIREDATEFROMSCOTT.EMPWHERESCOTT.EMPNOIN(A.MGR));
5)以SCOTT.DEPT表為主,左連接查詢,最終的SQL如下:
SELECTDNAME,B.*FROMSCOTT.DEPTALEFTJOINSCOTT.EMPBONA.DEPTNO=B.DEPTNO;
6)最終的SQL如下:
SELECTENAME,(SELECTDNAMEFROMSCOTT.DEPTWHERET.DEPTNOIN(A.DEPTNO))ASDNAMEFROMSCOTT.EMPAWHEREJOB='CLERK';
7)找出哪些工作的所有員工的薪金都大于1500,最終的SQL如下:
SELECTT.JOBFROMSCOTT.SCOTT.EMPTGROUPBYT.JOBHAVINGMIN(SAL)>1500;
8)經(jīng)典的兩個表連接,最終的SQL如下:
SELECTENAMEFROMSCOTT.EMPWHERET.DEPTNO=(SELECTT.DEPTNOFROMSCOTT.DEPTWHEREDNAME='SALES');
9)反復(fù)查自己,最終的SQL如下:
SELECTENAMEFROMSCOTT.EMPWHERESAL>(SELECTAVG(SAL)FROMSCOTT.EMP);
10)排除自己,最終的SQL如下:
SELECTENAMEFROMSCOTT.EMP
WHEREJOBIN(SELECTJOBFROMSCOTT.EMPWHEREENAME='SCOTT)ANDENAME!='SCOTT;
11)考查ANY的用法,且排除自己,最終的SQL如下:
SELECTENAME,SALFROMSCOTT.EMPWHERESAL=ANY(SELECTSALFROMSCOTT.EMPWHERET.DEPTNO=30)ANDT.DEPTNO!=30;
12)MAX的用法,最終的SQL如下:
SELECTSAL,ENAME
FROMSCOTT.EMPWHERESAL>(SELECTMAX(SAL)FROMSCOTT.EMPWHERET.DEPTNO=30);
13)經(jīng)典的GROUPBY用法,最終的SQL如下:
SELECTT.DEPTNO,COUNT(*),AVG(A.SAL+COMM),AVG(SYSDATE-HIREDATE)FROMSCOIT.EMPAGROUPBYT.DEPTNO;
14)經(jīng)典的兩個表的連接查詢,用具體的名稱替換一個表中的主鍵的ID(解決很多人在實際運用中會遇到的不能綁定多列的問題),也可用WHERE來查詢,與題5)比較,最終的SQL如下:
SELECTENAME,SAL+COMM,(SELECTDNAMEFROMSCOTT.DEPTAWHEREA.DEPTNO=B.DEPTNO)ASDNAMEFROMSCOTT.EMPB;
15)因為使用了SELECT*,將顯示SCOTT.DEPT和后面臨時表B的全部字段(注意:不只是SCOTT.DEPT的字段,注意*號),最終的SQL如下:
SELECT*FROMSCOTT.DEPTALEFTJOIN(SELECTDEPTNO,COUNT(*)FROMSCOTT.EMPGROUPBYDEPTNO)B
ONA.DEPTNO=B.DEPTNO;
16)考查MIN的用法,最終的SQL如下:
SELECTJOB,MIN(SAL)FROMSCOTT.EMPGROUPBYJOB;
17)因為MANAGER是值而不是字段,所以不能用小寫,最終的SQL如下:
SELECTMIN(SAL+COMM)FROMSCOTT.EMPWHEREJOB='MANAGER';
18)NVL:空轉(zhuǎn)化函數(shù)。最終的SQL如下:
SELECTENAME,(SAL+NVL(COMM,0))*12ASSALFROMSCOTT.EMPORDERBYSAL;[考點]SQL編寫
9.
創(chuàng)建GBK字符集的數(shù)據(jù)庫NEWLHR,并查看已建庫的完整語句。正確答案:[考點]創(chuàng)建數(shù)據(jù)庫
10.
什么是ASSM和MSSM?PCTFREE和PCTUSED的作用是什么?正確答案:段空間有兩種管理方式,分別是手動段空間管理(ManualSegmentSpaceManagement,MSSM)和自動段空間管理(AutoSegmentSpaceManagement,ASSM)。
自動段空間管理(ASSM),它首次出現(xiàn)在Oracle9.2中。自由列表FREELIST被位圖所取代,它是一個二進(jìn)制的數(shù)組,能夠迅速有效地管理存儲擴(kuò)展和剩余區(qū)塊(FreeBlock),因此能夠改善分段存儲本質(zhì)。ASSM會忽略PCTUSED參數(shù)而只使用PCTFREE參數(shù)。對于MSSM而言,可以設(shè)置FREELIST、PCTUSED和PCTFREE等參數(shù)來控制如何分配和使用段中的空間。
1.FREELIST(自由列表)
Oracle通過維護(hù)FREELIST列表來記錄或更新所有可用的數(shù)據(jù)塊。當(dāng)執(zhí)行INSERT語句時,Oracle首先在FREELIST列表上搜索可用的空閑數(shù)據(jù)塊,搜索成功之后將數(shù)據(jù)插入那個空閑塊。塊在。FREELIST列表中的可用性由PCTFREE參數(shù)值來決定。起初一個空塊在FREELIST列表上列出,并且會一直保留,直到空閑空間達(dá)到PCTFREE設(shè)定的值。當(dāng)一個塊被使用且達(dá)到PCTFREE設(shè)定的值之后,該塊將從FREELIST列表移除,而當(dāng)數(shù)據(jù)塊的可用空間低于PCTUSED值的時候,該塊又會回收,即重新回到FREELIST列表。Oracle使用FREELIST方式以提高數(shù)據(jù)庫性能。因此,每一個INSERT操作,Oracle僅僅需要搜索FREELIST結(jié)構(gòu),而不是搜索所有數(shù)據(jù)塊。從Oracle9i開始,引入了ASSM,它讓Oracle自動管理FREELIST。在ASSM里,Oracle使用位圖方式來標(biāo)記數(shù)據(jù)塊是否可用,這種數(shù)據(jù)塊的空間管理方式比用一個列表來管理效率更高。
2.PCTFREE(空閑率)和PCTUSED(使用率)
PCTFREE和PCTUSED這兩個參數(shù)是面試中常問到的概念。它們用來優(yōu)化數(shù)據(jù)塊空間的使用,控制數(shù)據(jù)塊是否出現(xiàn)在FREELIST中。當(dāng)創(chuàng)建或者更改任何表和索引的時候,Oracle在空間控制方面使用這兩個存儲參數(shù)。
1)PCTFREE:塊中保留用于UPDATE操作的空間百分比,當(dāng)數(shù)據(jù)占用的空間達(dá)到此上限時,新的數(shù)據(jù)將不能再插入此塊中。當(dāng)數(shù)據(jù)塊中的FREE空間小于PCTFREE設(shè)置的空間時,該數(shù)據(jù)塊從FREELIST中去掉,當(dāng)塊由于DML操作FREE空間大于PCTUSED設(shè)置的空間時,該數(shù)據(jù)庫塊將被添加在FREELIST鏈表中。對于表和索引來說,該值默認(rèn)為10%,通過查詢DBA_TABLES或DBA_INDEXES視圖的PCT_FREE列可以獲取到該屬性的值。該值適用于MSSM和ASSM。
2)PCTUSED:指定塊中數(shù)據(jù)使用空間的最低百分比;用于為插入一新行數(shù)據(jù)的最小空間的百分比。這個值決定了塊的可用狀態(tài)。可用狀態(tài)的塊可以執(zhí)行插入操作,不可用狀態(tài)的塊只能執(zhí)行刪除和修改,可用狀態(tài)的塊被放在FREELIST中。該值只針對表有效,默認(rèn)值為40%,通過查詢DBA_TABLES視圖的PCT_USED列可以獲取到該屬性的值。該值僅適用于MSSM。
若要修改表的PCTFREE和PCTUSED的值,可以使用ALTER語句修改。需要注意的是,修改之后只對新塊起作用,若要對表中原有的塊起作用,則可以使用MOVE重新組織表,SQL語句如下:
ALTERTABLET_TEST_LHRPCTFREE20;
ALTERTABLET_TEST_LHRMOVE;
若要修改索引的PCTFREE的值,可以使用如下的SQL語句:
ALTERINDEXPK_TEST_LHR
REBUILDPCTFREE20;[考點]邏輯結(jié)構(gòu)
11.
分區(qū)表常用數(shù)據(jù)字典視圖有哪些?正確答案:Oracle分區(qū)表相關(guān)數(shù)據(jù)字典視圖如下:
1)顯示數(shù)據(jù)庫所有分區(qū)表的信息:DBAPARTTABLES。
2)顯示表分區(qū)信息,顯示數(shù)據(jù)庫所有分區(qū)表的詳細(xì)分區(qū)信息:DBA_TAB_PARTITIONS。
3)顯示子分區(qū)信息,顯示數(shù)據(jù)庫所有復(fù)合分區(qū)表的子分區(qū)信息:DBA_TAB_SUBPARTITIONS。
4)顯示分區(qū)列,顯示數(shù)據(jù)庫所有分區(qū)表的分區(qū)列信息:DBA_PART_KEY_COLUMNS。
5)顯示子分區(qū)列,顯示數(shù)據(jù)庫所有分區(qū)表的子分區(qū)列信息:DBA_SUBPART_KEY_COLUMNS。[考點]分區(qū)表
12.
分布式數(shù)據(jù)庫與并行數(shù)據(jù)庫有哪些不同點?正確答案:分布式數(shù)據(jù)庫與并行數(shù)據(jù)庫的不同點如下:
1)應(yīng)用目標(biāo)不同。并行數(shù)據(jù)庫系統(tǒng)的目標(biāo)是充分發(fā)揮并行計算機的優(yōu)勢,利用系統(tǒng)中的各個處理機節(jié)點并行完成數(shù)據(jù)庫任務(wù),提高數(shù)據(jù)庫系統(tǒng)的整體性能。分布式數(shù)據(jù)庫系統(tǒng)的主要目的在于實現(xiàn)場地自治和數(shù)據(jù)的全局透明共享,而不要求利用網(wǎng)絡(luò)中的各個節(jié)點來提高系統(tǒng)處理性能。
2)實現(xiàn)方式不同。在具體實現(xiàn)方法上,并行數(shù)據(jù)庫系統(tǒng)與分布式數(shù)據(jù)庫系統(tǒng)也有著較大的不同。在并行數(shù)據(jù)庫系統(tǒng)中,為了充分利用各個節(jié)點的處理能力,各節(jié)點間可以采用高速網(wǎng)絡(luò)連接。節(jié)點間的數(shù)據(jù)傳輸代價相對較低,當(dāng)某些節(jié)點處于空閑狀態(tài)時,可以將工作負(fù)載過大的節(jié)點上的部分任務(wù)通過高速網(wǎng)傳送給空閑節(jié)點處理,從而實現(xiàn)系統(tǒng)的負(fù)載平衡。
在分布式數(shù)據(jù)庫系統(tǒng)中,為了適應(yīng)應(yīng)用的需要,各節(jié)點間一般采用局域網(wǎng)或廣域網(wǎng)相連,網(wǎng)絡(luò)帶寬較低,點到點的通信開銷較大。因此,在查詢處理時一般應(yīng)盡量減少節(jié)點間的數(shù)據(jù)傳輸量。
3)各節(jié)點的地位不同。在并行數(shù)據(jù)庫系統(tǒng)中,各節(jié)點是完全非獨立的,不存在全局應(yīng)用和局部應(yīng)用的概念,在數(shù)據(jù)處理中只能發(fā)揮協(xié)同作用,而不能有局部應(yīng)用。在分布式數(shù)據(jù)庫系統(tǒng)中,各節(jié)點除了能通過網(wǎng)絡(luò)協(xié)同完成全局事務(wù)外,各節(jié)點具有場地自治性,每個場地都是獨立的數(shù)據(jù)庫系統(tǒng),每個場地都有自己的數(shù)據(jù)庫、客戶、CPU等資源,運行自己的DBMS,執(zhí)行局部應(yīng)用,具有高度的自治性。[考點]分布式數(shù)據(jù)庫與并行數(shù)據(jù)庫
13.
什么是反連接(AntiJoin)?正確答案:反連接(AntiJoin)也是一種特殊的連接類型,通常用于從一個表中返回不在另一個數(shù)據(jù)源中的數(shù)據(jù)行。當(dāng)做子查詢展開時,Oracle經(jīng)常會把那些外部WHERE條件為NOTEXISTS、NOTIN或<>ALL的子查詢轉(zhuǎn)換成對應(yīng)的反連接。反連接分為嵌套循環(huán)反連接(NESTEDLOOPSANTI,Hint為NL_AJ)、排序合并反連接(MERGEJOINANTI,Hint為MERGE_AJ)和哈希反連接(HASHJOINANTI,Hint為HASH_AJ)。
需要注意的是,NOTIN和<>ALL對NULL值敏感,這意味著NOTIN后面的子查詢或者常量集合一旦有NULL值出現(xiàn),則整個SQL的執(zhí)行結(jié)果就會為NULL,即此時的執(zhí)行結(jié)果將不包含任何記錄。但是,NOTEXISTS對NULL值不敏感,這意味著NULL值對NOTEXISTS的執(zhí)行結(jié)果不會有什么影響。正是因為NOTIN和<>ALL對NULL值敏感,所以一旦相關(guān)的連接列上出現(xiàn)了NULL值,此時Oracle如果還按照通常的反連接的處理邏輯來處理,得到的結(jié)果就不對了。為了解決NOTIN和<>ALL對NULL值敏感的問題,Oracle推出了改良的反連接,這種反連接能夠處理NULL值,Oracle稱其為Null-AwareAntiJoin,如下例:
執(zhí)行步驟的列Operation的值為“HASHJOINANTINA”,關(guān)鍵字“NA”就是Null-Aware的縮寫,表示這里采用的不是普通的哈希反連接,而是改良后的、能夠處理NULL值的哈希反連接。
在Oracle11gR2中,Oracle是否啟用Null-AwareAntiJoin受隱含參數(shù)“_OPTIMIZER_NULL_AWARE_ANTIJOIN”控制,其默認(rèn)值為TRUE,表示啟用Null-AwareAntiJoin。如果把該參數(shù)的值修改為FALSE,那么表示Oracle就不能再用Null-AwareAntiJoin了,而又因為NOTIN對NULL值敏感,所以O(shè)racle此時也不能用普通的反連接。[考點]SQL優(yōu)化
14.
數(shù)據(jù)庫設(shè)計過程的輸入和輸出有哪些內(nèi)容?正確答案:數(shù)據(jù)庫設(shè)計過程的輸入包括四部分內(nèi)容:①總體信息需求;②處理需求;③DBMS的特征;④硬件和OS(操作系統(tǒng))特征。
數(shù)據(jù)庫設(shè)計過程的輸出包括兩部分:
1)完整的數(shù)據(jù)庫結(jié)構(gòu),包括邏輯結(jié)構(gòu)和物理結(jié)構(gòu)。
2)基于數(shù)據(jù)庫結(jié)構(gòu)和處理需求的應(yīng)用程序的設(shè)計原則。這些輸出一般以說明書的形式出現(xiàn)。[考點]數(shù)據(jù)庫系統(tǒng)的組成與結(jié)構(gòu)
15.
SQL語句的執(zhí)行過程有哪些?正確答案:Oracle數(shù)據(jù)庫里SQL語句的執(zhí)行過程可以如下圖所示。
在上圖中,可以看到SQL語句的執(zhí)行過程大致分為以下幾個步驟:
1)當(dāng)用戶提交待執(zhí)行的目標(biāo)SQL后,Oracle首先會對目標(biāo)SQL進(jìn)行解析。在這個過程中,Oracle會先執(zhí)行對目標(biāo)SQL的語法、語義和權(quán)限的檢查:
①語法檢查(SyntaxCheck)是檢查目標(biāo)SQL的拼寫是否正確,例如,錯將關(guān)鍵字“FROM”寫成“FORM”,將“SELECT”寫成“SELET”等。
②語義檢查(SemanticCheck)是檢查SQL語句中的訪問對象是否存在及該用戶是否具備相應(yīng)的權(quán)限。
2)如果目標(biāo)SQL不能通過上述語法、語義和權(quán)限的檢查,那么該目標(biāo)SQL將解析失敗。如果目標(biāo)SQL能通過上述檢查,那么接下來Oracle就會去SGA的共享池中的庫緩存中查找是否存在匹配的共享游標(biāo)。如果找到了匹配的共享游標(biāo),那么Oracle就會把存儲于該共享游標(biāo)中的解析樹和執(zhí)行計劃直接拿過來重用,這相當(dāng)于跳過了后續(xù)的“查詢轉(zhuǎn)換”和“查詢優(yōu)化”這兩個步驟,直接進(jìn)入“實際執(zhí)行”階段。
3)如果找不到匹配的共享游標(biāo),就意味著此時沒有可以被重用的解析樹和執(zhí)行計劃,那么接下來整個執(zhí)行過程就進(jìn)入查詢轉(zhuǎn)換這一步。在查詢轉(zhuǎn)換過程中,Oracle會根據(jù)一些規(guī)則來決定是否對目標(biāo)SQL執(zhí)行查詢轉(zhuǎn)換,這些規(guī)則在Oracle不同的版本里不盡相同。在Oracle9i中,查詢轉(zhuǎn)換是獨立于優(yōu)化器的,它與優(yōu)化器的類型無關(guān),但是從Oracle10g開始,0racle會對某些類型的查詢轉(zhuǎn)換(比如子查詢展開、復(fù)雜視圖合并等)分別計算經(jīng)過查詢轉(zhuǎn)換后的等價改寫SQL的成本和原始SQL的成本。只有當(dāng)?shù)葍r改寫后SQL的成本值小于未經(jīng)過查詢轉(zhuǎn)換的原始SQL的成本值時,Oracle才會對目標(biāo)SQL執(zhí)行查詢轉(zhuǎn)換。在執(zhí)行完查詢轉(zhuǎn)換后,原目標(biāo)SQL可能就被Oracle改寫了,當(dāng)然也有可能沒有改寫。
4)接下來,Oracle就正式進(jìn)入了查詢優(yōu)化這個步驟。在這個步驟里,Oracle會根據(jù)不同的優(yōu)化器類型(CBO或RBO)采用不同的判斷原則,從執(zhí)行完查詢轉(zhuǎn)換后得到的目標(biāo)SQL的諸多可能的執(zhí)行路徑中選擇一條效率最高的路徑來作為其執(zhí)行計劃,即查詢優(yōu)化的輸入就是執(zhí)行完查詢轉(zhuǎn)換后得到的等價改寫SQL,其輸出就是該目標(biāo)SQL的最終執(zhí)行計劃。
5)在得到了目標(biāo)SQL的執(zhí)行計劃后,接下來Oracle就會根據(jù)執(zhí)行計劃去實際執(zhí)行該SQL,并將執(zhí)行結(jié)果返回給用戶。[考點]游標(biāo)
16.
MVCC的含義是什么?正確答案:在多用戶的系統(tǒng)里,假設(shè)有多個用戶同時讀寫數(shù)據(jù)庫里的一行記錄,那么怎么保證數(shù)據(jù)的一致性呢?一種基本的解決方法是對這一行記錄加上一把鎖,將不同用戶對同一行記錄的讀寫操作完全串行化執(zhí)行,由于同一時刻只有一個用戶在操作,因此一致性不存在問題。但是,它存在明顯的性能問題:讀會阻塞寫,寫也會阻塞讀,整個數(shù)據(jù)庫系統(tǒng)的并發(fā)性能將大打折扣。
MVCC(Multi-VersionConcurrentControl,多版本并發(fā)控制)的目標(biāo)是在保證數(shù)據(jù)一致性的前提下,提供一種高并發(fā)的訪問性能。在MVCC協(xié)議中,每個用戶在連接數(shù)據(jù)庫時看到的是一個具有一致性狀態(tài)的鏡像,每個事務(wù)在提交到數(shù)據(jù)庫之前對其他用戶均是不可見的。當(dāng)事務(wù)需要更新數(shù)據(jù)時,不會直接覆蓋以前的數(shù)據(jù),而是生成一個新的版本的數(shù)據(jù),因此一條數(shù)據(jù)會有多個版本存儲,但是同一時刻只有最新的版本號是有效的。因此,讀的時候就可以保證總是以當(dāng)前時刻的版本的數(shù)據(jù)可以被讀到,不論這條數(shù)據(jù)后來是否被修改或刪除。
大多數(shù)的MySQL事務(wù)型存儲引擎,例如InnoDB、Falcon以及PBXT都不使用簡單的行鎖機制,它們都和MVCC機制來一起使用。MVCC不只使用在MySQL中,Oracle、PostgreSQL以及其他一些數(shù)據(jù)庫系統(tǒng)也同樣使用它。
可以將MVCC看成行級鎖的一種妥協(xié),它在許多情況下避免了使用鎖,同時可以提供更小的開銷。根據(jù)實現(xiàn)的不同,它可以允許非阻塞讀,在寫操作進(jìn)行時,只鎖定需要的記錄。MVCC會保存某個時間點上的數(shù)據(jù)快照,這意味著事務(wù)可以看到一個一致的數(shù)據(jù)視圖,而不管它們需要運行多久。這同時也意味著不同的事務(wù)在同一個時間點看到的同一個表的數(shù)據(jù)可能是不同的。
使用MVCC多版本并發(fā)控制相比鎖定模型的主要優(yōu)點是,在MVCC里,對檢索(讀)數(shù)據(jù)的鎖要求與寫數(shù)據(jù)的鎖要求不沖突,所以,讀不會阻塞寫,而寫也從不阻塞讀。在數(shù)據(jù)庫里也有表和行級別的鎖定機制,用于給那些無法輕松接受MVCC行為的應(yīng)用。不過,恰當(dāng)?shù)厥褂肕VCC總會提供比鎖更好的性能。
17.
如何查找最近1min內(nèi),最消耗CPU的SQL語句及會話信息?正確答案:最消耗CPU的SQL語句可以根據(jù)V$ACTIVE_SESSION_HISTORY視圖來獲取,取“SESSION_STATE='ONCPU'”,若查詢最消耗I/O的SQL語句則可以取“WAIT_CLASS='USERI/O'”。[考點]性能診斷
18.
Oracle的異常可以分為哪幾類?正確答案:Oracle將異常分為預(yù)定義異常、非預(yù)定義異常和自定義異常三種。
1.預(yù)定義異常(Predefined)
當(dāng)PL/SQL應(yīng)用程序違反了Oracle規(guī)定的限制時,就會隱含地觸發(fā)一個內(nèi)部異常,這就是預(yù)定義異常。預(yù)定義異常用于處理常見的Oracle錯誤,對這種異常情況的處理,無須在程序中定義,由Oracle自動將其觸發(fā)。它們?nèi)糠旁赑L/SQL自帶的標(biāo)準(zhǔn)包中,這樣程序員就無須再次定義了。預(yù)定義異常大約有20多個,下表是一些常見的預(yù)定義異常。錯誤號異常錯誤信息名稱說明ORA-01403NO_DATA_FOUNDSELECTINTO沒有找到數(shù)據(jù)ORA-01422TOO_MANY_ROWSSELECTINTO返回多行ORA-06501PROGRAM_ERROR內(nèi)部錯誤,需重新安裝數(shù)據(jù)字典視圖和PL/SQL包ORA-06511CURSOR_ALREADY_OPEN試圖打開一個已存在的游標(biāo)ORA-06530ACCESS_INTO_NULL試圖為NULL對象的屬性賦值ORA-01012NOT_LOGGED_ON沒有連接到OracleORA-01001INVALID_CU
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國變速箱第一軸市場調(diào)查研究報告
- 2025年中國兩用拉力器市場調(diào)查研究報告
- 2025至2031年中國閉路監(jiān)控器材行業(yè)投資前景及策略咨詢研究報告
- 2025年聚氨酯耐用油底漆項目可行性研究報告
- 2025年石油公司油票管理系統(tǒng)項目可行性研究報告
- 2025年燃?xì)獬瑝呵袛嚅y項目可行性研究報告
- 2025年橫梁總成項目可行性研究報告
- 惠州2025年廣東惠州龍門縣總醫(yī)院第一批招聘編外人員25人筆試歷年參考題庫附帶答案詳解
- 2025年平紋桃皮絨面料項目可行性研究報告
- 2025年沖壓模具項目可行性研究報告
- 2024年04月浙江義烏農(nóng)商銀行春季招考筆試歷年參考題庫附帶答案詳解
- 涉密計算機保密培訓(xùn)
- 掛靠免責(zé)協(xié)議書范本
- 2024年浙江省五校聯(lián)盟高考地理聯(lián)考試卷(3月份)
- 在線心理健康咨詢行業(yè)現(xiàn)狀分析及未來三至五年行業(yè)發(fā)展報告
- 電動三輪車購銷合同
- 淋巴瘤的免疫靶向治療
- 炎癥性腸病的自我管理
- 國防動員課件教學(xué)課件
- 《地理信息系統(tǒng)GIS》全套教學(xué)課件
- 技術(shù)序列學(xué)習(xí)地圖(2023年)
評論
0/150
提交評論