Oracle程序員面試分類模擬46_第1頁
Oracle程序員面試分類模擬46_第2頁
Oracle程序員面試分類模擬46_第3頁
Oracle程序員面試分類模擬46_第4頁
Oracle程序員面試分類模擬46_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

Oracle程序員面試分類模擬46簡答題1.

進(jìn)程與線程有什么區(qū)別?正確答案:進(jìn)程是具有一定獨(dú)立功能的程序關(guān)于某個(gè)數(shù)據(jù)集合上的一次運(yùn)行活動(dòng),它是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位。例如,用戶運(yùn)行(江南博哥)自己的程序,系統(tǒng)就創(chuàng)建一個(gè)進(jìn)程,并為它分配資源,包括各種表格、內(nèi)存空間、磁盤空間、I/O設(shè)備等,然后該進(jìn)程被放入到進(jìn)程的就緒隊(duì)列,進(jìn)程調(diào)度程序選中它,為它分配CPU及其他相關(guān)資源,該進(jìn)程就被運(yùn)行起來。

線程是進(jìn)程的一個(gè)實(shí)體,是CPU調(diào)度和分配的基本單位,線程基本上不擁有系統(tǒng)資源,只擁有一點(diǎn)在運(yùn)行中必不可少的資源(如程序計(jì)數(shù)器、一組寄存器和棧),但是它可以與同屬一個(gè)進(jìn)程的其他的線程共享進(jìn)程所擁有的全部資源。

在沒有實(shí)現(xiàn)線程的操作系統(tǒng)中,進(jìn)程既是資源分配的基本單位,又是調(diào)度的基本單位,它是系統(tǒng)中并發(fā)執(zhí)行的單元。而在實(shí)現(xiàn)了線程的操作系統(tǒng)中,進(jìn)程是資源分配的基本單位,而線程是調(diào)度的基本單位,是系統(tǒng)中并發(fā)執(zhí)行的單元。

需要注意的是,盡管線程與進(jìn)程很相似,但兩者也存在著很大的不同,區(qū)別如下:

1)一個(gè)線程必定屬于也只能屬于一個(gè)進(jìn)程;而一個(gè)進(jìn)程可以擁有多個(gè)線程并且至少擁有一個(gè)線程。

2)屬于一個(gè)進(jìn)程的所有線程共享該線程的所有資源,包括打開的文件、創(chuàng)建的Socket等。不同的進(jìn)程互相獨(dú)立。

3)線程又被稱為輕量級(jí)進(jìn)程。進(jìn)程有進(jìn)程控制塊,線程也有線程控制塊。但線程控制塊比進(jìn)程控制塊小得多。線程之間切換代價(jià)小,進(jìn)程之間切換代價(jià)大。

4)進(jìn)程是程序的一次執(zhí)行,線程可以理解為程序中一個(gè)程序片段的執(zhí)行。

5)每個(gè)進(jìn)程都有獨(dú)立的內(nèi)存空間,而線程共享其所屬進(jìn)程的內(nèi)存空間。

程序、進(jìn)程與線程的區(qū)別見下表。程序、進(jìn)程與線程的區(qū)別名稱描述程序一組指令的有序結(jié)合,是靜態(tài)的指令,是永久存在的進(jìn)程具有一定獨(dú)立功能的程序關(guān)于某個(gè)數(shù)據(jù)集合上的一次運(yùn)行活動(dòng),是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單元。進(jìn)程的存在是暫時(shí)的,是一個(gè)動(dòng)態(tài)概念線程線程一個(gè)實(shí)體,是CPU調(diào)度和的基本單元,是比進(jìn)程更小的能獨(dú)立運(yùn)行的基本單元。本身基本上不擁有系統(tǒng)資源,只擁有一點(diǎn)在運(yùn)行中必不可少的資源(如程序計(jì)數(shù)器,一組寄存器和棧)。一個(gè)線程可以創(chuàng)建和撤銷另-個(gè)線程,同一個(gè)進(jìn)程中的多個(gè)線程之間可以并發(fā)執(zhí)行

簡而言之,一個(gè)程序至少有一個(gè)進(jìn)程,一個(gè)進(jìn)程至少有一個(gè)線程。

2.

進(jìn)程mman、mmnl和mmon這3個(gè)進(jìn)程的作用分別是什么?正確答案:從如下的輸出結(jié)果可以看到,每個(gè)ASM實(shí)例或數(shù)據(jù)庫實(shí)例都有這3個(gè)進(jìn)程:

其中:

1)MMAN(MemoryManagerProcess,內(nèi)存管理進(jìn)程)進(jìn)程會(huì)隨著時(shí)間推移,根據(jù)系統(tǒng)負(fù)載的變化和內(nèi)存需要,自動(dòng)調(diào)整SGA中各個(gè)組件的內(nèi)存大小。

2)MMON(ManageabilityMonitorProcess,可管理性監(jiān)視器進(jìn)程)和它的slave進(jìn)程(Mnnn)主要用來維護(hù)AWR信息和各種與可管理性相關(guān)的后臺(tái)任務(wù),具體包括:①啟動(dòng)slave進(jìn)程Mnnn去做AWR快照。若MMON進(jìn)程HANG住,則AWR不可用。②當(dāng)某個(gè)測量值(metrics)超過了其度量閥值(thresholdvalue)時(shí)發(fā)出ALERT告警。③為最近改變過的SQL對(duì)象捕獲指標(biāo)信息。

3)MMNL(ManageabilityMonitorLiteProcess)將SGA中的ASH(ActiveSessionHistory)Buffer中的統(tǒng)計(jì)資料寫到磁盤。當(dāng)ASHBuffer滿的時(shí)候MMNL會(huì)把它寫到磁盤上。

3.

Oracle中有哪些常用的字符函數(shù)?正確答案:常用的有如下幾個(gè)函數(shù):

1)lower(char):將字符串全部轉(zhuǎn)化為小寫的格式。

2)upper(char):將字符串全部轉(zhuǎn)化為大寫的格式。

3)initcap('SQLcourse'):每個(gè)單詞的首字母大寫,其余變?yōu)樾?,結(jié)果:SqlCourse。

4)concat('Hello','World'):字符串連接,結(jié)果:HelloWorld。

5)length(char):返回字符串的長度。

6)substr(char,m,n):取字符串的子串,m表示起點(diǎn),n代表取n個(gè)字符的意思。

7)replace(char1,search_string,replace_string):替換函數(shù)。

8)instr(char1,char2,[,n[,m]]):取子串在字符串的位置,特別取某一個(gè)特殊字符在原字符串中的位置。

9)trim('

Hello

World

'):前后去掉空格,結(jié)果為:“Hello

world”。

10)ltrim('

Hello

World

'):左邊去掉空格,結(jié)果為:“Hello

World

”。

11)rtrim('

Hello

World

'):右邊去掉空格,結(jié)果為:“Hello

World”。

12)lpad(salary,10,'*'):左補(bǔ)齊,結(jié)果:*****24000。

13)rpad(salary,10,'*'):右補(bǔ)齊,結(jié)果:24000*****。

14)chr():將ASCII碼轉(zhuǎn)換為字符。

15)ascii():將字符轉(zhuǎn)換為ASCII碼。

4.

簡述一個(gè)UPDATE語句在數(shù)據(jù)庫中是怎樣執(zhí)行的?正確答案:事務(wù)使用Undo段來記錄變化前的數(shù)據(jù)(前鏡像),假定發(fā)出了如下的一個(gè)更新語句:

下面看一下這個(gè)語句是怎樣執(zhí)行的(為了敘述方便,這里盡量簡化了情況):

1)檢查EMPNO=7788記錄所在的數(shù)據(jù)塊是否在BufferCache中,若不存在則從數(shù)據(jù)文件讀取到BufferCache中。

2)在Undo表空間的相應(yīng)Undo段事務(wù)表上分配事務(wù)槽,這個(gè)操作需要記錄Redo信息。

3)從Undo段讀入或者在BufferCache中創(chuàng)建SAL=3000的前鏡像,這需要產(chǎn)生Redo信息并記入RedoLogBuffer。

4)修改BufferCache中的SAL=4000,該數(shù)據(jù)被標(biāo)識(shí)為“臟數(shù)據(jù)”,這是UPDATE的數(shù)據(jù)變更,需要記入RedoLogBuffer。

5)當(dāng)用戶發(fā)出提交(COMMIT)命令時(shí),LGWR進(jìn)程將RedoLogBuffer中的“臟數(shù)據(jù)”寫入RedoLogFile中,并將Undo塊事務(wù)標(biāo)記為已提交(INACTIVE)。

6)當(dāng)發(fā)生檢查點(diǎn)(Checkpoint)時(shí),CKPT進(jìn)程更新控制文件和所有數(shù)據(jù)文件的文件頭中的檢查點(diǎn)信息,并通知DBWn進(jìn)程負(fù)責(zé)將BufferCache中的臟數(shù)據(jù)寫入到數(shù)據(jù)文件中。

5.

數(shù)據(jù)庫的常見分類有哪些?正確答案:數(shù)據(jù)庫可以按照存儲(chǔ)模型、關(guān)系型/非關(guān)系型來進(jìn)行分類,其分類如圖所示。

數(shù)據(jù)庫的總體分類圖

1.網(wǎng)狀數(shù)據(jù)庫、層次數(shù)據(jù)庫

數(shù)據(jù)庫若按照使用的數(shù)據(jù)存儲(chǔ)模型來劃分,則可以把數(shù)據(jù)庫分為網(wǎng)狀數(shù)據(jù)庫(NetworkDatabase)、關(guān)系型數(shù)據(jù)庫(RelationalDatabase)和層次數(shù)據(jù)庫(HierarchicalDatabase)。其中,商業(yè)中使用最廣泛的數(shù)據(jù)庫主要是關(guān)系型數(shù)據(jù)庫,例如,Oracle、MySQL、DB2、SQLServer等。

網(wǎng)狀數(shù)據(jù)庫(NetworkDatabase)是指處理以記錄類型為節(jié)點(diǎn)的網(wǎng)狀數(shù)據(jù)模型的數(shù)據(jù)庫,處理方法是將網(wǎng)狀結(jié)構(gòu)分解成若干棵二級(jí)樹結(jié)構(gòu),稱為系,其代表是DBTG(DataBaseTaskGroup,數(shù)據(jù)庫任務(wù)組)系統(tǒng)。系類型是兩個(gè)或兩個(gè)以上的記錄類型之間聯(lián)系的一種描述。在一個(gè)系類型中,有一個(gè)記錄類型處于主導(dǎo)地位,稱為系主記錄類型,其他稱為成員記錄類型。系主和成員之間的聯(lián)系是一對(duì)多的關(guān)系。1969年美國的CODASYL組織提出了一份“DBTG報(bào)告”,以后,根據(jù)DBTG報(bào)告實(shí)現(xiàn)的系統(tǒng)一般稱為DBTG系統(tǒng)?,F(xiàn)有的網(wǎng)狀數(shù)據(jù)庫系統(tǒng)大都是采用DBTG方案。DBTG系統(tǒng)是典型的三級(jí)結(jié)構(gòu)體系:子模式、模式、存儲(chǔ)模式。相應(yīng)的數(shù)據(jù)定義語言分別稱為子模式定義語言SSDDL(SubSchemaDataDefinitionLanguage),模式定義語言SDDL(SchemaDataDefinitionLanguage),設(shè)備介質(zhì)控制語言DMCL(DeviceMediumControlLanguage),另外,還有數(shù)據(jù)操縱語言DML(DataManipulationLanguage)。

層次數(shù)據(jù)庫(HierarchicalDatabase)也稱為樹狀數(shù)據(jù)庫,它是將數(shù)據(jù)組織成有向有序的樹結(jié)構(gòu),并用“一對(duì)多”的關(guān)系聯(lián)結(jié)不同層次的數(shù)據(jù)庫。最著名最典型的層次數(shù)據(jù)庫是IBM公司的IMS(InformationManagementSystem)數(shù)據(jù)庫。IMS是IBM公司研制的最早的大型數(shù)據(jù)庫管理系統(tǒng),其數(shù)據(jù)庫模式是多個(gè)物理數(shù)據(jù)庫記錄型(PDBR,PhysicalDataBaseRecord)的集合。每個(gè)PDBR對(duì)應(yīng)層次數(shù)據(jù)模型的一個(gè)層次模式。各個(gè)用戶所需數(shù)據(jù)的邏輯結(jié)構(gòu)稱為外模式,每個(gè)外模式是一組邏輯數(shù)據(jù)庫記錄型(LDBR,LogicalDataBaseRecord)的集合。LDBR是應(yīng)用程序所需的局部邏輯結(jié)構(gòu)。

2.關(guān)系型數(shù)據(jù)庫

RDBMS(RelationalDatabaseManagementSystem,關(guān)系型數(shù)據(jù)庫管理系統(tǒng))是E.F.Codd博士在其發(fā)表的論文《大規(guī)模共享數(shù)據(jù)銀行的關(guān)系型模型》(CommunicationsoftheACM雜志1970年6月刊)基礎(chǔ)上設(shè)計(jì)出來的。關(guān)系型數(shù)據(jù)庫是將數(shù)據(jù)組織為相關(guān)的行和列的系統(tǒng),而管理關(guān)系型數(shù)據(jù)庫的計(jì)算機(jī)軟件就是RDBMS。它通過數(shù)據(jù)、關(guān)系和對(duì)數(shù)據(jù)的約束三者組成的數(shù)據(jù)模型來存放和管理數(shù)據(jù)。自關(guān)系型數(shù)據(jù)庫管理系統(tǒng)被提出以來,RDBMS獲得了長足的發(fā)展,許多企業(yè)的在線交易處理系統(tǒng)、內(nèi)部財(cái)務(wù)系統(tǒng)、客戶管理系統(tǒng)等采用了RDBMS。

關(guān)系型數(shù)據(jù)庫,顧名思義是建立在關(guān)系模型基礎(chǔ)上的數(shù)據(jù)庫,借助于集合代數(shù)等數(shù)學(xué)概念和方法來處理數(shù)據(jù)庫中的數(shù)據(jù)?,F(xiàn)實(shí)世界中的各種實(shí)體以及實(shí)體之間的各種聯(lián)系均用關(guān)系模型來表示。結(jié)構(gòu)化查詢語言(StructuredQueryLanguage,簡稱SQL)就是一種基于關(guān)系型數(shù)據(jù)庫的語言,這種語言執(zhí)行對(duì)關(guān)系型數(shù)據(jù)庫中數(shù)據(jù)的檢索和操作。關(guān)系模型由關(guān)系數(shù)據(jù)結(jié)構(gòu)、關(guān)系操作集合、關(guān)系完整性約束三部分組成。截至2017年,業(yè)界普遍使用的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)產(chǎn)品有Oracle、MySQL、DB2以及SQLServer等。若按照大小來分類的話,則關(guān)系型數(shù)據(jù)庫可以簡單分為如下幾類:①小型數(shù)據(jù)庫:Access、foxbase。②中型數(shù)據(jù)庫:MySQL、SQLServer、Informix。③大型數(shù)據(jù)庫:Oracle、DB2。

RDBMS的特點(diǎn)如下:①數(shù)據(jù)以表格的形式出現(xiàn)。②每一行存儲(chǔ)著一條單獨(dú)的記錄。③每個(gè)列作為一條記錄的一個(gè)屬性而存在。④許多的行和列組成一張表。⑤若干的表組成數(shù)據(jù)庫。

3.內(nèi)存數(shù)據(jù)庫

內(nèi)存數(shù)據(jù)庫,顧名思義就是將數(shù)據(jù)放在內(nèi)存中直接操作的數(shù)據(jù)庫。相對(duì)于磁盤,內(nèi)存的數(shù)據(jù)讀寫速度要高出幾個(gè)數(shù)量級(jí),將數(shù)據(jù)保存在內(nèi)存中相比從磁盤上訪問能夠極大地提高應(yīng)用的性能,典型的內(nèi)存數(shù)據(jù)庫有SQLite和TimesTen。SAP公司專門開發(fā)了一款大型的內(nèi)存數(shù)據(jù)庫HANA,并且在逐步占領(lǐng)市場,而傳統(tǒng)的數(shù)據(jù)庫巨頭Oracle公司開發(fā)的TimesTen也是一款內(nèi)存數(shù)據(jù)庫。可以預(yù)見,內(nèi)存數(shù)據(jù)庫將會(huì)是未來的一個(gè)發(fā)展趨勢。

4.Oracle、MySQL、SQLServer

Oracle數(shù)據(jù)庫,又名OracleRDBMS,或簡稱Oracle,是甲骨文公司的一款關(guān)系型數(shù)據(jù)庫管理系統(tǒng)。它是一款一直處于領(lǐng)先地位的數(shù)據(jù)庫領(lǐng)域產(chǎn)品。可以說Oracle數(shù)據(jù)庫系統(tǒng)是目前世界上流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),系統(tǒng)可移植性好、使用方便、功能強(qiáng)大,適用于各類大、中、小、微機(jī)環(huán)境。它是一種高效率、可靠性好、適應(yīng)高吞吐量的數(shù)據(jù)庫解決方案。

MySQL是一個(gè)關(guān)系型數(shù)據(jù)庫管理系統(tǒng),由瑞典MySQLAB公司開發(fā),目前屬于Oracle公司。MySQL是最流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),在Web應(yīng)用方面,MySQL是最好的RDBMS(RelationalDatabaseManagementSystem,關(guān)系型數(shù)據(jù)庫管理系統(tǒng))應(yīng)用軟件之一,廣泛地應(yīng)用于互聯(lián)網(wǎng)行業(yè)。

SQLServer(MicrosoftSQLServer,MSServer)是由Microsoft開發(fā)和推廣的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(DBMS),它最初是由Microsoft、Sybase和Ashton-Tate三家公司共同開發(fā)的,并于1988年推出了第一個(gè)OS/2版本。SQLServer是一個(gè)全面的數(shù)據(jù)庫平臺(tái),使用集成的商業(yè)智能(BusinessIntelligence,簡稱BI)工具提供了企業(yè)級(jí)的數(shù)據(jù)管理。SQLServer數(shù)據(jù)庫引擎為關(guān)系型數(shù)據(jù)和結(jié)構(gòu)化數(shù)據(jù)提供了更安全可靠的存儲(chǔ)功能,使用戶可以構(gòu)建和管理用于業(yè)務(wù)的高可用和高性能的數(shù)據(jù)應(yīng)用程序。SQLServer近年來不斷更新版本,目前最新的版本是SQLServer2016,并且微軟正在研發(fā)基于Linux版本的SQLServer,可見SQLServer在關(guān)系型數(shù)據(jù)庫中也占有一席之地。

常見的關(guān)系型數(shù)據(jù)庫的特點(diǎn)見表1。

5.非關(guān)系型數(shù)據(jù)庫

NoSQL(NotOnlySQL)泛指非關(guān)系型的數(shù)據(jù)庫,即“不僅僅是SQL”。隨著Web2.0的興起,傳統(tǒng)的關(guān)系型數(shù)據(jù)庫在應(yīng)付Web2.0網(wǎng)站,特別是超大規(guī)模和高并發(fā)的SNS(SocialNetworkSite,社交網(wǎng))類型的Web2.0純動(dòng)態(tài)網(wǎng)站時(shí)已經(jīng)顯得力不從心,暴露了很多難以克服的問題,而非關(guān)系型數(shù)據(jù)庫則由于其本身的特點(diǎn)得到了非常迅速的發(fā)展。NoSQL數(shù)據(jù)庫的產(chǎn)生就是為了解決大規(guī)模數(shù)據(jù)集合多重?cái)?shù)據(jù)種類帶來的挑戰(zhàn),尤其是大數(shù)據(jù)應(yīng)用難題。NoSQL的擁護(hù)者們提倡運(yùn)用非關(guān)系型的數(shù)據(jù)存儲(chǔ),相對(duì)于鋪天蓋地的關(guān)系型數(shù)據(jù)庫運(yùn)用,這一概念無疑是一種全新的思維的注入。

NoSQL數(shù)據(jù)庫大約有四大分類:鍵值(Key-Value)數(shù)據(jù)庫、列存儲(chǔ)數(shù)據(jù)庫、文檔型數(shù)據(jù)庫和圖形(Graph)數(shù)據(jù)庫。

1)對(duì)于鍵值(Key-Value)數(shù)據(jù)庫,主要會(huì)使用到一個(gè)哈希表,這個(gè)表中有一個(gè)特定的鍵和一個(gè)指向特定數(shù)據(jù)的指針。Key-Value模型對(duì)于信息系統(tǒng)來說,其優(yōu)勢在于簡單、易部署,但是如果只對(duì)部分值進(jìn)行查詢或更新,那么鍵值數(shù)據(jù)庫就顯得效率低下了。常見的鍵值數(shù)據(jù)庫有:Redis、LevelDB、RocksDB、RiakKV、OracleBerkeleyDB、Hazelcast、Ehcache、Memcached等。

2)對(duì)于列存儲(chǔ)數(shù)據(jù)庫,通常是用來應(yīng)對(duì)分布式存儲(chǔ)的海量數(shù)據(jù),鍵仍然存在,但是它們的特點(diǎn)是鍵指向了多個(gè)列。常見的列存儲(chǔ)數(shù)據(jù)庫有:HBase、Cassandra、Accumulo、HyperTable等。

3)對(duì)于文檔型數(shù)據(jù)庫,其靈感來自于LotusNotes辦公軟件,而且它與第一種鍵值存儲(chǔ)類似。這種類型的數(shù)據(jù)模型是版本化的文檔,半結(jié)構(gòu)化的文檔以特定的格式存儲(chǔ),例如JSON。文檔型數(shù)據(jù)庫可以看作是鍵值數(shù)據(jù)庫的升級(jí)版,允許它們之間嵌套鍵值,而且文檔型數(shù)據(jù)庫比鍵值數(shù)據(jù)庫的查詢效率更高。常見的文檔型數(shù)據(jù)庫有:CouchDB、MongoDB等。國內(nèi)也有文檔型數(shù)據(jù)庫SequoiaDB,該數(shù)據(jù)庫已經(jīng)開源。

如果說Oracle是關(guān)系型數(shù)據(jù)庫的王者,那么MongoDB可以說是非關(guān)系型數(shù)據(jù)庫的霸主。MongoDB是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫,它由C++語言編寫,旨在為Web應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案。它支持的數(shù)據(jù)結(jié)構(gòu)非常松散,因此,可以存儲(chǔ)比較復(fù)雜的數(shù)據(jù)類型。MongoDB最大的特點(diǎn)是支持的查詢語言非常強(qiáng)大,其語法有點(diǎn)類似于面向?qū)ο蟮牟樵冋Z言,幾乎可以實(shí)現(xiàn)類似關(guān)系型數(shù)據(jù)庫單表查詢的絕大部分功能,而且還支持對(duì)數(shù)據(jù)建立索引。

4)對(duì)于圖形(Graph)數(shù)據(jù)庫,它與其他行列以及剛性結(jié)構(gòu)的SQL數(shù)據(jù)庫不同,它是使用靈活的圖形模型,并且能夠擴(kuò)展到多臺(tái)服務(wù)器上。NoSQL數(shù)據(jù)庫沒有標(biāo)準(zhǔn)的查詢語言(SQL),因此,進(jìn)行數(shù)據(jù)庫查詢需要制定數(shù)據(jù)模型。許多NoSQL數(shù)據(jù)庫都有REST式的數(shù)據(jù)接口或者查詢API。常見的圖形數(shù)據(jù)庫有:Neo4j、InfoGrid、InfiniteGraph、Titan、Giraph等。

常見的非關(guān)系型數(shù)據(jù)庫的優(yōu)缺點(diǎn)及其應(yīng)用場景見表2。

表3總結(jié)了MongoDB、RiakKV,Hypertable和HBase這四個(gè)產(chǎn)品的主要特性。

6.行存儲(chǔ)和列存儲(chǔ)

將表放入存儲(chǔ)系統(tǒng)中的方法有兩種:行存儲(chǔ)和列存儲(chǔ),絕大部分?jǐn)?shù)據(jù)庫是采用行存儲(chǔ)的。行存儲(chǔ)法是將各行放入連續(xù)的物理位置,這很像傳統(tǒng)的記錄和文件系統(tǒng),然后由數(shù)據(jù)庫引擎根據(jù)每個(gè)查詢提取需要的列。列存儲(chǔ)法是將數(shù)據(jù)按照列存儲(chǔ)到數(shù)據(jù)庫中,與行存儲(chǔ)類似。具體而言,行存儲(chǔ)和列存儲(chǔ)的區(qū)別見表4。

6.

什么是視圖?視圖的作用是什么?正確答案:視圖是由從數(shù)據(jù)庫的基本表中選取出來的數(shù)據(jù)組成的邏輯窗口,它不同于基本表,它是一個(gè)虛擬表,其內(nèi)容由查詢定義。在數(shù)據(jù)庫中,存放的只是視圖的定義而已,而不存放數(shù)據(jù),這些數(shù)據(jù)仍然存放在原來的基本表結(jié)構(gòu)中。只有在使用視圖的時(shí)候,才會(huì)執(zhí)行視圖的定義,從基本表中查詢數(shù)據(jù)。

同真實(shí)的表一樣,視圖包含一系列帶有名稱的列和行數(shù)據(jù)。但是,視圖并不在數(shù)據(jù)庫中以存儲(chǔ)的數(shù)據(jù)值集形式存在。行和列數(shù)據(jù)來自由定義視圖的查詢所引用的表,并且在引用視圖時(shí)動(dòng)態(tài)生成。對(duì)其中所引用的基礎(chǔ)表而言,視圖的作用類似于篩選。定義視圖可以來自當(dāng)前或其他數(shù)據(jù)庫的一個(gè)或多個(gè)表,或者其他視圖。分布式查詢也可用于定義使用多個(gè)異類源數(shù)據(jù)的視圖。如果有幾臺(tái)不同的服務(wù)器分別存儲(chǔ)不同地區(qū)的數(shù)據(jù),那么當(dāng)需要將這些服務(wù)器上相似結(jié)構(gòu)的數(shù)據(jù)組合起來的時(shí)候,這種方式就非常有用。

通過視圖進(jìn)行查詢沒有任何限制,用戶可以將注意力集中在其關(guān)心的數(shù)據(jù)上,而非全部數(shù)據(jù),這樣就大大提高了運(yùn)行效率與用戶滿意度。如果數(shù)據(jù)來源于多個(gè)基本表結(jié)構(gòu),或者數(shù)據(jù)不僅來自于基本表結(jié)構(gòu),還有一部分?jǐn)?shù)據(jù)來源于其他視圖,并且搜索條件又比較復(fù)雜,需要編寫的查詢語句就會(huì)比較繁瑣,此時(shí)定義視圖就可以使數(shù)據(jù)的查詢語句變得簡單可行。定義視圖可以將表與表之間的復(fù)雜的操作連接和搜索條件對(duì)用戶不可見,用戶只需要簡單地對(duì)一個(gè)視圖進(jìn)行查詢即可,所以,視圖雖然增加了數(shù)據(jù)的安全性,但是不能提高查詢的效率。

視圖看上去非常像數(shù)據(jù)庫的物理表,對(duì)它的操作同任何其他的表一樣。當(dāng)通過視圖修改數(shù)據(jù)時(shí),實(shí)際上是在改變基表(即視圖定義中涉及的表)中的數(shù)據(jù);相反地,基表數(shù)據(jù)的改變也會(huì)自動(dòng)反映在由基表產(chǎn)生的視圖中。由于邏輯上的原因,有些Oracle視圖可以修改對(duì)應(yīng)的基表,有些則不能(僅能查詢)。

數(shù)據(jù)庫視圖的作用有以下幾點(diǎn):①隱藏了數(shù)據(jù)的復(fù)雜性,可以作為外模式,提供了一定程度的邏輯獨(dú)立性。②有利于控制用戶對(duì)表中某些列或某些機(jī)密數(shù)據(jù)的訪問,提高了數(shù)據(jù)的安全性。③能夠簡化結(jié)構(gòu),執(zhí)行復(fù)雜查詢操作。④使用戶能以多種角度、更靈活地觀察和共享同一數(shù)據(jù)。

7.

如何刪除表中重復(fù)的記錄?正確答案:在平時(shí)工作中可能會(huì)遇到這種情況,當(dāng)試圖對(duì)表中的某一列或幾列創(chuàng)建唯一索引時(shí),系統(tǒng)提示ORA-01452:不能創(chuàng)建唯一索引,發(fā)現(xiàn)重復(fù)記錄。這個(gè)時(shí)候只能創(chuàng)建普通索引或者刪除重復(fù)記錄后再創(chuàng)建唯一索引。

重復(fù)的數(shù)據(jù)可能有這樣兩種情況:第一種是表中只有某些字段一樣,第二種是兩行記錄完全一樣。刪除重復(fù)記錄后的結(jié)果也分為兩種,第一種是重復(fù)的記錄全部刪除,第二種是重復(fù)的記錄只保留最新的一條記錄,在一般業(yè)務(wù)中,第二種的情況出現(xiàn)較多。

(1)刪除重復(fù)記錄的方法原理

在Oracle中,每一條記錄都有一個(gè)ROWID,ROWID在整個(gè)數(shù)據(jù)庫中是唯一的,ROWID確定了每條記錄是在Oracle中的哪一個(gè)數(shù)據(jù)文件、塊、行上。在重復(fù)的記錄中,可能所有列上的內(nèi)容都相同,但ROWID不會(huì)相同,所以,只要保留重復(fù)記錄中那些具有最大的ROWID的記錄,其余的全部刪除。

(2)刪除重復(fù)記錄的方法若想要?jiǎng)h除部分字段重復(fù)的數(shù)據(jù),則使用下面語句進(jìn)行刪除,下面的語句是刪除表中字段1和字段2重復(fù)的數(shù)據(jù):

也可以利用臨時(shí)表的方式,先將查詢到的重復(fù)的數(shù)據(jù)插入到一個(gè)臨時(shí)表中,然后進(jìn)行刪除,這樣,執(zhí)行刪除的時(shí)候就不用再進(jìn)行一次查詢了。如下:

上面這句話的功能是建立臨時(shí)表,并將查詢到的數(shù)據(jù)插入其中。有了上面的執(zhí)行結(jié)果,下面就可以進(jìn)行刪除操作了:

假如想保留重復(fù)數(shù)據(jù)中最新的一條記錄,應(yīng)該怎么做呢?可以利用ROWID,保留重復(fù)數(shù)據(jù)中ROWID最大的一條記錄即可,如下:

重復(fù)數(shù)據(jù)刪除技術(shù)可以提供更大的備份容量,實(shí)現(xiàn)更長時(shí)間的數(shù)據(jù)保留,還能實(shí)現(xiàn)備份數(shù)據(jù)的持續(xù)驗(yàn)證,提高數(shù)據(jù)恢復(fù)服務(wù)水平,方便實(shí)現(xiàn)數(shù)據(jù)容災(zāi)等。

8.

tnsnames.ora文件的作用是什么?正確答案:這個(gè)文件類似于Linux系統(tǒng)的hosts文件,提供tnsname到主機(jī)名或者IP的對(duì)應(yīng)關(guān)系。只有當(dāng)sqlnet.ora中有類似“NAMES.DIRECTORY_PATH=(TNSNAMES)”的配置的時(shí)候,客戶端解析連接字符串時(shí),數(shù)據(jù)庫才會(huì)嘗試使用這個(gè)文件。

下面給出一個(gè)配置的例子:

其中,每個(gè)部分的解釋如下:

1)PROTOCOL:客戶端與服務(wù)器端通信的協(xié)議,一般為TCP,該內(nèi)容一般不用改。

2)HOST:數(shù)據(jù)庫所在的機(jī)器的主機(jī)名或IP地址。不管用主機(jī)名還是IP地址,在客戶端一定要用ping命令ping通信數(shù)據(jù)庫所在的機(jī)器,否則需要在hosts文件中加入數(shù)據(jù)庫所在的機(jī)器的主機(jī)名和IP地址的對(duì)應(yīng)關(guān)系。

3)PORT:數(shù)據(jù)庫監(jiān)聽器的端口,可以查看服務(wù)器端的listener.ora文件或在數(shù)據(jù)庫服務(wù)器中通過lsnrctlstatus[listenername]命令來查看。一般為1521端口。

4)SERVICE_NAME:在數(shù)據(jù)庫中使用“SHOWPARAMETERSERVICE_NAME”命令查看,一般情況下和DBNAME相同。

9.

集群中的MasterNode體現(xiàn)在哪兩個(gè)方面?正確答案:在RAC中有兩種Masters,一種是Clusterware層面的,另一種是Block層面的Masters。

首先,對(duì)于Clusterware層面的MasterNode來說,OCRMaster是負(fù)責(zé)更新OCR的,而且也只有OCRMaster才可以更新OCR的內(nèi)容。默認(rèn)集群中首先啟動(dòng)的節(jié)點(diǎn)就是OCRMaster。當(dāng)OCRMaster的crsd.bin進(jìn)程停止或重啟的時(shí)候,此時(shí)集群中其他存活的crsd.bin進(jìn)程的節(jié)點(diǎn)中NodeNumber最小的就成為了新的OCRMaster。

有兩種辦法可以查詢OCRMaster:

第一種辦法是查詢?nèi)罩荆?/p>

第二種辦法是查詢OCR的自動(dòng)備份。OCR自動(dòng)備份只發(fā)生在MasterNode。如果MasterNode備份OCR失敗,那么OCR備份會(huì)在新的Master上進(jìn)行??赏ㄟ^執(zhí)行如下命令查看OCR備份信息:

對(duì)于Block層面的Masters主要用于CacheFusion。任何節(jié)點(diǎn)都可以成為特定Block的MasterNode,可以通過V$GES_RESOURCE中的MASTERNODE列查詢。

10.

有表T1,其數(shù)據(jù)如下:

現(xiàn)需要轉(zhuǎn)換為如下的形式:

試寫出其SQL語句。正確答案:該題屬于固定列數(shù)的行列轉(zhuǎn)換,環(huán)境如下:

若采用MAX或CASE+DECODE或CASE來回答,如下:

此題若使用PIVOT函數(shù),如下:

此題若使用臨時(shí)表的方式,如下:

11.

如何徹底清除OCR的配置信息?正確答案:根據(jù)MOS文檔“HowtoProceedfromFailed11gR2GridInfrastructure(CRS)Installation(文檔ID942166.1)”的描述,若要重新執(zhí)行root.sh腳本,可以如下操作:

需要注意的一點(diǎn)是,在執(zhí)行完$GRID_HOME/crs/install/rootcrs.pl-deconfig-force-verbose后需要?jiǎng)h除如下的文件:

12.

ASM磁盤有幾種冗余方式?正確答案:ASM使用獨(dú)特的鏡像算法,它不是鏡像磁盤而是鏡像盤區(qū)。一個(gè)磁盤組可以由兩個(gè)或多個(gè)故障組(FAILGROUP)組成,一個(gè)故障組由一個(gè)或多個(gè)ASM磁盤組成。故障組提供了共享相同資源的冗余,ASM磁盤組有3種不同的冗余方式,見下表。

ASM磁盤組的冗余方式

需要注意的是,一旦磁盤組被創(chuàng)建,就不可以改變它的冗余方式。若想改變磁盤組的冗余方式,則必須創(chuàng)建具有適當(dāng)冗余的另一個(gè)磁盤組,然后必須使用RMAN還原的方式或使用DBMS_FILE_TRANSFER將數(shù)據(jù)文件移動(dòng)到這個(gè)新創(chuàng)建的磁盤組。

13.

如何dump控制文件?正確答案:命令為:altersystemsetevents'immediatetracenamecontrolflevel12';

文件路徑為:

也可以使用oradebug:

14.

什么是半連接、反連接和星型連接?正確答案:(1)半連接(SemiJoin)

半連接(SemiJoin)是一種特殊的連接類型,當(dāng)作子查詢展開時(shí),Oracle經(jīng)常會(huì)把那些外部WHERE條件為EXISTS、IN或=ANY的子查詢轉(zhuǎn)換為對(duì)應(yīng)的半連接。半連接分為嵌套循環(huán)半連接(Hint為:NL_SJ)、排序合并半連接(Hint為:MERGE_SJ)和哈希半連接(Hint為:HASH_SJ),不過在新版本數(shù)據(jù)庫里,都傾向于使用哈希半連接。不過哈希半連接也有一些限制條件,例如,只能使用等值連接、不能使用GROUPBY、CONNECTBY、ROWNUM等限制條件。在執(zhí)行計(jì)劃中若有關(guān)鍵字“HASHJOINSEMI”,則說明Oracle使用了哈希半連接。

(2)反連接(AntiJoin)

反連接(AntiJoin)也是一種特殊的連接類型,通常用于從一個(gè)表中返回不在另一個(gè)數(shù)據(jù)源中的數(shù)據(jù)行。當(dāng)作子查詢展開時(shí),Oracle經(jīng)常會(huì)把那些外部WHERE條件為NOTEXISTS、NOTIN或<>ALL的子查詢轉(zhuǎn)換成對(duì)應(yīng)的反連接。反連接分為嵌套循環(huán)反連接(NESTEDLOOPSANTI,Hint為:NL_AJ)、排序合并反連接(MERGEJOINANTI,Hint為:MERGE_AJ)和哈希反連接(HASHJOINANTI,Hint為:HASH_AJ)。

需要注意的是,NOTIN和<>ALL對(duì)NULL值敏感,這意味著NOTIN后面的子查詢或者常量集合一旦有NULL值出現(xiàn),則整個(gè)SQL的執(zhí)行結(jié)果就會(huì)為NULL,即此時(shí)的執(zhí)行結(jié)果將不包含任何記錄。但是,NOTEXISTS對(duì)NULL值不敏感,這意味著NULL值對(duì)NOTEXISTS的執(zhí)行結(jié)果不會(huì)有什么影響。正是因?yàn)镹OTIN和<>ALL對(duì)NULL值敏感,所以一旦相關(guān)的連接列上出現(xiàn)了NULL值,此時(shí)Oracle如果還按照通常的反連接的處理邏輯來處理,得到的結(jié)果就不對(duì)了。為了解決NOTIN和<>ALL對(duì)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了,而又因?yàn)镹OTIN對(duì)NULL值敏感,所以O(shè)racle此時(shí)也不能用普通的反連接。

(3)星型連接(StarJoin)

星型連接(StarJoin)通常用于數(shù)據(jù)倉庫類型的應(yīng)用,它是一種單個(gè)事實(shí)表(FactTable)和多個(gè)維度表(DimensionTable)之間的連接。星型連接的各維度表之間沒有直接的關(guān)聯(lián)條件,其事實(shí)表和各維度表之間是基于事實(shí)表的外鍵列和對(duì)應(yīng)維度表的主鍵列之間的連接,并且通常在事實(shí)表的外鍵列上還會(huì)存在對(duì)應(yīng)的位圖索引。

15.

如何啟動(dòng)Oracle數(shù)據(jù)庫的監(jiān)聽日志?正確答案:Oracle監(jiān)聽器是一個(gè)服務(wù)器端程序,用于監(jiān)聽所有來自客戶端的請(qǐng)求,并為其提供數(shù)據(jù)庫服務(wù)。監(jiān)聽器日志有如下特性:

1)監(jiān)聽器日志是一個(gè)純文本文件,通常位于$ORACLE_HOME/network/log目錄下,與sqlnet.log日志文件處于同一路徑。在Oracle11g下,可能位于$ORACLE_BASE/diag/tnslsnr/$hostname/listener/trace下。

2)監(jiān)聽器日志缺省的文件名為listener.log。對(duì)于非默認(rèn)的監(jiān)聽器,則產(chǎn)生的日志文件通常為listenername.log。

3)監(jiān)聽器日志文件默認(rèn)由監(jiān)聽器自動(dòng)創(chuàng)建,當(dāng)日志文件丟失時(shí)或不存在時(shí),會(huì)自動(dòng)重新創(chuàng)建一個(gè)同名的文件,與告警日志文件類似。

4)監(jiān)聽器日志文件的尺寸會(huì)不斷自動(dòng)增長,當(dāng)尺寸過大時(shí)可能產(chǎn)生一些監(jiān)聽錯(cuò)誤,這個(gè)時(shí)候可以考慮將其備份。

5)Oracle監(jiān)聽器在運(yùn)行時(shí)不允許對(duì)日志文件做刪除,重命名操作。

6)可以設(shè)置日志狀態(tài)為ON或OFF來實(shí)現(xiàn)啟用或關(guān)閉日志。

以下是一些常用的設(shè)置:

1)設(shè)置監(jiān)聽器日志文件目錄:lsnrctlSETLOG_DIRECTORYdirectory。

2)設(shè)置監(jiān)聽器日志文件名:lsnrctlSETLOG_FILEfilename。

3)設(shè)置監(jiān)聽器日志的狀態(tài):lsnrctlSETLOG_STATUS{on|off}。

當(dāng)然,以上設(shè)置也可以分步進(jìn)行,如下是設(shè)置監(jiān)聽器日志的狀態(tài):

16.

SYS_CONTEXT和USERENV的用法是什么?它們可以返回哪些常用的值?正確答案:SYS_CONTEXT函數(shù)是Oracle提供的一個(gè)獲取環(huán)境上下文信息的預(yù)定義函數(shù)。該函數(shù)用來返回一個(gè)指定NAMESPACE下的PARAMETER值。該函數(shù)可以在SQL和PL/SQL語言中使用,常用的扳回信如下:

USERENV函數(shù)用來返回當(dāng)前的會(huì)話信息,常用的有如下信息:

17.

如何使用批量動(dòng)態(tài)SQL(FORALL及BULK子句的使用)?正確答案:批量動(dòng)態(tài)SQL即在動(dòng)態(tài)SQL中使用BULK子句,或使用游標(biāo)變量時(shí)在FETCH中使用BULK,或在FORALL子句中使用BULK子句來實(shí)現(xiàn)。

如果一個(gè)循環(huán)內(nèi)執(zhí)行了INSERT、DELETE或UPDATE等語句引用了集合元素,那么可以將其移動(dòng)到一個(gè)FORALL子句中。如果SELECTINTO、FETCHINTO或RETURNINGINTO子句引用了一個(gè)集合,那么應(yīng)該使用BULKCOLLECT子句進(jìn)行合并,從而來提高程序的性能。

(1)動(dòng)態(tài)SQL中使用BULK子句的語法

使用BULKCOLLECTINTO子句處理動(dòng)態(tài)SQL中的多行查詢可以加快處理速度,從而提高應(yīng)用程序的性能。當(dāng)使用BULK子句時(shí),集合類型可以是PL/SQL所支持的索引表、嵌套表和VARRY,但集合元素必須使用SQL數(shù)據(jù)類型。常用的三種語句支持BULK子句,分別為EXECUTEIMMEDIATE,F(xiàn)ETCH和FORALL。

(2)使用EXECUTEIMMEDIATE結(jié)合BULK子句處理DML語句返回子句下面的例子,首先定義了兩個(gè)索引表類型以及其變量,接下來使用動(dòng)態(tài)SQL語句來更新T_20170104_LHR的薪水,使用EXECUTEIMMEDIATE配合BULKCOLLECTINTO來處理結(jié)果集。

運(yùn)行以上程序輸出結(jié)果如下:

(3)使用EXECUTEIMMEDIATE結(jié)合BULK子句處理多行查詢下面示例中,與前一個(gè)示例相同,只不過其動(dòng)態(tài)SQL由查詢語句組成,且返回多個(gè)結(jié)果集,同樣使用了BULKCOLLECTINTO來傳遞結(jié)果。

運(yùn)行以上程序輸出結(jié)果如下:

(4)使用FETCH子句結(jié)合BULK子句處理多行結(jié)果集

下面的示例中首先定義了游標(biāo)類型、游標(biāo)變量以及復(fù)合類型和復(fù)合變量,接下來從動(dòng)態(tài)SQL中OPEN游標(biāo),然后使用FETCH將結(jié)果存放到復(fù)合變量中。即使用OPEN,F(xiàn)ETCH代替了EXECUTEIMMEDIATE來完成動(dòng)態(tài)SQL的執(zhí)行。

運(yùn)行以上程序輸出結(jié)果如下:

(5)在FORALL子句中使用BULK子句下面是FORALL子句的語法:

FORALL子句允許為動(dòng)態(tài)SQL輸入變量,但FORALL子句僅支持DML(INSERT、DELETE、UPDATE)語句,不支持動(dòng)態(tài)的SELECT語句。

在下面的示例中,首先聲明了兩個(gè)復(fù)合類型以及復(fù)合變量,接下來為復(fù)合變量ENAME_TABLE賦值,以形成動(dòng)態(tài)SQL語句。緊接著使用FORALL子句結(jié)合EXECUTEIMMEDIATE來提取結(jié)果集。

運(yùn)行以上程序輸出結(jié)果如下:

18.

交換機(jī)與路由器有什么區(qū)別?正確答案:交換機(jī)是一種基于MAC(網(wǎng)卡的硬件地址)識(shí)別,能完成封裝轉(zhuǎn)發(fā)數(shù)據(jù)包功能的網(wǎng)絡(luò)設(shè)備。它具有流量控制能力,主要用于組建局域網(wǎng)。例如,搭建一個(gè)公司網(wǎng)絡(luò),一般會(huì)使用交換機(jī)。常見的交換機(jī)種類有以太網(wǎng)交換機(jī)、光纖交換機(jī)等。路由器是連接Internet中各局域網(wǎng)、廣域網(wǎng)的網(wǎng)絡(luò)設(shè)備。它是網(wǎng)絡(luò)的樞紐,是組成廣域網(wǎng)的一個(gè)重要部分,用于為數(shù)據(jù)包找到最合適的到達(dá)路徑。

具體而言,交換機(jī)與路由器的區(qū)別主要表現(xiàn)在以下幾個(gè)方面:

1)工作層次不同。交換機(jī)一般工作在OSI模型的數(shù)據(jù)鏈路層,而路由器工作在OSI模型的網(wǎng)絡(luò)層。由于交換機(jī)工作在OSI模型的數(shù)據(jù)鏈路層,所以它的工作原理比較簡單,而路由器工作在OSI模型的網(wǎng)絡(luò)層,可以得到更多的協(xié)議信息,路由器可以做出更加智能的轉(zhuǎn)發(fā)決策。

2)數(shù)據(jù)轉(zhuǎn)發(fā)所依據(jù)的對(duì)象不同。交換機(jī)是利用物理地址來確定轉(zhuǎn)發(fā)數(shù)據(jù)的目的地址,而路由器則是利用IP地址來確定數(shù)據(jù)轉(zhuǎn)發(fā)的地址。IP地址是在軟件中實(shí)現(xiàn)的,描述的是設(shè)備所在的網(wǎng)絡(luò),物理地址一般是指MAC地址,它通常是硬件自帶的,由網(wǎng)卡生產(chǎn)商來分配的,而且已經(jīng)固化到了網(wǎng)卡中去,一般來說是不可更改的(可以通過工具來修改機(jī)器的MAC地址);而IP地址則通常由網(wǎng)絡(luò)管理員或系統(tǒng)自動(dòng)分配。

3)傳統(tǒng)的交換機(jī)只能分割沖突域,不能分割廣播域;而路由器可以分割廣播域。由交換機(jī)連接的網(wǎng)段仍屬于同一個(gè)廣播域,廣播數(shù)據(jù)包會(huì)在交換機(jī)連接的所有網(wǎng)段上傳播,在某些情況下會(huì)導(dǎo)致通信擁塞以及產(chǎn)生安全漏洞。連接到路由器上的網(wǎng)段會(huì)被分配成不同的廣播域,廣播數(shù)據(jù)不會(huì)穿過路由器。雖然第三層以上交換機(jī)具有VLAN功能,也可以分割廣播域,但是各子廣播域之間是不能通信交流的,它們之間的交流仍然需要路由器。

4)交換機(jī)負(fù)責(zé)同一網(wǎng)段的通信,路由器負(fù)責(zé)不同網(wǎng)段的通信。路由器提供了防火墻的服務(wù),它僅能轉(zhuǎn)發(fā)特定地址的數(shù)據(jù)包,不傳送不支持路由協(xié)議的數(shù)據(jù)包,也不傳送未知目標(biāo)網(wǎng)絡(luò)數(shù)據(jù)包,從而可以防止廣播風(fēng)暴。

19.

如何清除SharedPool中某條SQL語句?正確答案:如果數(shù)據(jù)庫版本為Oracle10.2.0.4以前,那么只能清空整個(gè)SharedPool,命令為:“ALTERSYSTEMFLUSHSHARED_POOL;”。在生產(chǎn)庫上,該句要慎用。而從Oracle10.2.0.4開始提供了一個(gè)包DBMS_SHARED_POOL,該包可以實(shí)現(xiàn)清除SharedPool中某條SQL語句的功能。若該包沒有安裝,則可以通過$ORACLE_HOME/rdbms/admin/dbmspool.sql進(jìn)行安裝。

使用這種方法可以精確地將一個(gè)SQL從共享池中刪除,從而使得Oracle為這個(gè)SQL重新生成執(zhí)行計(jì)劃。這種方法只針對(duì)單個(gè)SQL語句,使得解決問題的同時(shí)不會(huì)造成任何的誤傷。

示例如下:

需要注意的是,在Oracle10.2.0.4中該功能有BUG(MOS為:751876.1),需要通過設(shè)置事件來規(guī)避該BUG,命令為:“ALTERSESSIONSETEVENTS'5614566TRACENAMECONTEXTFOREVER';”。若不設(shè)置該事件,則DBMS_SHARED_POOL.PLYRGE將不起作用。

清除SharedPool中某條SQL語句無非是讓目標(biāo)SQL語句重新進(jìn)行硬解析,其實(shí)重新進(jìn)行硬解析的方法還有如下兩種:

1)使用DDL操作可以讓Oracle再次執(zhí)行目標(biāo)SQL時(shí)使用硬解析(新產(chǎn)生一個(gè)子游標(biāo)),但這種方法的弊端在于其影響范圍還是太廣了,因?yàn)橐坏?duì)某個(gè)表執(zhí)行了DDL操作,庫緩存中所有在SQL文本中包含了這個(gè)表的SharedCursor都會(huì)被Oracle標(biāo)記為失效(INVALID),這意味著這些SharedCursor中存儲(chǔ)的解析樹和執(zhí)行計(jì)劃將不再能被重用,再次執(zhí)行與這個(gè)表相關(guān)的所有SQL時(shí)就會(huì)全部使用硬解析。這是很不好的,特別是對(duì)于OLTP類型的應(yīng)用系統(tǒng)而言,這可能會(huì)導(dǎo)致短時(shí)間內(nèi)的硬解析數(shù)量劇增,進(jìn)而影響系統(tǒng)的性能。盡管如此,有時(shí)仍然會(huì)采用這種方法。這里的DDL操作有很多種,通常選擇添加注釋的COMMENT語句(“COMMENTONTABLETB_NAMEIS'xxxbylhr';”),因?yàn)槭褂肅OMMENT添加注釋也是DDL

溫馨提示

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

評(píng)論

0/150

提交評(píng)論