- Oracle從入門到精通(第3版)
- 明日科技
- 14049字
- 2020-04-24 14:23:18
第1章 Oracle 11g概述
( 視頻講解:87分鐘)
本章首先將介紹一些與關(guān)系型數(shù)據(jù)庫密切相關(guān)的理論基礎(chǔ)知識,并對Oracle 11g新增加的功能進行概要介紹;然后講解如何安裝和卸載Oracle 11g數(shù)據(jù)庫;接著講解Oracle 11g的3種常用管理工具;最后為讀者介紹如何啟動和關(guān)閉數(shù)據(jù)庫實例。
通過閱讀本章,您可以:
理解關(guān)系型數(shù)據(jù)庫的基本理論
了解Oracle 11g的新功能
掌握Oracle 11g數(shù)據(jù)庫的安裝與卸載
掌握Oracle 11g的3種常用管理工具
掌握如何啟動與關(guān)閉數(shù)據(jù)庫實例
1.1 簡述Oracle的發(fā)展史
Oracle,西方人認為有“神諭、預(yù)言”之意,中國人則譯作“甲骨文”,該軟件是當(dāng)今世界上最強大的數(shù)據(jù)庫軟件之一。所有這一切要從IBM的一篇論文談起,1970年6月,IBM公司的研究員埃德加·泰德·科德(Edgarh Ted Cod)發(fā)表了一篇著名的論文——《大型共享數(shù)據(jù)庫數(shù)據(jù)的關(guān)系模型》,這可以稱為數(shù)據(jù)庫發(fā)展史上的一個轉(zhuǎn)折點。在當(dāng)時還是層次模型和網(wǎng)狀模型的數(shù)據(jù)庫產(chǎn)品占據(jù)市場主要地位的情況下,這篇論文拉開了關(guān)系型數(shù)據(jù)庫軟件革命的序幕。
1977年6月,拉里·埃里森(Larry Ellison)與鮑勃·邁納(Bob Miner)和埃德·奧茨(Ed Oates)在硅谷共同創(chuàng)辦了一家名為“軟件開發(fā)實驗室”的軟件公司(英文縮寫SDL,Oracle公司的前身)。在奧茨看到了科德的那篇著名的論文連同其他幾篇相關(guān)的文章之后,非常興奮,他找來埃里森和邁納共同閱讀,埃里森和邁納也預(yù)見到關(guān)系型數(shù)據(jù)庫軟件的巨大潛力。于是,數(shù)據(jù)庫界的三位巨人開始共同籌劃構(gòu)建可商用的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS),并把這種商用數(shù)據(jù)庫產(chǎn)品命名為Oracle。因為他們相信,Oracle(字典里的解釋有“神諭、預(yù)言”之意)是一切智慧的源泉,就這樣,堪稱當(dāng)今世界最強大、最優(yōu)秀的Oracle數(shù)據(jù)庫誕生了。
1979年,“軟件開發(fā)實驗室”更名為“關(guān)系軟件有限公司”(英文縮寫RSI)。同年夏季發(fā)布了可用于DEC公司的PDP-11計算機上的商用Oracle產(chǎn)品(Oracle稱之為第2版),這個數(shù)據(jù)庫產(chǎn)品整合了比較完整的SQL實現(xiàn),其中包括子查詢、連接及其他特性。
1983年3月,RSI發(fā)布了Oracle第3版,這個版本是用C語言重新編寫的。由于C編譯器具有很好的可移植性,從此之后,Oracle產(chǎn)品有了一個關(guān)鍵的特性——可移植性。
1984年10月,Oracle發(fā)布了第4版產(chǎn)品。產(chǎn)品的穩(wěn)定性總算得到了一定的增強,用邁納的話說,達到了“工業(yè)強度”。
1985年,Oracle發(fā)布了5.0版,這個版本算得上是Oracle數(shù)據(jù)庫誕生以來比較穩(wěn)定的版本。這也是首批可以在Client/Server模式下運行的RDBMS產(chǎn)品,在技術(shù)方向上,Oracle數(shù)據(jù)庫始終沒有落后。
1988年,Oracle發(fā)布了第6版,這個版本引入了行級鎖(row-level locking)這個重要的特性,并且這個版本引入了還算不上完善的PL/SQL(Procedural Language/SQL)語言。第6版還引入了聯(lián)機熱備份功能,使數(shù)據(jù)庫能夠在使用過程中創(chuàng)建聯(lián)機的備份,這極大地增強了可用性。
1992年6月,Oracle發(fā)布了第7版,該版本增加了許多新的特性:分布式事務(wù)處理功能、增強的管理功能、用于應(yīng)用程序開發(fā)的新工具以及安全性方法。這一版本才是真正出色的產(chǎn)品,取得了巨大的成功,Oracle借助這一版本的成功在數(shù)據(jù)庫市場確立了主導(dǎo)地位。
1997年6月,Oracle發(fā)布了第8版,該版本支持面向?qū)ο蟮拈_發(fā)及新的多媒體應(yīng)用,這個版本也為支持Internet、網(wǎng)絡(luò)計算等奠定了基礎(chǔ),同時這一版本開始具有同時處理大量用戶和海量數(shù)據(jù)的特性。
1998年9月,Oracle公司正式發(fā)布Oracle 8i。i代表Internet,這一版本中添加了大量為支持Internet而設(shè)計的特性。這一版本為數(shù)據(jù)庫用戶提供了全方位的Java支持。Oracle 8i成為第一個完全整合了本地Java運行時環(huán)境的數(shù)據(jù)庫,用Java就可以編寫Oracle的存儲過程。
在2001年6月的Oracle OpenWorld大會中,Oracle發(fā)布了Oracle 9i。在Oracle 9i的諸多新特性中,最重要的就是Real Application Clusters(RAC)——集群技術(shù)。
2003年9月8日,在舊金山舉辦的Oracle OpenWorld大會上,Ellison宣布下一代數(shù)據(jù)庫產(chǎn)品為Oracle 10g。Oracle應(yīng)用服務(wù)器10g也將作為Oracle公司下一代應(yīng)用基礎(chǔ)架構(gòu)軟件集成套件,g代表grid——網(wǎng)格,這一版最大的特性就是加入了網(wǎng)格計算的功能。
2007年11月,Oracle 11g正式發(fā)布,功能上大大加強,這是最常用的版本,也是本書中使用的Oracle版本。11g是Oracle公司30年來發(fā)布的最重要的數(shù)據(jù)庫版本,根據(jù)用戶的需求實現(xiàn)了信息生命周期管理等多項創(chuàng)新,大幅地提高了系統(tǒng)性能的安全性,全新的Data Guard最大化了可用性,利用全新的高級數(shù)據(jù)壓縮技術(shù)降低了數(shù)據(jù)存儲的支出,明顯縮短了應(yīng)用程序測試環(huán)境部署及分析測試結(jié)果所花費的時間,增加了RFID Tag、DICOM醫(yī)學(xué)圖像、3D空間等重要數(shù)據(jù)類型的支持,加強了對Binary XML的支持和性能優(yōu)化。
最新的Oracle版本為Oracle 12c,c表示cloud——云計算。
一直以來,Oracle都以絕對的優(yōu)勢占據(jù)了數(shù)據(jù)庫市場的第一位。例如,在2019年做出的市場調(diào)研中顯示,56%的市場份額標志著Oracle的地位難以撼動,而IBM以15.9%占據(jù)第二位,Microsoft以9.5%占據(jù)第三的位置,而其他數(shù)據(jù)庫廠商占有的市場份額很小,2019年度主流數(shù)據(jù)庫市場占有率如圖1.1所示。

圖1.1 2019年度主流數(shù)據(jù)庫市場占有率
隨著人類社會信息資源的不斷增長,更加需要強大而安全的數(shù)據(jù)庫管理系統(tǒng),這導(dǎo)致Oracle數(shù)據(jù)庫的市場占有率在這些年來不斷地增加,其獨占鰲頭的市場地位是不容置疑的。
1.2 關(guān)系型數(shù)據(jù)庫的基本理論
數(shù)據(jù)庫技術(shù)是應(yīng)對信息資源(即大量數(shù)據(jù))的管理需求而產(chǎn)生的,隨著信息技術(shù)的不斷發(fā)展,尤其人類邁入網(wǎng)絡(luò)時代后,社會信息資源在爆炸式地增長,對數(shù)據(jù)管理技術(shù)也隨之不斷地提出更高的要求,其先后經(jīng)歷了人工管理、文件系統(tǒng)、數(shù)據(jù)庫系統(tǒng)3個階段。在數(shù)據(jù)庫系統(tǒng)中,數(shù)據(jù)模型主要有層次模型、網(wǎng)狀模型和關(guān)系模型3種(另外一種面向?qū)ο竽P瓦€處在探索研究中),目前理論成熟、使用普及的模型就是關(guān)系模型——關(guān)系型數(shù)據(jù)庫的理論基礎(chǔ)。
1.2.1 關(guān)系型數(shù)據(jù)庫與數(shù)據(jù)庫管理系統(tǒng)
關(guān)系型數(shù)據(jù)庫是建立在關(guān)系模型基礎(chǔ)上的數(shù)據(jù)庫,借助于集合代數(shù)等數(shù)學(xué)概念和方法來處理數(shù)據(jù)庫中的數(shù)據(jù),現(xiàn)實世界中的各種實體以及實體之間的各種聯(lián)系均用關(guān)系模型來表示。
關(guān)系模型以二維表來描述數(shù)據(jù)。在關(guān)系模型中,每個表有多個字段列和記錄行,每個字段列有固定的類型屬性(如數(shù)字、字符、日期等類型)。關(guān)系模型數(shù)據(jù)結(jié)構(gòu)簡單、清晰、具有很高的數(shù)據(jù)獨立性,因此是目前主流的數(shù)據(jù)庫數(shù)據(jù)模型。
在關(guān)系數(shù)據(jù)模型中,關(guān)系可以看成由行和列交叉組成的二維表格,表中一行稱為一個元組,可以用來標識實體集中的一個實體。表中的列稱為屬性,給每一列起一個名稱即為屬性名,表中的屬性名不能相同。列的取值范圍稱為域,同列具有相同的域,不同的列也可以有相同的域。表中任意兩行(元組)不能相同。能唯一標識表中不同行的屬性或?qū)傩越M(即多個屬性的組合)稱為主鍵或復(fù)合主鍵。
盡管關(guān)系與傳統(tǒng)的二維表格數(shù)據(jù)文件具有類似之處,但是它們又有區(qū)別,嚴格地說,關(guān)系是一種規(guī)范化的二維表格,它具有如下性質(zhì)。
屬性值具有原子性,不可分解。
沒有重復(fù)的元組,即沒有重復(fù)的行。
理論上沒有行序,但是在使用時有時可以有行序。
在關(guān)系型數(shù)據(jù)庫中,關(guān)鍵碼(簡稱鍵)是關(guān)系模型的一個非常重要的概念,它通常是行(元組)的一個或幾個列(屬性)。如果鍵是由一個列組成,則稱之為唯一鍵;若是由多個列(屬性)組成的,則稱之為復(fù)合鍵,鍵的主要類型如下。
超鍵:在一個關(guān)系中,能唯一標識元組的屬性或?qū)傩约Q為關(guān)系的超鍵。
候選鍵:如果一個屬性集能唯一標識元組,且又不含有多余的屬性,那么這個屬性集稱為關(guān)系的候選鍵。
主鍵:如果一個關(guān)系中有多個候選鍵,則選擇其中的一個鍵為關(guān)系的主鍵。用主鍵可以實現(xiàn)關(guān)系定義中“表中任意兩行(元組)不能相同”的約束。這里以管理學(xué)生信息為例,我們在“學(xué)生信息表”中設(shè)置學(xué)號、姓名、性別、年齡、院系、班級等列。在該表中,“學(xué)號”能夠唯一標識一名學(xué)生,因此,把學(xué)號作為主鍵是最佳的選擇,而如果把“姓名”作為主鍵則會存在問題,因為有可能存在同名的學(xué)生。為此,最好創(chuàng)建一個單獨的鍵將其明確地指定為主鍵,這種唯一標識符在現(xiàn)實生活中很普遍,如身份證號、銀行卡號、手機號、發(fā)票號等。
外鍵:如果一個關(guān)系R中包含另一個關(guān)系A(chǔ)的主鍵所對應(yīng)的屬性組T,則稱此屬性組T為關(guān)系R的外鍵,并稱關(guān)系A(chǔ)為參照關(guān)系,關(guān)系R是依賴關(guān)系。為了表示關(guān)聯(lián),可以將一個關(guān)系的主鍵作為屬性放入另外一個關(guān)系中,第二個關(guān)系中的那些屬性就稱為外鍵。這里以商品銷售為例,在填寫一張商品銷售單時,可以將商品銷售信息分為兩大類:第一類是單據(jù)的主體信息(銷售主表),如銷售單號、銷售金額、銷售日期、收款人;第二類是單據(jù)的明細信息(銷售明細表),如商品序號、商品名稱、商品數(shù)量等。在數(shù)據(jù)庫的“銷售主表”中通常以“銷售單號”作為主鍵;在“銷售明細表”中,為了標識被銷售出去的商品隸屬于哪張單據(jù),需要對每一條商品銷售記錄標明“單據(jù)編號”。在這種情況下,銷售明細表中的“銷售單號”就被稱為外鍵,因為“銷售單號”是其所在表以外(主體表)的一個主鍵。
當(dāng)出現(xiàn)外鍵時,主鍵與外鍵的列名稱可以是不同的,但必須要求它們的值集相同,即“銷售明細表”中出現(xiàn)的“銷售單號”一定要和主體表中的值匹配。
對于上面提到的“二維表格”中存儲的數(shù)據(jù)信息,通常以物理文件的形式存儲在磁盤上,這種物理文件稱為“數(shù)據(jù)文件”,用戶會使用一種數(shù)據(jù)庫軟件實現(xiàn)與磁盤上的數(shù)據(jù)文件進行交互,這種數(shù)據(jù)庫軟件就稱為數(shù)據(jù)庫管理系統(tǒng)(DBMS)。DBMS是建立在操作系統(tǒng)基礎(chǔ)上的,它可以實現(xiàn)對數(shù)據(jù)庫文件進行統(tǒng)一管理和控制。用戶對數(shù)據(jù)庫提出的訪問請求都是由DBMS來處理的。另外,DBMS還提供了多種用于管理數(shù)據(jù)的實用工具。
1.2.2 關(guān)系型數(shù)據(jù)庫的E-R模型
在設(shè)計關(guān)系型數(shù)據(jù)庫時,首先需要為它建立邏輯模型。關(guān)系型數(shù)據(jù)庫的邏輯模型可以通過實體和關(guān)系組成的圖形來表示,這種圖形稱為E-R圖,它實現(xiàn)將現(xiàn)實世界中的實體和實體之間的聯(lián)系轉(zhuǎn)換為邏輯模型。使用E-R圖形表示的邏輯模型稱為E-R模型,一個標準的E-R模型主要由實體、屬性和聯(lián)系3部分組成。
1.實體和屬性
實體是一個數(shù)據(jù)對象,是指客觀存在并可以相互區(qū)分的事物,如一個教師、一個學(xué)生、一個雇員等。每個實體由一組屬性來表示,如一個具體的學(xué)生擁有學(xué)號、姓名、性別和班級等屬性,其中學(xué)號可以唯一標識具體某個學(xué)生這個實體。具有相同屬性的實體組合在一起就構(gòu)成實體集——實體的集合,而實體則是實體集中的某一個特例,例如,王同學(xué)這個實體就是學(xué)生實體集中的一個特例。
在E-R模型中,實體用矩形表示,矩形內(nèi)注明實體的命名。實體名常用以大寫字母開頭的有具體意義的英文名詞來表示,聯(lián)系名和屬性名也采用這種方式。如圖1.2所示為一個圖書檔案的E-R圖。
2.聯(lián)系
在實際應(yīng)用中,實體之間是存在聯(lián)系的,這種聯(lián)系必須在邏輯模型中表現(xiàn)出來。在E-R模型中,聯(lián)系用菱形表示,菱形框內(nèi)寫明“聯(lián)系名”,并用“連接線”將有關(guān)實體連接起來,同時在“連接線”的旁邊標注上聯(lián)系的類型,兩個實體之間的聯(lián)系類型可以分為以下3類。
一對一:若對于實體集A中的每一個實體,在實體集合B中最多有一個實體與之相關(guān);反之亦然,則稱實體集A與實體B具有一對一的聯(lián)系,可標記聯(lián)系為1:1。
一對多:若對于實體集A中的每一個實體,在實體集B中有多個實體與之相關(guān);反之,對于實體集B中的每一個實體,實體集A中最多有一個實體與之相關(guān),則稱實體集A與實體集B具有一對多的聯(lián)系,可標記聯(lián)系為1:n。
多對多:若對于實體集A中的每一個實體,在實體集B中有多個實體與之相關(guān);反之,對于實體集B中的每一個實體,實體集A中也有多個實體與之相關(guān),則稱實體集A與實體集B具有多對多的聯(lián)系,可標記聯(lián)系為m:n。
例如,一個讀者可以有多個圖書借還記錄,而一個借還記錄只能隸屬于一個讀者,這樣“讀者檔案實體”與“讀者借還實體”之間就存在一對多的聯(lián)系(即1:n),那么這兩個實體之間的聯(lián)系如圖1.3所示。

圖1.2 圖書檔案實體E-R圖

圖1.3 “讀者檔案實體”與“讀者借還實體”之間的聯(lián)系
1.2.3 關(guān)系型數(shù)據(jù)庫的設(shè)計范式
在數(shù)據(jù)庫中,數(shù)據(jù)之間存在著密切的聯(lián)系。關(guān)系型數(shù)據(jù)庫由相互聯(lián)系的一組關(guān)系所組成,每個關(guān)系包括關(guān)系模式和關(guān)系值兩個方面。關(guān)系模式是對關(guān)系的抽象定義,給出關(guān)系的具體結(jié)構(gòu);關(guān)系的值是關(guān)系的具體內(nèi)容,反映關(guān)系在某一時刻的狀態(tài)。一個關(guān)系包含許多元組(記錄行),每個元組都是符合關(guān)系模式結(jié)構(gòu)的一個具體值,并且都分屬于相應(yīng)的屬性。在關(guān)系數(shù)據(jù)庫中的每個關(guān)系都需要進行規(guī)范化,使之達到一定的規(guī)范化程度,從而提高數(shù)據(jù)的結(jié)構(gòu)化、共享性、一致性和可操作性。
規(guī)范化是把數(shù)據(jù)庫組織成在保持存儲數(shù)據(jù)完整性的同時最小化冗余數(shù)據(jù)的結(jié)構(gòu)的過程。規(guī)范化的數(shù)據(jù)庫必須符合關(guān)系模型的范式規(guī)則。范式可以防止在使用數(shù)據(jù)庫時出現(xiàn)不一致的數(shù)據(jù),并防止數(shù)據(jù)丟失。關(guān)系模型的范式有第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)、第六范式(6NF)和BCNF范式等多種。通常數(shù)據(jù)庫只要滿足前3個范式就足夠用了,下面舉例介紹前3個范式。
1.第一范式(1NF)
第一范式是第二和第三范式的基礎(chǔ),是最基本的范式。第一范式包括下列指導(dǎo)原則:
數(shù)據(jù)組的每個屬性只可以包含一個值。
關(guān)系中的每個數(shù)組必須包含相同數(shù)量的值。
關(guān)系中的每個數(shù)組一定不能相同。
在任何一個關(guān)系數(shù)據(jù)庫中,第一范式是對關(guān)系模式的基本要求,不滿足第一范式的數(shù)據(jù)庫就不是關(guān)系型數(shù)據(jù)庫。
如果數(shù)據(jù)表中的每一個列都是不可再分割的基本數(shù)據(jù)項——同一列中不能有多個值,那么就稱此數(shù)據(jù)表符合第一范式,由此可見第一范式具有不可再分解的原子特性。
在第一范式中,數(shù)據(jù)表的每一行只包含一個實體的信息,并且每一行的每一列只能存放實體的一個屬性。例如,對于學(xué)生信息,不可以將學(xué)生實體的所有屬性信息(如學(xué)號、姓名、性別、年齡、班級等)都放在一個列中顯示,也不能將學(xué)生實體的兩個或多個屬性信息放在一個列中顯示,學(xué)生實體的每個屬性信息都放在一個列中顯示。
如果數(shù)據(jù)表中的列信息都符合第一范式,那么在數(shù)據(jù)表中的字段都是單一的、不可再分的。如表1.1所示就是不符合第一范式的學(xué)生信息表,因為“班級”列中包含了“系別”和“班級”兩個屬性信息,這樣“班級”列中的信息就不是單一的,是可以再分的;而表1.2就是符合第一范式的學(xué)生信息表,它將原“班級”列的信息拆分到“系別”列和“班級”列中。
表1.1 不符合第一范式的學(xué)生信息表

表1.2 符合第一范式的學(xué)生信息表

2.第二范式(2NF)
第二范式是在第一范式的基礎(chǔ)上建立起來的,即滿足第二范式必先滿足第一范式。第二范式要求數(shù)據(jù)庫表中的每個實體(即各個記錄行)必須可以被唯一地區(qū)分。為實現(xiàn)區(qū)分各行記錄,通常需要為表設(shè)置一個“區(qū)分列”,用以存儲各個實體的唯一標識。在學(xué)生信息表中,設(shè)置了“學(xué)號”列,由于每個學(xué)生的編號都是唯一的,因此每個學(xué)生可以被唯一地區(qū)分(即使學(xué)生存在重名的情況),那么這個唯一屬性列被稱為主關(guān)鍵字或主鍵。
第二范式要求實體的屬性完全依賴于主關(guān)鍵字,即不能存在僅依賴主關(guān)鍵字一部分的屬性,如果存在,那么這個屬性和主關(guān)鍵字的這一部分應(yīng)該分離出來形成一個新的實體,新實體與原實體之間是一對多的關(guān)系。
例如,這里以“員工工資信息表”為例,若以(員工編碼、崗位)為組合關(guān)鍵字(即復(fù)合主鍵),就會存在如下決定關(guān)系。
(員工編碼,崗位)→(決定)(姓名、年齡、學(xué)歷、基本工資、績效工資、獎金)
在上面的決定關(guān)系中,還可以進一步拆分為如下兩種決定關(guān)系。
(員工編碼)→(決定)(姓名、年齡、學(xué)歷) (崗位)→(決定)(基本工資)
其中,員工編碼決定了員工的基本信息(包括姓名、年齡、學(xué)歷);而崗位決定了基本工資,所以這個關(guān)系表不滿足第二范式。
對于上面的這種關(guān)系,可以把上述兩個關(guān)系表更改為如下3個表。
員工檔案表:employee(員工編碼、姓名、年齡、學(xué)歷)。
崗位工資表:quarters(崗位、基本工資)。
員工工資表:pay(員工編碼、崗位、績效工資、獎金)。
3.第三范式(3NF)
第三范式是在第二范式的基礎(chǔ)上建立起來的,即滿足第三范式必先滿足第二范式。第三范式要求關(guān)系表不存在非關(guān)鍵字列對任意候選關(guān)鍵字列的傳遞函數(shù)依賴,也就是說,第三范式要求一個關(guān)系表中不包含已在其他表中包含的非主關(guān)鍵字信息。
所謂傳遞函數(shù)依賴,就是指如果存在關(guān)鍵字段A決定非關(guān)鍵字段B,而非關(guān)鍵字段B決定非關(guān)鍵字段C,則稱非關(guān)鍵字段C傳遞函數(shù)依賴于關(guān)鍵字段A。
例如,這里以員工信息表(employee)為例,該表中包含員工編碼、員工姓名、年齡、部門編碼、部門經(jīng)理等信息,該關(guān)系表的關(guān)鍵字為“員工編碼”,因此存在如下決定關(guān)系。
(員工編碼)→(決定)(員工姓名、年齡、部門編碼、部門經(jīng)理)
上面的這個關(guān)系表是符合第二范式的,但它不符合第三范式,因為該關(guān)系表內(nèi)部隱含著如下決定關(guān)系。
(員工編碼)→(決定)(部門編碼)→(決定)(部門經(jīng)理)
上面的關(guān)系表存在非關(guān)鍵字段“部門經(jīng)理”對關(guān)鍵字段“員工編碼”的傳遞函數(shù)依賴。對于上面的這種關(guān)系,可以把這個關(guān)系表(employee)更改為如下兩個關(guān)系表。
員工信息表:employee(員工編碼、員工姓名、年齡、部門編碼)。
部門信息表:department(部門編碼、部門經(jīng)理)。
對于關(guān)系型數(shù)據(jù)庫的設(shè)計,理想的設(shè)計目標是按照“規(guī)范化”原則存儲數(shù)據(jù),因為這樣做能夠消除數(shù)據(jù)冗余、更新異常、插入異常和刪除異常。
1.3 Oracle 11g的新功能
Oracle 11g可以幫助企業(yè)管理企業(yè)信息、更深入地洞察業(yè)務(wù)狀況,并迅速自信地做出調(diào)整以適應(yīng)不斷變化的競爭環(huán)境。新版數(shù)據(jù)庫增強了Oracle數(shù)據(jù)庫獨特的數(shù)據(jù)庫集群、數(shù)據(jù)中心自動化和工作量管理功能。Oracle客戶可以在安全的、高度可用和可擴展的、由低成本服務(wù)器和存儲設(shè)備組成的網(wǎng)格上滿足最苛刻的交易處理、數(shù)據(jù)倉庫和內(nèi)容管理應(yīng)用,其中主要的新功能列舉如下。
1.增強信息生命周期管理和存儲管理能力
Oracle 11g具有極新的數(shù)據(jù)劃分和壓縮功能,可實現(xiàn)更經(jīng)濟的信息生命周期管理和存儲管理。很多原來需要手工完成的數(shù)據(jù)劃分工作在Oracle 11g中都實現(xiàn)了自動化,Oracle 11g還擴展了已有的范圍、散列和列表劃分功能,增加了間隔、索引和虛擬卷劃分功能。
2.全面回憶數(shù)據(jù)變化
Oracle 11g具有Oracle全面回憶(Oracle Total Recall)組件,可幫助管理員查詢在過去某些時刻指定表格中的數(shù)據(jù)。管理員可以用這種簡單實用的方法給數(shù)據(jù)增加時間維度,以跟蹤數(shù)據(jù)變化、實施審計,并滿足法規(guī)要求。
3.最大限度提高信息可用性
在保護數(shù)據(jù)庫應(yīng)用免受計劃停機和意外宕機影響方面,Oracle在業(yè)界一直處于領(lǐng)先地位。Oracle 11g進一步增強了這種領(lǐng)先地位,數(shù)據(jù)庫管理員現(xiàn)在可以更輕松地達到用戶的可用性預(yù)期。新的可用性功能包括Oracle閃回交易(Oracle Flashback Transaction),可以輕松撤銷錯誤交易以及任何相關(guān)交易;并行備份和恢復(fù)功能,可改善非常大數(shù)據(jù)庫的備份和存儲性能;“熱修補”功能,不必關(guān)閉數(shù)據(jù)庫就可以進行數(shù)據(jù)庫修補,提高了系統(tǒng)可用性。
4.Oracle快速文件
Oracle 11g具有在數(shù)據(jù)庫中存儲大型對象的下一代功能,這些對象包括圖像、大型文本對象或一些先進的數(shù)據(jù)類型,如XML、醫(yī)療成像數(shù)據(jù)和三維對象。Oracle快速文件(Oracle Fast Files)組件使得數(shù)據(jù)庫應(yīng)用的性能完全比得上文件系統(tǒng)的性能。
5.更快的XML
在Oracle 11g中,XML DB的性能獲得了極大的提高。XML DB是Oracle數(shù)據(jù)庫的一個組件,可幫助客戶以本機方式存儲和操作XML數(shù)據(jù)。Oracle 11g增加了對二進制XML數(shù)據(jù)的支持,現(xiàn)在客戶可以選擇適合自己特定應(yīng)用及性能需求的XML存儲選項。
6.透明的加密
Oracle 11g進一步增強了Oracle數(shù)據(jù)庫無與倫比的安全性。這個新版數(shù)據(jù)庫增強了Oracle透明數(shù)據(jù)加密功能,將這種功能擴展到了卷級加密之外。Oracle 11g具有表空間加密功能,可用來加密整個表、索引和所存儲的其他數(shù)據(jù)。
7.嵌入式OLAP行列
Oracle 11g在數(shù)據(jù)倉庫方面也引入了創(chuàng)新。OLAP行列現(xiàn)在可以在數(shù)據(jù)庫中像物化圖那樣使用,因此開發(fā)人員可以用業(yè)界標準SQL實現(xiàn)數(shù)據(jù)查詢,同時仍然受益于OLAP行列所具有的高性能。
8.連接匯合和查詢結(jié)果高速緩存
Oracle 11g進一步增強了Oracle在性能和可擴展性方面的業(yè)界領(lǐng)先地位,增加了查詢結(jié)果高速緩存等新功能。通過高速緩存和重用經(jīng)常調(diào)用的數(shù)據(jù)庫查詢以及數(shù)據(jù)庫和應(yīng)用層的功能,查詢結(jié)果高速緩存功能改善了應(yīng)用的性能和可擴展性。
9.增強了應(yīng)用開發(fā)能力
Oracle 11g提供多種開發(fā)工具供開發(fā)人員選擇,它提供的簡化應(yīng)用開發(fā)流程可以充分利用Oracle 11g的關(guān)鍵功能,這些關(guān)鍵功能包括客戶端高速緩存、提高應(yīng)用速度的二進制XML、XML處理以及文件存儲和檢索。
1.4 Oracle 11g的安裝與卸載
1.4.1 Oracle 11g的安裝
Oracle 11g的安裝與升級都是比較復(fù)雜的工作,為了便于Oracle 11g數(shù)據(jù)庫管理系統(tǒng)可以安裝在多種操作平臺(如Windows平臺、Linux平臺和UNIX平臺等)上,Oracle 11g提供了一個通用的安裝工具——Oracle Universal Installer,該工具是基于Java語言開發(fā)的圖形界面安裝工具,利用它可以實現(xiàn)在不同操作系統(tǒng)平臺上安裝Oracle 11g數(shù)據(jù)庫。本節(jié)主要介紹Oracle 11g在Windows平臺上的安裝。
Oracle 11g數(shù)據(jù)庫服務(wù)器由Oracle數(shù)據(jù)庫軟件和Oracle實例組成。安裝數(shù)據(jù)庫服務(wù)器就是將管理工具、實用工具、網(wǎng)絡(luò)服務(wù)和基本的客戶端等組件從安裝盤復(fù)制到計算機硬盤的文件夾結(jié)構(gòu)中,并創(chuàng)建數(shù)據(jù)庫實例、配置網(wǎng)絡(luò)和啟動服務(wù)等。下面對Oracle 11g的安裝過程進行詳細的說明,這里以O(shè)racle Database 11g發(fā)行版2為例(Oracle 11g其他版本的安裝可參考此版本),具體安裝過程如下。
(1)在數(shù)據(jù)庫安裝資源包或安裝文件夾中雙擊setup.exe文件,將啟動Oracle Universal Installer安裝工具,并打開如圖1.4所示的命令行窗口,然后會在該窗口中出現(xiàn)用于檢測計算機軟件、硬件安裝環(huán)境的提示信息,若安裝環(huán)境不滿足系統(tǒng)安裝的最小需求,則程序會終止。

圖1.4 啟動Oracle Universal Installer
(2)在Oracle Universal Installer安裝工具檢測完當(dāng)前系統(tǒng)的軟件、硬件環(huán)境之后,將打開“配置安全更新”界面。該界面主要用來設(shè)置系統(tǒng)的在線更新方式,若數(shù)據(jù)庫所安裝的機器沒有連接Internet,則無須進行系統(tǒng)在線更新配置。這樣在該界面上可以取消選中“我希望通過My Oracle Support接收安全更新”復(fù)選框,并將“電子郵件”文本框置空,然后單擊“下一步”按鈕,如圖1.5所示。

圖1.5 “配置安全更新”界面
(3)單擊“下一步”按鈕后,系統(tǒng)會彈出“未指定電子郵件地址”的信息提示框,如圖1.6所示。這里單擊“是”按鈕,表示對上一步的設(shè)置進行確認就可以了。

圖1.6 “未指定電子郵件地址”提示框
(4)單擊“是”按鈕后,會打開“選擇安裝選項”界面,該界面用于選擇“安裝選項”,這里選中“創(chuàng)建和配置數(shù)據(jù)庫”單選按鈕,然后單擊“下一步”按鈕,如圖1.7所示。

圖1.7 “選擇安裝選項”界面
(5)單擊“下一步”按鈕后,會打開“系統(tǒng)類”界面,如圖1.8所示。該界面用來選擇數(shù)據(jù)庫被安裝在哪種操作系統(tǒng)平臺(Windows主要有桌面版和服務(wù)器版兩種)上,這要根據(jù)當(dāng)前機器所安裝的操作系統(tǒng)而定,本演示實例使用的是Windows 7操作系統(tǒng)(屬于桌面類系統(tǒng)),所以選擇“桌面類”選項,然后單擊“下一步”按鈕。

圖1.8 “系統(tǒng)類”界面
(6)單擊“下一步”按鈕后,會打開“典型安裝配置”界面。在該界面中,首先設(shè)置文件目錄,默認情況下,安裝系統(tǒng)會自動搜索出剩余磁盤空間最大的磁盤作為默認安裝盤,當(dāng)然也可以自定義安裝磁盤;然后選擇數(shù)據(jù)庫版本,安裝系統(tǒng)提供的數(shù)據(jù)庫版本包括“企業(yè)版”“標準版”“個人版”“定制版”4種,通常選擇“企業(yè)版”就可以;接著輸入“全局數(shù)據(jù)庫名”和登錄密碼(需要記住,該密碼是system、sys、sysman、dbsnmp這4個管理賬戶共同使用的初始密碼。另外,用戶scott的初始密碼為tiger),其中“全局數(shù)據(jù)庫名”也就是數(shù)據(jù)庫實例名稱,它具有唯一性,不允許出現(xiàn)兩個重復(fù)的“全局數(shù)據(jù)庫名”;最后單擊“下一步”按鈕,如圖1.9所示。

圖1.9 “典型安裝配置”界面
在“管理口令”和“確認口令”后輸入1qaz2wsx,即為system賬戶的密碼。此為本書中設(shè)置的密碼,讀者可自行設(shè)置此密碼。
(7)單擊“下一步”按鈕后,會打開“執(zhí)行先決條件檢查”界面,該界面用來檢查安裝本產(chǎn)品所需要的最低配置,檢查結(jié)果會在下一個界面中顯示出來,如圖1.10所示。

圖1.10 “執(zhí)行先決條件檢查”界面
(8)檢查完畢后,彈出如圖1.11所示的“概要”界面,在該界面中會顯示出安裝產(chǎn)品的概要信息,若在上一步中檢查出某些系統(tǒng)配置不符合Oracle安裝的最低要求,則會在該界面的列表中顯示出來,以供用戶參考,然后單擊“完成”按鈕即可。

圖1.11 “概要”界面
(9)單擊“完成”按鈕后,會打開“安裝產(chǎn)品”界面,該界面會顯示產(chǎn)品的安裝進度,如圖1.12所示。

圖1.12 “安裝產(chǎn)品”界面
(10)當(dāng)“安裝產(chǎn)品”界面中的進度條到達100%后,會打開Database Configuration Assistant(數(shù)據(jù)庫配置助手)界面,進行數(shù)據(jù)庫文件的復(fù)制,如圖1.13所示。在該界面中,單擊“停止”按鈕,可以隨時停止文件復(fù)制。

圖1.13 Database Configuration Assistant界面
(11)當(dāng)Database Configuration Assistant界面中的進度條到達100%后,表示Oracle 11g數(shù)據(jù)庫安裝所需的文件已經(jīng)復(fù)制完畢,這時會彈出一個包含安裝信息的對話框,如圖1.14所示。

圖1.14 包含安裝信息的對話框
(12)在如圖1.14所示的對話框中單擊“口令管理”按鈕,會打開如圖1.15所示的“口令管理”對話框,在該對話框中可以為某些用戶重新設(shè)置口令或者解除某些用戶的鎖定狀態(tài)(例如,scott用戶默認處于鎖定狀態(tài))。

圖1.15 “口令管理”對話框
注意:需要將scott用戶后單元格的對號去掉,解除鎖定,否則將不能操作scott用戶中的表(scott用戶中存在4張默認創(chuàng)建的表,分別為emp、dept、bonus和salgrade,其中emp和dept表最常用)。
(13)在“口令管理”對話框中單擊“確定”或“取消”按鈕就可以返回到如圖1.14所示的包含安裝信息的對話框,在該對話框中單擊“確定”按鈕將打開“完成”界面,如圖1.16所示。另外,需要用戶在這個界面記住Oracle企業(yè)管理器(Oracle Enterprise Manager,OEM)的鏈接地址,這是一個Web形式的企業(yè)管理器,它的地址通常默認為https://localhost:1518/em。至此,Oracle 11g數(shù)據(jù)庫安裝完畢,單擊“關(guān)閉”按鈕完成Oracle 11g數(shù)據(jù)庫的安裝。

圖1.16 “完成”界面
1.4.2 Oracle 11g的卸載
Oracle 11g的卸載主要有兩種方式,一種是使用Oracle Universal Installer管理工具,該工具以向?qū)У哪J叫遁d數(shù)據(jù)庫;另一種是運行deinstall.bat批處理文件來卸載數(shù)據(jù)庫。由于第一種卸載方式以向?qū)J竭M行,比較簡單,這里不做過多介紹。這里主要講解第二種卸載數(shù)據(jù)庫的方法——使用deinstall.bat批處理文件卸載數(shù)據(jù)庫,具體步驟如下。
(1)首先打開Windows 7的“組件服務(wù)”窗口,然后停止所有的Oracle后臺服務(wù)程序,如圖1.17所示。

圖1.17 停止Oracle所有的后臺服務(wù)
(2)運行E:\app\Administrator\product\11.2.0\dbhome_1\deinstall\deinstall.bat這個批處理文件(這個目錄要根據(jù)自己實際安裝的位置來確定),會打開如圖1.18所示的命令行窗口,然后等待程序提取“卸載”信息。

圖1.18 第一個命令行界面
(3)“卸載”信息提取完畢后,會顯示如圖1.19所示的第二個命令行界面,用以取消配置LISTENER單實例監(jiān)聽程序。

圖1.19 第二個命令行界面
(4)接著顯示如圖1.20所示的第三個命令行界面,在該界面的提示符位置輸入全局數(shù)據(jù)庫名稱,若存在多個數(shù)據(jù)庫,則數(shù)據(jù)庫名稱之間使用逗號分隔(這里輸入orcl),然后按Enter鍵(或者什么也不輸,直接按Enter鍵即可)。

圖1.20 第三個命令行界面
(5)這時會顯示第四個命令行界面,如圖1.21所示。在該界面提示符的位置輸入y字符,然后按Enter鍵。

圖1.21 第四個命令行界面
(6)這時會顯示第五個命令行界面,如圖1.22所示,等待卸載Oracle 11g數(shù)據(jù)庫,卸載操作可能要持續(xù)幾分鐘,需耐心等待。

圖1.22 第五個命令行界面
(7)卸載完成,命令行界面會自動退出,由于這種自動卸載功能并不完全徹底,需要手動清除安裝目錄中的剩余文件。
1.5 Oracle 11g的管理工具
Oracle 11g提供了多種數(shù)據(jù)庫管理工具,這里主要介紹常用的SQL*Plus、Oracle企業(yè)管理器(Oracle Enterprise Manager,OEM)和數(shù)據(jù)庫配置助手(Database Configuration Assistant)。
1.5.1 SQL*Plus工具
在Oracle 11g數(shù)據(jù)庫系統(tǒng)中,用戶對數(shù)據(jù)庫的操作主要是通過SQL*Plus來完成的。SQL*Plus作為Oracle的客戶端工具,既可以建立位于數(shù)據(jù)庫服務(wù)器上的數(shù)據(jù)連接,也可以建立位于網(wǎng)絡(luò)中的數(shù)據(jù)連接,下面將介紹如何啟動SQL*Plus和如何使用SQL*Plus連接到數(shù)據(jù)庫。
(1)選擇“開始”/“所有程序”/Oracle-OraDb11g_home1/“應(yīng)用程序開發(fā)”/SQL*Plus命令,打開如圖1.23所示的SQL*Plus啟動界面。

圖1.23 SQL*Plus啟動界面
(2)在命令提示符的位置輸入登錄用戶(如system或sys等系統(tǒng)管理賬戶)和登錄密碼(密碼是在安裝或創(chuàng)建數(shù)據(jù)庫時指定的),若輸入的用戶名和密碼正確,則SQL*Plus將連接到數(shù)據(jù)庫,如圖1.24所示。

圖1.24 使用SQL*Plus連接數(shù)據(jù)庫
另外,還可以通過在“運行”中輸入cmd命令來啟動命令行窗口,然后在該窗口中輸入SQL*Plus命令來連接數(shù)據(jù)庫,如圖1.25所示。使用SQL*Plus命令連接數(shù)據(jù)庫實例的語法格式如下。
SQLPLUS username[/password][@connect_identifier] [AS SYSOPER|SYSDBA]
username:表示登錄用戶名。
password:表示登錄密碼。
@connect_identifier:表示連接的全局數(shù)據(jù)庫名,若連接本機上的默認數(shù)據(jù)庫,則可以省略。
說明
在輸入Oracle數(shù)據(jù)庫命令時,其關(guān)鍵字不區(qū)分大小寫(例如,輸入sqlplus或SQLPLUS都可以),但參數(shù)區(qū)分大小寫。
1.5.2 Oracle企業(yè)管理器
Oracle企業(yè)管理器(Oracle Enterprise Manager,OEM)是基于Web界面的Oracle數(shù)據(jù)庫管理工具。啟動Oracle 11g的OEM只需要在瀏覽器中輸入其URL地址——通常為https://localhost:1518/em,然后連接主頁即可;也可以在“開始”菜單的“Oracle程序組”中選擇Database Control-orcl命令來啟動Oracle 11g的OEM工具。
如果是第一次使用OEM,啟動Oracle 11g的OEM后,需要安裝“信任證書”或者直接選擇“繼續(xù)瀏覽此網(wǎng)站”即可。然后就會出現(xiàn)OEM的登錄頁面,用戶需要輸入登錄用戶名(如system、sys、scott等)和登錄口令,如圖1.26所示。

圖1.26 登錄OEM
在輸入用戶名和口令后,單擊“登錄”按鈕,若用戶名和口令都正確,就會出現(xiàn)“數(shù)據(jù)庫實例”的“主目錄”屬性頁,如圖1.27所示。

圖1.27 “主目錄”屬性頁
OEM以圖形的方式提供用戶對數(shù)據(jù)庫的操作,雖然操作起來比較方便簡單,不需要使用大量的命令,但這對于初學(xué)者來說減少了學(xué)習(xí)操作Oracle數(shù)據(jù)庫命令的機會,而且不利于讀者深刻地理解Oracle數(shù)據(jù)庫。因此,建議讀者強制自己使用SQL*Plus工具。另外,本書實例的講解也主要在SQL*Plus中完成,以幫助讀者更好地學(xué)習(xí)SQL*Plus命令。
1.5.3 數(shù)據(jù)庫配置助手
在安裝Oracle 11g數(shù)據(jù)庫管理系統(tǒng)的過程中,若選中“僅安裝數(shù)據(jù)庫軟件”單選按鈕,則系統(tǒng)安裝完畢后,需要手動創(chuàng)建數(shù)據(jù)庫才能夠?qū)崿F(xiàn)對Oracle數(shù)據(jù)庫的各種操作。在Oracle 11g中,可以通過數(shù)據(jù)庫配置助手(Database Configuration Assistant,DBCA)來實現(xiàn)創(chuàng)建和配置數(shù)據(jù)庫。
選擇“開始”/“所有程序”/Oracle-OraDb11g_home1/“配置和移植工具”/Database Configuration Assistant命令,會打開如圖1.28所示的界面。

圖1.28 啟動數(shù)據(jù)庫配置助手
然后,用戶只需要按照數(shù)據(jù)庫配置助手向?qū)У奶崾局鸩竭M行設(shè)置,就可以實現(xiàn)創(chuàng)建和配置數(shù)據(jù)庫。
互動練習(xí):在scott模式下,使用SELECT語句查詢dept表中的所有記錄。
1.6 啟動與關(guān)閉數(shù)據(jù)庫實例
1.6.1 啟動數(shù)據(jù)庫實例
Oracle數(shù)據(jù)庫實例的啟動過程分為3個步驟,分別是啟動實例、加載數(shù)據(jù)庫、打開數(shù)據(jù)庫。用戶可以根據(jù)實際情況的需要,以不同的模式啟動數(shù)據(jù)庫,啟動數(shù)據(jù)庫所使用的命令格式如下。
STARTUP [NOMOUNT | MOUNT | OPEN | FORCE] [RESTRICT] [PFILE=filename]
NOMOUNT:表示啟動實例不加載數(shù)據(jù)庫。
MOUNT:表示啟動實例、加載數(shù)據(jù)庫并保持數(shù)據(jù)庫的關(guān)閉狀態(tài)。
OPEN:表示啟動實例、加載并打開數(shù)據(jù)庫,這個是默認選項。
FORCE:表示終止實例并重新啟動數(shù)據(jù)庫。
RESTRICT:用于指定以受限制的會話方式啟動數(shù)據(jù)庫。
PFILE:用于指定啟動實例時所使用的文本參數(shù)文件,filename就是文件名。
Oracle數(shù)據(jù)庫實例在啟動時必須讀取一個初始化參數(shù)文件,以便從中獲得有關(guān)實例啟動的參數(shù)配置信息。若在STARTUP語句中沒有指定PFILE參數(shù),則Oracle首先讀取默認位置的服務(wù)器初始化參數(shù)文件spfile,若沒有找到默認的服務(wù)器初始化參數(shù)文件,則將讀取默認位置的文本初始化參數(shù)文件。下面將分別講解STARTUP語法中列舉出的幾種啟動模式。
1.NOMOUNT模式
這種啟動模式只會創(chuàng)建實例(即創(chuàng)建Oracle實例的各種內(nèi)存結(jié)構(gòu)和服務(wù)進程),并不加載數(shù)據(jù)庫,也不會打開任何數(shù)據(jù)文件。下面的示例代碼顯示了如何使用NOMOUNT模式啟動數(shù)據(jù)庫實例。
【例1.1】 啟動數(shù)據(jù)庫實例到NOMOUNT模式下,代碼及運行結(jié)果如下。(實例位置:資源包\TM\sl\1\1)

在上面的示例代碼中,首先用戶要以sysdba的身份登錄,才具有關(guān)閉和啟動數(shù)據(jù)實例的權(quán)限。在使用SHUTDOWN命令關(guān)閉數(shù)據(jù)庫實例之后,然后使用STARTUP NOMOUNT命令啟動數(shù)據(jù)庫實例。
說明
通常在創(chuàng)建新數(shù)據(jù)庫或重建控制文件時,使用NOMOUNT模式啟動數(shù)據(jù)庫實例。
2.MOUNT模式
這種模式將啟動實例、加載數(shù)據(jù)庫并保持數(shù)據(jù)庫的關(guān)閉狀態(tài),下面的示例代碼顯示了如何使用MOUNT模式啟動數(shù)據(jù)庫實例。
【例1.2】 啟動數(shù)據(jù)庫實例到MOUNT模式下,代碼及運行結(jié)果如下。(實例位置:資源包\TM\sl\1\2)

上面的代碼中,首先使用SHUTDOWN命令關(guān)閉數(shù)據(jù)庫實例,然后再使用STARTUP MOUNT命令啟動數(shù)據(jù)庫實例。
說明
MOUNT模式通常在進行數(shù)據(jù)庫維護時使用,例如,執(zhí)行數(shù)據(jù)庫完全恢復(fù)操作、更改數(shù)據(jù)庫的歸檔模式等。
3.OPEN模式
這種模式將啟動實例、加載并打開數(shù)據(jù)庫,這就是常規(guī)的啟動模式,用戶想要對數(shù)據(jù)庫進行多種操作,就必須使用OPEN模式啟動數(shù)據(jù)庫實例。下面的示例代碼顯示了如何使用OPEN模式啟動數(shù)據(jù)庫實例。
【例1.3】 啟動數(shù)據(jù)庫實例到OPEN模式下,代碼及運行結(jié)果如下。

在上面的代碼中,startup命令的后面不帶有任何參數(shù),就表示以O(shè)PEN模式啟動數(shù)據(jù)庫實例。
4.FORCE模式
這種模式將終止實例并重新啟動數(shù)據(jù)庫,這種啟動模式具有一定的強制性。例如,在其他啟動模式失效時,可以嘗試使用這種啟動模式。下面的示例代碼顯示了如何使用FORCE模式啟動數(shù)據(jù)庫實例。
【例1.4】 啟動數(shù)據(jù)庫實例到FORCE模式下,代碼及運行結(jié)果如下。

1.6.2 關(guān)閉數(shù)據(jù)庫實例
與啟動數(shù)據(jù)庫實例相同,關(guān)閉數(shù)據(jù)庫實例也分為3個步驟,分別是關(guān)閉數(shù)據(jù)庫、卸載數(shù)據(jù)庫、關(guān)閉Oracle實例。在SQL*Plus中,可以使用SHUTDOWN語句關(guān)閉數(shù)據(jù)庫,其具體語法格式如下。
SHUTDOWN [NORMAL | TRANSACTIONAL | IMMEDIATE | ABORT]
NORMAL:表示以正常方式關(guān)閉數(shù)據(jù)庫。
TRANSACTIONAL:表示在當(dāng)前所有的活動事務(wù)被提交完畢之后,關(guān)閉數(shù)據(jù)庫。
IMMEDIATE:表示在盡可能短的時間內(nèi)立即關(guān)閉數(shù)據(jù)庫。
ABORT:表示以終止方式來關(guān)閉數(shù)據(jù)庫。
下面將分別講解在SHUTDOWN語法中列舉出的4種關(guān)閉數(shù)據(jù)庫實例的方式。
1.NORMAL方式
這種方式稱作正常關(guān)閉方式,如果對關(guān)閉數(shù)據(jù)庫的時間沒有限制,通常會使用這種方式來關(guān)閉數(shù)據(jù)庫。下面的代碼顯示了如何使用NORMAL方式關(guān)閉數(shù)據(jù)庫。
【例1.5】 使用NORMAL方式關(guān)閉數(shù)據(jù)庫,代碼及運行結(jié)果如下。
SQL> shutdown normal 數(shù)據(jù)庫已經(jīng)關(guān)閉。 已經(jīng)卸載數(shù)據(jù)庫。 ORACLE 例程已經(jīng)關(guān)閉。
從上面的代碼可以看出,Oracle在執(zhí)行SHUTDOWN命令后,所返回的響應(yīng)信息就是關(guān)閉數(shù)據(jù)庫實例的過程。當(dāng)以正常方式關(guān)閉數(shù)據(jù)庫時,Oracle將執(zhí)行如下操作。
阻止任何用戶建立新的連接。
等待當(dāng)前所有正在連接的用戶主動斷開連接。
當(dāng)所有的用戶都斷開連接后,將立即關(guān)閉數(shù)據(jù)庫。
2.TRANSACTIONAL方式
這種方式稱作事務(wù)關(guān)閉方式,它的首要任務(wù)是能夠保證當(dāng)前所有的活動事務(wù)都可以被提交,并在盡可能短的時間內(nèi)關(guān)閉數(shù)據(jù)庫。下面的代碼顯示了如何使用TRANSACTIONAL方式關(guān)閉數(shù)據(jù)庫。
【例1.6】 使用TRANSACTIONAL方式關(guān)閉數(shù)據(jù)庫,代碼及運行結(jié)果如下。
SQL> shutdown transactional 數(shù)據(jù)庫已經(jīng)關(guān)閉。 已經(jīng)卸載數(shù)據(jù)庫。 ORACLE 例程已經(jīng)關(guān)閉。
以事務(wù)方式關(guān)閉數(shù)據(jù)庫時,Oracle將執(zhí)行如下操作。
阻止用戶建立新連接和開始新事務(wù)。
等待所有活動事務(wù)提交后,再斷開用戶連接。
當(dāng)所有的活動事務(wù)提交完畢、所有的用戶都斷開連接后,將關(guān)閉數(shù)據(jù)庫。
3.IMMEDIATE方式
就跟IMMEDIATE單詞的含義一樣,這種方式稱作立即關(guān)閉方式,這種方式能夠在盡可能短的時間內(nèi)關(guān)閉數(shù)據(jù)庫。下面的代碼顯示了如何使用IMMEDIATE方式關(guān)閉數(shù)據(jù)庫。
【例1.7】 使用IMMEDIATE方式關(guān)閉數(shù)據(jù)庫,代碼及運行結(jié)果如下。
SQL> shutdown immediate 數(shù)據(jù)庫已經(jīng)關(guān)閉。 已經(jīng)卸載數(shù)據(jù)庫。 ORACLE 例程已經(jīng)關(guān)閉。
在這種關(guān)閉方式下,Oracle不但會立即中斷當(dāng)前用戶的連接,而且會強行終止用戶的當(dāng)前活動事務(wù),將未完成的事務(wù)回退。以立即關(guān)閉方式關(guān)閉數(shù)據(jù)庫時,Oracle將執(zhí)行如下操作。
阻止用戶建立新連接和開始新事務(wù)。
將未提交的活動事務(wù)回退。
關(guān)閉數(shù)據(jù)庫。
4.ABORT方式
這種方式稱作終止關(guān)閉方式,終止關(guān)閉方式具有一定的強制性和破壞性。使用這種方式會強制中斷任何數(shù)據(jù)庫操作,這樣可能會丟失一部分數(shù)據(jù)信息,影響數(shù)據(jù)庫的完整性。除了由于使用其他3種方式無法關(guān)閉數(shù)據(jù)庫而使用它之外,應(yīng)該盡量避免使用這種方式。下面的代碼顯示了如何使用ABORT方式關(guān)閉數(shù)據(jù)庫。
【例1.8】 使用ABORT方式關(guān)閉數(shù)據(jù)庫,代碼及運行結(jié)果如下。
SQL> shutdown abort ORACLE 例程已經(jīng)關(guān)閉。
以立即關(guān)閉方式關(guān)閉數(shù)據(jù)庫時,Oracle將執(zhí)行如下操作。
阻止用戶建立新連接和開始新事務(wù)。
取消未提交的活動事務(wù),而不是回退。
立即終止正在執(zhí)行的任何SQL語句。
立即關(guān)閉數(shù)據(jù)庫。
互動練習(xí):在scott模式下,使用DISTINCT關(guān)鍵字顯示emp表中不重復(fù)記錄。
1.7 小結(jié)
本章首先對Oracle關(guān)系型數(shù)據(jù)庫的基本理論進行了概要的介紹,同時對數(shù)據(jù)庫的安裝、卸載進行了詳細講解。另外,在本章后面還講解了如何使用3種常用的數(shù)據(jù)庫管理工具和如何啟動與關(guān)閉數(shù)據(jù)庫實例。在這里,讀者要重點掌握SQL*Plus這個數(shù)據(jù)庫操作工具,在以后的學(xué)習(xí)中我們會經(jīng)常用到。
1.8 實踐與練習(xí)
1.嘗試通過數(shù)據(jù)庫配置助手(Database Configuration Assistant)創(chuàng)建一個名稱為mr的數(shù)據(jù)庫。
2.嘗試啟動數(shù)據(jù)庫到OPEN模式,然后使用TRANSACTIONAL方式關(guān)閉數(shù)據(jù)庫。
- 數(shù)據(jù)庫系統(tǒng)原理及MySQL應(yīng)用教程(第2版)
- Android Jetpack開發(fā):原理解析與應(yīng)用實戰(zhàn)
- 無代碼編程:用云表搭建企業(yè)數(shù)字化管理平臺
- 數(shù)據(jù)結(jié)構(gòu)(Java語言描述)
- 面向?qū)ο蟪绦蛟O(shè)計(Java版)
- 3D少兒游戲編程(原書第2版)
- 零基礎(chǔ)學(xué)Python網(wǎng)絡(luò)爬蟲案例實戰(zhàn)全流程詳解(入門與提高篇)
- 精通Python自動化編程
- 區(qū)塊鏈技術(shù)進階與實戰(zhàn)(第2版)
- Learning AWS
- QPanda量子計算編程
- Distributed Computing in Java 9
- 零基礎(chǔ)學(xué)HTML+CSS第2版
- Python網(wǎng)絡(luò)爬蟲實例教程(視頻講解版)
- Software-Defined Networking with OpenFlow(Second Edition)