




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、華為公司軟件筆試試卷(c/c+)一、填空題1-1、衡量一個(gè)算法好壞的度量主要有:時(shí)間復(fù)雜度、空間復(fù)雜度。1-2、頭文件中#ifndef/#define/#endif的作用是:防止頭文件被重復(fù)引用(宏保護(hù)作用)1-3、在如下的二叉數(shù)樹(shù)中:請(qǐng)寫(xiě)出前序遍歷為:abdcegfhi(也稱(chēng)前序周游)擴(kuò)展知識(shí):前序遍歷首先訪(fǎng)問(wèn)根結(jié)點(diǎn)然后遍歷左子樹(shù),最后遍歷右子樹(shù)。在遍歷左、右子樹(shù)時(shí),仍然先訪(fǎng)問(wèn)根結(jié)點(diǎn),然后遍歷左子樹(shù),最后遍歷右子樹(shù)。若二叉樹(shù)為空則結(jié)束返回,否則: (1)訪(fǎng)問(wèn)根結(jié)點(diǎn) (2)前序遍歷左子樹(shù) (3)前序遍歷右子樹(shù) 注意的是:遍歷左右子樹(shù)時(shí)仍然采用前序遍歷方法。 如上圖所示二叉樹(shù)前序遍歷,也叫先根遍
2、歷,遍歷的順序是:根,左子樹(shù),右子樹(shù)遍歷結(jié)果:abdecf中序遍歷,也叫中根遍歷,順序是: 左子樹(shù),根,右子樹(shù) 遍歷結(jié)果:dbeafc后序遍歷,也叫后根遍歷,遍歷順序,左子樹(shù),右子樹(shù),根遍歷結(jié)果:debfca1-4、以下為32位操作系統(tǒng)下的c 程序,請(qǐng)計(jì)算sizeof的值a)char str=”hello”;char *p = str;int n = 10;請(qǐng)計(jì)算:sizeof str =6sizeof p = 4sizeof n = 4b)void func char str100 sizeof str =4c)void *p = malloc 100sizeof p=4二、選擇題2-1、在
3、一種語(yǔ)言中,運(yùn)算符是從右向左結(jié)合的(例如:a+b+c=a+(b+c));下面表達(dá)式“7-(16/(3+10*2)-4”的結(jié)果是:(c)a -1 b 1 c 3 d 7 e 9 2-2、某些操作系統(tǒng)把一條命令的執(zhí)行結(jié)果輸出給下一條命令,作為它的輸入, 并加以處理,這種機(jī)制稱(chēng)為a,使命令執(zhí)行的結(jié)果不在屏幕上顯示, 而引入另外一個(gè)文件,這種機(jī)制稱(chēng)為b。使命令所需要的處理信息不從鍵盤(pán)接收,而取自另一個(gè)文件,這種機(jī)制稱(chēng)為c。操作系統(tǒng)不從鍵盤(pán)逐條接收命令,而調(diào)用一個(gè)正文文件,執(zhí)行其中保存的一系列命令,這種方式屬于d方式,編寫(xiě)這樣的文件應(yīng)符合e 的語(yǔ)法規(guī)則。ea:1)鏈接 2)管道(線(xiàn)) 3)輸入重新定向
4、4)輸出重新定向b:1)清屏 2) 屏蔽顯示 3)輸入重新定向 4)管道(線(xiàn))c:1)輸入重新定向 2)讀保護(hù) 3)管道(線(xiàn)) 4)批處理d:1)系統(tǒng)生成 2) 初始裝入 3)批處理 4)管道(線(xiàn))e:1)會(huì)話(huà)語(yǔ)言 2)交互語(yǔ)言 3)機(jī)器語(yǔ)言 4)命令語(yǔ)言2-3、線(xiàn)程和進(jìn)程最主要的區(qū)別在于:(d)a:進(jìn)程是unix下的概念,線(xiàn)程是windows下的概念b:進(jìn)程的效率比線(xiàn)程低c:在進(jìn)程中可以創(chuàng)造線(xiàn)程,但線(xiàn)程中不能生成進(jìn)程d:進(jìn)程由自己獨(dú)立的運(yùn)行空間,線(xiàn)程的運(yùn)行空間是共享的。知識(shí)擴(kuò)展:線(xiàn)程是比進(jìn)程更小的處理模塊。進(jìn)程和線(xiàn)程都是由操作系統(tǒng)所體會(huì)的程序運(yùn)行的基本單元,系統(tǒng)利用該基本單元實(shí)現(xiàn)系統(tǒng)對(duì)應(yīng)用的
5、并發(fā)性。進(jìn)程和線(xiàn)程的區(qū)別在于: 簡(jiǎn)而言之,一個(gè)程序至少有一個(gè)進(jìn)程,一個(gè)進(jìn)程至少有一個(gè)線(xiàn)程. 線(xiàn)程的劃分尺度小于進(jìn)程,使得多線(xiàn)程程序的并發(fā)性高。 另外,進(jìn)程在執(zhí)行過(guò)程中擁有獨(dú)立的內(nèi)存單元,而多個(gè)線(xiàn)程共享內(nèi)存,從而極大地提高了程序的運(yùn)行效率。 線(xiàn)程在執(zhí)行過(guò)程中與進(jìn)程還是有區(qū)別的。每個(gè)獨(dú)立的線(xiàn)程有一個(gè)程序運(yùn)行的入口、順序執(zhí)行序列和程序的出口。但是線(xiàn)程不能夠獨(dú)立執(zhí)行,必須依存在應(yīng)用程序中,由應(yīng)用程序提供多個(gè)線(xiàn)程執(zhí)行控制。 從邏輯角度來(lái)看,多線(xiàn)程的意義在于一個(gè)應(yīng)用程序中,有多個(gè)執(zhí)行部分可以同時(shí)執(zhí)行。但操作系統(tǒng)并沒(méi)有將多個(gè)線(xiàn)程看做多個(gè)獨(dú)立的應(yīng)用,來(lái)實(shí)現(xiàn)進(jìn)程的調(diào)度和管理以及資源分配。這就是進(jìn)程和線(xiàn)程的重要區(qū)
6、別。 進(jìn)程是具有一定獨(dú)立功能的程序關(guān)于某個(gè)數(shù)據(jù)集合上的一次運(yùn)行活動(dòng),進(jìn)程是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位. 線(xiàn)程是進(jìn)程的一個(gè)實(shí)體,是cpu調(diào)度和分派的基本單位,它是比進(jìn)程更小的能獨(dú)立運(yùn)行的基本單位.線(xiàn)程自己基本上不擁有系統(tǒng)資源,只擁有一點(diǎn)在運(yùn)行中必不可少的資源(如程序計(jì)數(shù)器,一組寄存器和棧),但是它可與同屬一個(gè)進(jìn)程的其他的線(xiàn)程共享進(jìn)程所擁有的全部資源. 一個(gè)線(xiàn)程可以創(chuàng)建和撤銷(xiāo)另一個(gè)線(xiàn)程;同一個(gè)進(jìn)程中的多個(gè)線(xiàn)程之間可以并發(fā)執(zhí)行.2-4、對(duì)棧s進(jìn)行下列操作:push(1),push(2),pop(),pop()。則此時(shí)棧頂元素是:(d)a: 1 b: 2 c: 0 d:不確定擴(kuò)展知識(shí):堆棧的
7、操作規(guī)則是先進(jìn)后出,即fifo。堆棧有兩種基本操作,對(duì)應(yīng)有兩條基本指令:進(jìn)棧指令push和出棧指令pop。進(jìn)棧指令先使堆棧指針sp減2,然后把一個(gè)字操作數(shù)存入堆棧頂部。堆棧操作的對(duì)象只能是字操作數(shù),進(jìn)棧時(shí),低字節(jié)存放于低地址,高字節(jié)存放在高地址,sp相應(yīng)向低地址移動(dòng)兩個(gè)字節(jié)單元。出棧指令把棧頂?shù)囊粋€(gè)字傳送至指定的目的操作數(shù),然后堆棧指針sp加2。目的操作數(shù)應(yīng)為字操作數(shù),字從棧頂彈出時(shí),低地址字節(jié)送低字節(jié),高地址字節(jié)送高字節(jié)。2-5、若有函數(shù)max(a,b),并且函數(shù)指針變量p已指向函數(shù),當(dāng)調(diào)用該函數(shù)時(shí)正確的調(diào)用方法是(函數(shù)調(diào)用):(c)a: (*p)max(a,b) b:*pmax(a,b)
8、c:(*p)(a,b) d:*p(a,b)2-6、程序的局部變量存在于 c 中,全局變量存在于 b 中,動(dòng)態(tài)申請(qǐng)數(shù)據(jù)存在于 c 中。a 代碼段 b 數(shù)據(jù)段 c堆棧 d 堆空間 d 程序 擴(kuò)展知識(shí):代碼應(yīng)該都在程序段中即cs,而變量就要分情況了,如果是全局變量和靜態(tài)變量就存在數(shù)據(jù)段即ds,如是局部變量或者臨時(shí)變量(比如子函數(shù)的返回值,或者地址都需要編譯器自動(dòng)生成傳遞的變量)的話(huà)就在堆棧段即ss,這些變量會(huì)隨著程序的結(jié)束而被銷(xiāo)毀也就是結(jié)束生命期。2-7、以下措施是為了保證數(shù)據(jù)庫(kù)的安全才采用,請(qǐng)問(wèn)哪一種有可能引起死鎖。(c)a 安全控制,包括用戶(hù)鑒定和存取控制b 完整性控制c 并發(fā)控制c 數(shù)據(jù)庫(kù)恢復(fù)
9、擴(kuò)展知識(shí):oracle數(shù)據(jù)庫(kù)的安全性、完整性、并發(fā)控制和恢復(fù)了保證數(shù)據(jù)庫(kù)數(shù)據(jù)的安全可靠性和正確有效,dbms必須提供統(tǒng)一的數(shù)據(jù)保護(hù)功能。數(shù)據(jù)保護(hù)也為數(shù)據(jù)控制,主要包括數(shù)據(jù)庫(kù)的安全性、完整性、并發(fā)控制和恢復(fù)。一、安全控制:數(shù)據(jù)庫(kù)的安全性是指保護(hù)數(shù)據(jù)庫(kù)以防止不合法的使用所造成的數(shù)據(jù)泄露、更改或破壞。計(jì)算機(jī)系統(tǒng)都有這個(gè)問(wèn)題,在數(shù)據(jù)庫(kù)系統(tǒng)中大量數(shù)據(jù)集中存放,為許多用戶(hù)共享,使安全問(wèn)題更為突出。在一般的計(jì)算機(jī)系統(tǒng)中,安全措施是一級(jí)一級(jí)設(shè)置的。在db存儲(chǔ)這一級(jí)可采用密碼技術(shù),當(dāng)物理存儲(chǔ)設(shè)備失竊后,它起到保密作用。在數(shù)據(jù)庫(kù)系統(tǒng)這一級(jí)中提供兩種控制:用戶(hù)標(biāo)識(shí)和鑒定,數(shù)據(jù)存取控制。在oracle多用戶(hù)數(shù)據(jù)庫(kù)系統(tǒng)
10、中,安全機(jī)制作下列工作:l 防止非授權(quán)的數(shù)據(jù)庫(kù)存??;防止非授權(quán)的對(duì)模式對(duì)象的存取;l 控制磁盤(pán)使用;l 控制系統(tǒng)資源使用;l 審計(jì)用戶(hù)動(dòng)作。數(shù)據(jù)庫(kù)安全可分為二類(lèi):系統(tǒng)安全性和數(shù)據(jù)安全性。系統(tǒng)安全性是指在系統(tǒng)級(jí)控制數(shù)據(jù)庫(kù)的存取和使用的機(jī)制,包含:l 有效的用戶(hù)名/口令的組合;l 一個(gè)用戶(hù)是否授權(quán)可連接數(shù)據(jù)庫(kù);l 用戶(hù)對(duì)象可用的磁盤(pán)空間的數(shù)量;l 用戶(hù)的資源限制;l 數(shù)據(jù)庫(kù)審計(jì)是否是有效的;l 用戶(hù)可執(zhí)行哪些系統(tǒng)操作。數(shù)據(jù)安全性是指在對(duì)象級(jí)控制數(shù)據(jù)庫(kù)的存取和使用的機(jī)制,包含:哪些用戶(hù)可存取一指定的模式對(duì)象及在對(duì)象上允許作哪些操作類(lèi)型。在oracle服務(wù)器上提供了一種任意存取控制,是一種基于特權(quán)限制
11、信息存取的方法。用戶(hù)要存取一對(duì)象必須有相應(yīng)的特權(quán)授給該用戶(hù)。已授權(quán)的用戶(hù)可任意地可將它授權(quán)給其它用戶(hù),由于這個(gè)原因,這種安全性類(lèi)型叫做任意型。oracle利用下列機(jī)制管理數(shù)據(jù)庫(kù)安全性:l 數(shù)據(jù)庫(kù)用戶(hù)和模式;l 特權(quán);l 角色;l 存儲(chǔ)設(shè)置和空間份額;l 資源限制;l 審計(jì)。(1)數(shù)據(jù)庫(kù)的存取控制oracle保護(hù)信息的方法采用任意存取控制來(lái)控制全部用戶(hù)對(duì)命名對(duì)象的存取。用戶(hù)對(duì)對(duì)象的存取受特權(quán)控制。一種特權(quán)是存取一命名對(duì)象的許可,為一種規(guī)定格式。oracle使用多種不同的機(jī)制管理數(shù)據(jù)庫(kù)安全性,其中有兩種機(jī)制:模式和用戶(hù)。模式為模式對(duì)象的集合,模式對(duì)象如表、視圖、過(guò)程和包等。第一數(shù)據(jù)庫(kù)有一組模式。每
12、一oracle數(shù)據(jù)庫(kù)有一組合法的用戶(hù),可存取一數(shù)據(jù)庫(kù),可運(yùn)行一數(shù)據(jù)庫(kù)應(yīng)用和使用該用戶(hù)各連接到定義該用戶(hù)的數(shù)據(jù)庫(kù)。當(dāng)建立一數(shù)據(jù)庫(kù)用戶(hù)時(shí),對(duì)該用戶(hù)建立一個(gè)相應(yīng)的模式,模式名與用戶(hù)名相同。一旦用戶(hù)連接一數(shù)據(jù)庫(kù),該用戶(hù)就可存取相應(yīng)模式中的全部對(duì)象,一個(gè)用戶(hù)僅與同名的模式相聯(lián)系,所以用戶(hù)和模式是類(lèi)似的。用戶(hù)的存取權(quán)利受用戶(hù)安全域的設(shè)置所控制,在建立一個(gè)數(shù)據(jù)庫(kù)的新用戶(hù)或更改一已有用戶(hù)時(shí),安全管理員對(duì)用戶(hù)安全域有下列決策:l 是由數(shù)據(jù)庫(kù)系統(tǒng)還是由操作系統(tǒng)維護(hù)用戶(hù)授權(quán)信息。l 設(shè)置用戶(hù)的缺省表空間和臨時(shí)表空間。l 列出用戶(hù)可存的表空間和在表空間中可使用空間份額。l 設(shè)置用戶(hù)資源限制的環(huán)境文件,該限制規(guī)定了用戶(hù)
13、可用的系統(tǒng)資源的總量。l 規(guī)定用戶(hù)具有的特權(quán)和角色,可存取相應(yīng)的對(duì)象。每一個(gè)用戶(hù)有一個(gè)安全域,它是一組特性,可決定下列內(nèi)容:用戶(hù)可用的特權(quán)和角色;用戶(hù)可用的表空間的份額;用戶(hù)的系統(tǒng)資源限制。1) 用戶(hù)鑒別:為了防止非授權(quán)的數(shù)據(jù)庫(kù)用戶(hù)的使用,oracle提供二種確認(rèn)方法操作系統(tǒng)確認(rèn)和相應(yīng)的oracle數(shù)據(jù)庫(kù)確認(rèn)。如果操作系統(tǒng)允許,oracle可使用操作系統(tǒng)所維護(hù)的信息來(lái)鑒定用戶(hù)。由操作系統(tǒng)鑒定用戶(hù)的優(yōu)點(diǎn)是:l 用戶(hù)可更方便地連接到oracle,不需要指定用戶(hù)名和口令。l 對(duì)用戶(hù)授權(quán)的控制集中在操作系統(tǒng),oracle不需要存儲(chǔ)和管理用戶(hù)口令。然而用戶(hù)名在數(shù)據(jù)庫(kù)中仍然要維護(hù)。l 在數(shù)據(jù)庫(kù)中的用戶(hù)名項(xiàng)
14、和操作系統(tǒng)審計(jì)跟蹤相對(duì)應(yīng)。oracle數(shù)據(jù)庫(kù)方式的用戶(hù)確認(rèn):oracle利用存儲(chǔ)在數(shù)據(jù)庫(kù)中的信息可鑒定試圖接到數(shù)據(jù)庫(kù)的一用戶(hù),這種鑒別方法僅當(dāng)操作系統(tǒng)不能用于數(shù)據(jù)庫(kù)用戶(hù)鑒別時(shí)才使用。當(dāng)用戶(hù)使用一oracle數(shù)據(jù)庫(kù)時(shí)執(zhí)行用戶(hù)鑒別。每個(gè)用戶(hù)在建立時(shí)有一個(gè)口令,用戶(hù)口令在建立對(duì)數(shù)據(jù)庫(kù)連接時(shí)使用,以防止對(duì)數(shù)據(jù)庫(kù)非授權(quán)的使用。用戶(hù)的口令以密碼的格式存儲(chǔ)在數(shù)據(jù)庫(kù)數(shù)據(jù)字典中,用戶(hù)可隨時(shí)修改其口令。2) 用戶(hù)的表空間設(shè)置和定額關(guān)于表空間的使用有幾種設(shè)置選擇:用戶(hù)的缺省表空間;用戶(hù)的臨時(shí)表空間;數(shù)據(jù)庫(kù)表空間的空間使用定額。3) 用戶(hù)資源限制和環(huán)境文件用戶(hù)可用的各種系統(tǒng)資源總量的限制是用戶(hù)安全域的部分。利用顯式地
15、設(shè)置資源限制;安全管理員可防止用戶(hù)無(wú)控制地消耗寶貴的系統(tǒng)資源。資源限制是由環(huán)境文件管理。一個(gè)環(huán)境文件是命名的一組賦給用戶(hù)的資源限制。另外oracle為安全管理員在數(shù)據(jù)庫(kù)級(jí)提供使能或使不能實(shí)施環(huán)境文件資源限制的選擇。oracle可限制幾種類(lèi)型的系統(tǒng)資源的使用,每種資源可在會(huì)話(huà)級(jí)、調(diào)用級(jí)或兩者上控制。在會(huì)話(huà)級(jí):每一次用戶(hù)連接到一數(shù)據(jù)庫(kù),建立一會(huì)話(huà)。每一個(gè)會(huì)話(huà)在執(zhí)行sql語(yǔ)句的計(jì)算機(jī)上耗費(fèi)cpu時(shí)間和內(nèi)存量進(jìn)行限制。對(duì)oracle的幾種資源限制可在會(huì)話(huà)級(jí)上設(shè)置。如果會(huì)話(huà)級(jí)資源限制被超過(guò),當(dāng)前語(yǔ)句被中止(回滾),并返回指明會(huì)話(huà)限制已達(dá)到的信息。此時(shí),當(dāng)前事務(wù)中所有之前執(zhí)行的語(yǔ)句不受影響,此時(shí)僅可作co
16、mmit、rollback或刪除對(duì)數(shù)據(jù)庫(kù)的連接等操作,進(jìn)行其它操作都將出錯(cuò)。在調(diào)用級(jí):在sql語(yǔ)句執(zhí)行時(shí),處理該語(yǔ)句有好幾步,為了防止過(guò)多地調(diào)用系統(tǒng),oracle在調(diào)用級(jí)可設(shè)置幾種資源限制。如果調(diào)用級(jí)的資源限制被超過(guò),語(yǔ)句處理被停止,該語(yǔ)句被回滾,并返回一錯(cuò)誤。然而當(dāng)前事務(wù)的已執(zhí)行所用語(yǔ)句不受影響,用戶(hù)會(huì)話(huà)繼續(xù)連接。有下列資源限制:l 為了防止無(wú)控制地使用cpu時(shí)間,oracle可限制每次oracle調(diào)用的cpu時(shí)間和在一次會(huì)話(huà)期間oracle調(diào)用所使用的cpu的時(shí)間,以0.01秒為單位。l 為了防止過(guò)多的i/o,oracle可限制每次調(diào)用和每次會(huì)話(huà)的邏輯數(shù)據(jù)塊讀的數(shù)目。l oracle在會(huì)話(huà)
17、級(jí)還提供其它幾種資源限制。每個(gè)用戶(hù)的并行會(huì)話(huà)數(shù)的限制;會(huì)話(huà)空閑時(shí)間的限制,如果一次會(huì)話(huà)的oracle調(diào)用之間時(shí)間達(dá)到該空閑時(shí)間,當(dāng)前事務(wù)被回滾,會(huì)話(huà)被中止,會(huì)話(huà)資源返回給系統(tǒng);每次會(huì)話(huà)可消逝時(shí)間的限制,如果一次會(huì)話(huà)期間超過(guò)可消逝時(shí)間的限制,當(dāng)前事務(wù)被回滾,會(huì)話(huà)被刪除,該會(huì)話(huà)的資源被釋放;每次會(huì)話(huà)的專(zhuān)用sga空間量的限制。用戶(hù)環(huán)境文件:用戶(hù)環(huán)境文件是指定資源限制的命名集,可賦給oracle數(shù)據(jù)庫(kù)的有效的用戶(hù)。利用用戶(hù)環(huán)境文件可容易地管理資源限制。要使用用戶(hù)環(huán)境文件,首先應(yīng)將數(shù)據(jù)庫(kù)中的用戶(hù)分類(lèi),決定在數(shù)據(jù)庫(kù)中全部用戶(hù)類(lèi)型需要多少種用戶(hù)環(huán)境文件。在建立環(huán)境文件之前,要決定每一種資源限制的值。例如一類(lèi)
18、用戶(hù)通常不執(zhí)行大量邏輯數(shù)據(jù)塊讀,那就可將logical-reads-per-session和logical-reads-per-call設(shè)置相應(yīng)的值。在許多情況中決定一用戶(hù)的環(huán)境文件的合適資源限制的最好的方法是收集每種資源使用的歷史信息。(2) 特權(quán)和角色1) 特權(quán):特權(quán)是執(zhí)行一種特殊類(lèi)型的sql語(yǔ)句或存取另一用戶(hù)的對(duì)象的權(quán)力。有兩類(lèi)特權(quán):系統(tǒng)特權(quán)和對(duì)象特權(quán)。系統(tǒng)特權(quán):是執(zhí)行一處特殊動(dòng)作或者在對(duì)象類(lèi)型上執(zhí)行一種特殊動(dòng)作的權(quán)利。oracle有60多種不同系統(tǒng)特權(quán),每一種系統(tǒng)允許用戶(hù)執(zhí)行一種特殊的數(shù)據(jù)庫(kù)操作或一類(lèi)數(shù)據(jù)庫(kù)操作.系統(tǒng)特權(quán)可授權(quán)給用戶(hù)或角色,一般,系統(tǒng)特權(quán)全管理人員和應(yīng)用開(kāi)發(fā)人員,終端用
19、戶(hù)不需要這些相關(guān)功能.授權(quán)給一用戶(hù)的系統(tǒng)特權(quán)并具有該 系統(tǒng)特權(quán)授權(quán)給其他用戶(hù)或角色.反之,可從那些被授權(quán)的用戶(hù)或角色回收系統(tǒng)特權(quán).對(duì)象特權(quán):在指定的表、視圖、序列、過(guò)程、函數(shù)或包上執(zhí)行特殊動(dòng)作的權(quán)利。對(duì)于不同類(lèi)型的對(duì)象,有不同類(lèi)型的對(duì)象特權(quán)。對(duì)于有些模式對(duì)象,如聚集、索引、觸發(fā)器、數(shù)據(jù)庫(kù)鏈沒(méi)有相關(guān)的對(duì)象特權(quán),它們由系統(tǒng)特權(quán)控制。對(duì)于包含在某用戶(hù)名的模式中的對(duì)象,該用戶(hù)對(duì)這些對(duì)象自動(dòng)地具有全部對(duì)象特權(quán),即模式的持有者對(duì)模式中的對(duì)象具有全部對(duì)象特權(quán)。這些對(duì)象的持有者可將這些對(duì)象上的任何對(duì)象特權(quán)可授權(quán)給其他用戶(hù)。如果被授者包含有g(shù)rant option 授權(quán),那么該被授者也可將其權(quán)利再授權(quán)給其他用戶(hù)
20、。2) 角色:為相關(guān)特權(quán)的命名組,可授權(quán)給用戶(hù)和角色。oracel利用角色更容易地進(jìn)行特權(quán)管理。有下列優(yōu)點(diǎn):l 減少特權(quán)管理,不要顯式地將同一特權(quán)組授權(quán)給幾個(gè)用戶(hù),只需將這特權(quán)組授給角色,然后將角色授權(quán)給每一用戶(hù)。l 動(dòng)態(tài)特權(quán)管理,如果一組特權(quán)需要改變,只需修改角色的特權(quán),所有授給該角色的全部用戶(hù)的安全域?qū)⒆詣?dòng)地反映對(duì)角色所作的修改。l 特權(quán)的選擇可用性,授權(quán)給用戶(hù)的角色可選擇地使其使能(可用)或使不能(不可用)。l 應(yīng)用可知性,當(dāng)一用戶(hù)經(jīng)一用戶(hù)名執(zhí)行應(yīng)用時(shí),該數(shù)據(jù)庫(kù)應(yīng)用可查詢(xún)字典,將自動(dòng)地選擇使角色使能或不能。專(zhuān)門(mén)的應(yīng)用安全性,角色使用可由口令保護(hù),應(yīng)用可提供正確的口令使用權(quán)角色使能,達(dá)到專(zhuān)
21、用的應(yīng)用安全性。因用戶(hù)不知其口令,不能使角色使能。一般,建立角色服務(wù)于兩個(gè)目的:為數(shù)據(jù)庫(kù)應(yīng)用管理特權(quán)和為用戶(hù)組管理特權(quán)。相應(yīng)的角色稱(chēng)為應(yīng)用角色和用戶(hù)角色。應(yīng)用角色是授予的運(yùn)行一數(shù)據(jù)庫(kù)應(yīng)用所需的全部特權(quán)。一個(gè)應(yīng)用角色可授給其它角色或指定用戶(hù)。一個(gè)應(yīng)用可有幾種不同角色,具有不同特權(quán)組的每一個(gè)角色在使用應(yīng)用時(shí)可進(jìn)行不同的數(shù)據(jù)存取。用戶(hù)角色是為具有公開(kāi)特權(quán)需求的一組數(shù)據(jù)庫(kù)用戶(hù)而建立的。用戶(hù)特權(quán)管理是受應(yīng)用角色或特權(quán)授權(quán)給用戶(hù)角色所控制,然后將用戶(hù)角色授權(quán)給相應(yīng)的用戶(hù)。數(shù)據(jù)庫(kù)角色包含下列功能: l 一個(gè)角色可授予系統(tǒng)特權(quán)或?qū)ο筇貦?quán)。l 一個(gè)角色可授權(quán)給其它角色,但不能循環(huán)授權(quán)。l 任何角色可授權(quán)給任何數(shù)
22、據(jù)庫(kù)用戶(hù)。l 授權(quán)給一用戶(hù)的每一角色可以是使能的或者使不能的。一個(gè)用戶(hù)的安全域僅包含當(dāng)前對(duì)該用戶(hù)使能的全部角色的特權(quán)。l 一個(gè)間接授權(quán)角色(授權(quán)給另一角色的角色)對(duì)一用戶(hù)可顯式地使其能或使不能。在一個(gè)數(shù)據(jù)庫(kù)中,每一個(gè)角色名必須唯一。角色名與用戶(hù)不同,角色不包含在任何模式中,所以建立一角色的用戶(hù)被刪除時(shí)不影響該角色。oracle為了提供與以前版本的兼容性,預(yù)定義下列角色:connent、resource、dba、exp-full-database和imp-full-database。(3)審計(jì)審計(jì)是對(duì)選定的用戶(hù)動(dòng)作的監(jiān)控和記錄,通常用于:l 審查可疑的活動(dòng)。例如:數(shù)據(jù)被非授權(quán)用戶(hù)所刪除,此時(shí)安全
23、管理員可決定對(duì)該 數(shù)據(jù)庫(kù)的所有連接進(jìn)行審計(jì),以及對(duì)數(shù)據(jù)庫(kù)的所有表的成功地或不成功地刪除進(jìn)行審計(jì)。l 監(jiān)視和收集關(guān)于指定數(shù)據(jù)庫(kù)活動(dòng)的數(shù)據(jù)。例如:dba可收集哪些被修改、執(zhí)行了多少次邏輯的i/o等統(tǒng)計(jì)數(shù)據(jù)。oracle支持三種審計(jì)類(lèi)型:l 語(yǔ)句審計(jì),對(duì)某種類(lèi)型的sql語(yǔ)句審計(jì),不指定結(jié)構(gòu)或?qū)ο蟆 特權(quán)審計(jì),對(duì)執(zhí)行相應(yīng)動(dòng)作的系統(tǒng)特權(quán)的使用審計(jì)。l 對(duì)象審計(jì),對(duì)一特殊模式對(duì)象上的指定語(yǔ)句的審計(jì)。oracle所允許的審計(jì)選擇限于下列方面:l 審計(jì)語(yǔ)句的成功執(zhí)行、不成功執(zhí)行,或者其兩者。l 對(duì)每一用戶(hù)會(huì)話(huà)審計(jì)語(yǔ)句執(zhí)行一次或者對(duì)語(yǔ)句每次執(zhí)行審計(jì)一次。l 對(duì)全部用戶(hù)或指定用戶(hù)的活動(dòng)的審計(jì)。當(dāng)數(shù)據(jù)庫(kù)的審計(jì)是使
24、能的,在語(yǔ)句執(zhí)行階段產(chǎn)生審計(jì)記錄。審計(jì)記錄包含有審計(jì)的操作、用戶(hù)執(zhí)行的操作、操作的日期和時(shí)間等信息。審計(jì)記錄可存在數(shù)據(jù)字典表(稱(chēng)為審計(jì)記錄)或操作系統(tǒng)審計(jì)記錄中。數(shù)據(jù)庫(kù)審計(jì)記錄是在sys模式的aud$表中。二、 數(shù)據(jù)完整性 它是指數(shù)據(jù)的正確性和相容性。數(shù)據(jù)的完整性是為了防止數(shù)據(jù)庫(kù)存在不符合主義的數(shù)據(jù),防止錯(cuò)誤信息輸入和輸出,即數(shù)據(jù)要遵守由dba或應(yīng)用開(kāi)發(fā)者所決定的一組預(yù)定義的規(guī)則。oracle應(yīng)用于關(guān)系數(shù)據(jù)庫(kù)的表的數(shù)據(jù)完整性有下列類(lèi)型:l 在插入或修改表的行時(shí)允許不允許包含有空值的列,稱(chēng)為空與非空規(guī)則。l 唯一列值規(guī)則,允許插入或修改的表行在該列上的值唯一。l 引用完整性規(guī)則,同關(guān)系模型定義l
25、 用戶(hù)對(duì)定義的規(guī)則,為復(fù)雜性完整性檢查。oracle允許定義和實(shí)施上述每一種類(lèi)型的數(shù)據(jù)完整性規(guī)則,這些規(guī)則可用完整性約束和數(shù)據(jù)庫(kù)觸發(fā)器定義。完整性約束,是對(duì)表的列定義一規(guī)則的說(shuō)明性方法。數(shù)據(jù)庫(kù)觸發(fā)器,是使用非說(shuō)明方法實(shí)施完整性規(guī)則,利用數(shù)據(jù)庫(kù)觸發(fā)器(存儲(chǔ)的數(shù)據(jù)庫(kù)過(guò)程)可定義和實(shí)施任何類(lèi)型的完整性規(guī)則。1 完整性約束oracle利用完整性約束機(jī)制防止無(wú)效的數(shù)據(jù)進(jìn)入數(shù)據(jù)庫(kù)的基表,如果任何dml執(zhí)行結(jié)果破壞完整性約束,該語(yǔ)句被回滾并返回一上個(gè)錯(cuò)誤。oracle實(shí)現(xiàn)的完整性約束完全遵守ansi x3。135-1989和iso9075-1989標(biāo)準(zhǔn)。利用完整性約束實(shí)施數(shù)據(jù)完整性規(guī)則有下列優(yōu)點(diǎn):l 定義或
26、更改表時(shí),不需要程序設(shè)計(jì),便很容易地編寫(xiě)程序并可消除程序性錯(cuò)誤,其功能是由oracle控制。所以說(shuō)明性完整性約束優(yōu)于應(yīng)用代碼和數(shù)據(jù)庫(kù)觸發(fā)器。l 對(duì)表所定義的完整性約束是存儲(chǔ)在數(shù)據(jù)字典中,所以由任何應(yīng)用進(jìn)入的數(shù)據(jù)都必須遵守與表相關(guān)聯(lián)的完整性約束。l 具有最大的開(kāi)發(fā)能力。當(dāng)由完整性約束所實(shí)施的事務(wù)規(guī)則改變時(shí),管理員只需改變完整性約束的定義,所有應(yīng)用自動(dòng)地遵守所修改的約束。l 由于完整性約束存儲(chǔ)在數(shù)據(jù)字典中,數(shù)據(jù)庫(kù)應(yīng)用可利用這些信息,在sql語(yǔ)句執(zhí)行之前或由oracle檢查之前,就可立即反饋信息。l 由于完整性約束說(shuō)明的語(yǔ)義是清楚地定義,對(duì)于每一指定說(shuō)明規(guī)則可實(shí)現(xiàn)性能優(yōu)化。l 由于完整性約束可臨時(shí)地
27、使不能,以致在裝入大量數(shù)據(jù)時(shí)可避免約束檢索的開(kāi)銷(xiāo)。當(dāng)數(shù)據(jù)庫(kù)裝入完成時(shí),完整性約束可容易地使其能,任何破壞完整性約束的任何新行在例外表中列出。oracle的dba和應(yīng)用開(kāi)始者對(duì)列的值輸入可使用的完整性約束有下列類(lèi)型:l not null約束:如果在表的一列的值不允許為空,則需在該列指定not null約束。l unique碼約束:在表指定的列或組列上不允許兩行是具有重復(fù)值時(shí),則需要該列或組列上指定unique碼完整性約束。在unique碼約束定義中的列或組列稱(chēng)為唯一碼。所有唯一完整性約束是用索引方法實(shí)施。l primary key約束:在數(shù)據(jù)庫(kù)中每一個(gè)表可有一個(gè)primary key約束。包含在
28、primary key完整性約束的列或組列稱(chēng)為主碼,每個(gè)表可有一個(gè)主碼。oracle使用索引實(shí)施primary key約束。l foreign key約束(可稱(chēng)引用約束):在關(guān)系數(shù)據(jù)庫(kù)中表可通過(guò)公共列相關(guān)聯(lián),該規(guī)則控制必須維護(hù)的列之間的關(guān)系。包含在引用完整性約束定義的列或組列稱(chēng)為外來(lái)碼。由外來(lái)碼所引用的表中的唯一碼或方碼,稱(chēng)為引用碼。包含有外來(lái)碼的表稱(chēng)為子表或從屬表。由子表的外來(lái)碼所引用的表稱(chēng)為雙親表或引用表。如果對(duì)表的每一行,其外來(lái)碼的值必須與主碼中一值相匹配,則需指定引用完整性約束。l check約束:表的每行對(duì)一指定的條件必須是true或未知,則需在一列或列組上指定check完整性約束。
29、如果在發(fā)出一個(gè)dml語(yǔ)句時(shí),check約束的條件計(jì)算得false時(shí),該語(yǔ)句被回滾。2 數(shù)據(jù)庫(kù)觸發(fā)器oracle允許定義過(guò)程,當(dāng)對(duì)相關(guān)的表作insert、update或delete語(yǔ)句時(shí),這些過(guò)程被隱式地執(zhí)行。這些過(guò)程稱(chēng)為數(shù)據(jù)庫(kù)觸發(fā)器。觸發(fā)器類(lèi)似于存儲(chǔ)的過(guò)程,可包含sql語(yǔ)句和pl/sql語(yǔ)句,可調(diào)用其它的存儲(chǔ)過(guò)程。過(guò)程與觸發(fā)器差別在于調(diào)用方法:過(guò)程由用戶(hù)或應(yīng)用顯式執(zhí)行;而觸發(fā)器是為一激發(fā)語(yǔ)句(insert、update、delete)發(fā)出進(jìn)由oracle隱式地觸發(fā)。一個(gè)數(shù)據(jù)庫(kù)應(yīng)用可隱式地觸發(fā)存儲(chǔ)在數(shù)據(jù)庫(kù)中多個(gè)觸發(fā)器。在許多情況中觸發(fā)器補(bǔ)充oracle的標(biāo)準(zhǔn)功能,提供高度專(zhuān)用的數(shù)據(jù)庫(kù)管理系統(tǒng)。一
30、般觸發(fā)器用于:l 自動(dòng)地生成導(dǎo)出列值。l 防止無(wú)效事務(wù)。l 實(shí)施復(fù)雜的安全審核。l 在分布式數(shù)據(jù)庫(kù)中實(shí)施跨結(jié)點(diǎn)的引用完整性。l 實(shí)施復(fù)雜的事務(wù)規(guī)則。l 提供透明的事件記錄。l 提供高級(jí)的審計(jì)。l 維護(hù)同步的表副本。l 收集表存取的統(tǒng)計(jì)信息。注意:在oracle環(huán)境中利用oracle工具sql*forms也可定義、存儲(chǔ)和執(zhí)行觸發(fā)器,它作為由sql*forms所開(kāi)發(fā)有應(yīng)用的一部分,它與在表上定義的數(shù)據(jù)庫(kù)觸發(fā)器有差別。數(shù)據(jù)庫(kù)觸發(fā)器在表上定義,存儲(chǔ)在相關(guān)的數(shù)據(jù)庫(kù)中,在對(duì)該表發(fā)出imsert、update、delete語(yǔ)句時(shí)將引起數(shù)據(jù)庫(kù)觸發(fā)器的執(zhí)行,不管是哪些用戶(hù)或應(yīng)用發(fā)出這些語(yǔ)句。而sql*forms
31、的觸發(fā)器是sql*forms應(yīng)用的組成,僅當(dāng)在指定sql*forms應(yīng)用中執(zhí)行指定觸發(fā)器點(diǎn)時(shí)才激發(fā)該觸發(fā)器。一個(gè)觸發(fā)器由三部分組成:觸發(fā)事件或語(yǔ)句、觸發(fā)限制和觸發(fā)器動(dòng)作。觸發(fā)事件或語(yǔ)句是指引起激發(fā)觸發(fā)器的sql語(yǔ)句,可為對(duì)一指定表的insert、unpdate或delete語(yǔ)句。觸發(fā)限制是指定一個(gè)布爾表達(dá)式,當(dāng)觸發(fā)器激以時(shí)該布爾表達(dá)式是必須為真。觸發(fā)器作為過(guò)程,是pl/sql塊,當(dāng)觸發(fā)語(yǔ)句發(fā)出、觸發(fā)限制計(jì)算為真時(shí)該過(guò)程被執(zhí)行。3.并發(fā)控制:數(shù)據(jù)庫(kù)是一個(gè)共享資源,可為多個(gè)應(yīng)用程序所共享。這些程序可串行運(yùn)行,但在許多情況下,由于應(yīng)用程序涉及的數(shù)據(jù)量可能很大,常常會(huì)涉及輸入/輸出的交換。為了有效地利
32、用數(shù)據(jù)庫(kù)資源,可能多個(gè)程序或一個(gè)程序的多個(gè)進(jìn)程并行地運(yùn)行,這就是數(shù)據(jù)庫(kù)的并行操作。在多用戶(hù)數(shù)據(jù)庫(kù)環(huán)境中,多個(gè)用戶(hù)程序可并行地存取數(shù)據(jù)庫(kù),如果不對(duì)并發(fā)操作進(jìn)行控制,會(huì)存取不正確的數(shù)據(jù),或破壞數(shù)據(jù)庫(kù)數(shù)據(jù)的一致性。1) 數(shù)據(jù)庫(kù)不一致的類(lèi)型l 不一致性在一事務(wù)期間,其它提交的或未提交事務(wù)的修改是顯然的,以致由查詢(xún)所返回的數(shù)據(jù)集不與任何點(diǎn)相一致。l 不可重復(fù)讀在一個(gè)事務(wù)范圍內(nèi),兩個(gè)相同查詢(xún)將返回不同數(shù)據(jù),由于查詢(xún)注意到其它提交事務(wù)的修改而引起。l 讀臟數(shù)據(jù)如果事務(wù)t1將一值(a)修改,然后事務(wù)t2讀該值,在這之后t1由于某種原因撤銷(xiāo)對(duì)該值的修改,這樣造成t2讀取的值是臟的。l 丟失更改在一事務(wù)中一修改重
33、寫(xiě)另一事務(wù)的修改,如上述飛機(jī)票售票例子。l 破壞性的ddl操作在一用戶(hù)修改一表的數(shù)據(jù)時(shí),另一用戶(hù)同時(shí)更改或刪除該表。1) 封鎖在多用戶(hù)數(shù)據(jù)庫(kù)中一般采用某些數(shù)據(jù)封鎖來(lái)解決并發(fā)操作中的數(shù)據(jù)一致性和完整性問(wèn)題。封鎖是防止存取同一資源的用戶(hù)之間破壞性的干擾的機(jī)制,該干擾是指不正確地修改數(shù)據(jù)或不正確地更改數(shù)據(jù)結(jié)構(gòu)。在多用戶(hù)數(shù)據(jù)庫(kù)中使用兩種封鎖:排它(專(zhuān)用)封鎖和共享封鎖。排它封鎖禁止相關(guān)資源的共享,如果一事務(wù)以排它方式封鎖一資源,僅僅該事務(wù)可更改該資源,直至釋放排它封鎖。共享封鎖允許相關(guān)資源可以共享,幾個(gè)用戶(hù)可同時(shí)讀同一數(shù)據(jù),幾個(gè)事務(wù)可在同一資源上獲取共享封鎖。共享封鎖比排它封鎖具有更高的數(shù)據(jù)并行性。在
34、多用戶(hù)系統(tǒng)中使用封鎖后會(huì)出現(xiàn)死鎖,引起一些事務(wù)不能繼續(xù)工作。當(dāng)兩個(gè)或多個(gè)用戶(hù)彼此等待所封鎖數(shù)據(jù)時(shí)可發(fā)生死鎖。2) oracle多種一致性模型。oracle利用事務(wù)和封鎖機(jī)制提供數(shù)據(jù)并發(fā)存取和數(shù)據(jù)完整性。在一事務(wù)內(nèi)由語(yǔ)句獲取的全部封鎖在事務(wù)期間被保持,防止其它并行事務(wù)的破壞性干擾。一個(gè)事務(wù)的sql語(yǔ)句所作的修改在它提交之后所啟動(dòng)的事務(wù)中才是可見(jiàn)的。在一事務(wù)中由語(yǔ)句所獲取的全部封鎖在該事務(wù)提交或回滾時(shí)被釋放。oracle在兩個(gè)不同級(jí)上提供讀一致性:語(yǔ)句級(jí)讀一致性和事務(wù)級(jí)一致性。orcle總是實(shí)施語(yǔ)句級(jí)讀一致性,保證單個(gè)查詢(xún)所返回的數(shù)據(jù)與該查詢(xún)開(kāi)始時(shí)刻相一致。所以一個(gè)查詢(xún)從不會(huì)看到在查詢(xún)執(zhí)行過(guò)程中提
35、交的其它事務(wù)所作的任何修改。為了實(shí)現(xiàn)語(yǔ)句級(jí)讀一致性,在查詢(xún)進(jìn)入執(zhí)行階段時(shí),在注視scn的時(shí)候?yàn)橹顾峤坏臄?shù)據(jù)是有效的,而在語(yǔ)句執(zhí)行開(kāi)始之后其它事務(wù)提交的任何修改,查詢(xún)將是看不到的。oracle允許選擇實(shí)施事務(wù)級(jí)讀一致性,它保證在同一事務(wù)內(nèi)所有查詢(xún)的數(shù)據(jù) 4)封鎖機(jī)制oracle自動(dòng)地使用不同封鎖類(lèi)型來(lái)控制數(shù)據(jù)的并行存取,防止用戶(hù)之間的破壞性干擾。oracle為一事務(wù)自動(dòng)地封鎖一資源以防止其它事務(wù)對(duì)同一資源的排它封鎖。在某種事件出現(xiàn)或事務(wù)不再需要該資源時(shí)自動(dòng)地釋放。oracle將封鎖分為下列類(lèi):l 數(shù)據(jù)封鎖:數(shù)據(jù)封鎖保護(hù)表數(shù)據(jù),在多個(gè)用戶(hù)并行存取數(shù)據(jù)時(shí)保證數(shù)據(jù)的完整性。數(shù)據(jù)封鎖防止相沖突的dml
36、和ddl操作的破壞性干擾。dml操作可在兩個(gè)級(jí)獲取數(shù)據(jù)封鎖:指定行封鎖和整個(gè)表封鎖,在防止沖突的ddl操作時(shí)也需表封鎖。當(dāng)行要被修改時(shí),事務(wù)在該行獲取排它數(shù)據(jù)封鎖。表封鎖可以有下列方式:行共享、行排它、共享封鎖、共享行排它和排它封鎖。l ddl封鎖(字典封鎖)ddl封鎖保護(hù)模式對(duì)象(如表)的定義,ddl操作將影響對(duì)象,一個(gè)ddl語(yǔ)句隱式地提交一個(gè)事務(wù)。當(dāng)任何ddl事務(wù)需要時(shí)由oracle自動(dòng)獲取字典封鎖,用戶(hù)不能顯式地請(qǐng)求ddl封鎖。在ddl操作期間,被修改或引用的模式對(duì)象被封鎖。l 內(nèi)部封鎖:保護(hù)內(nèi)部數(shù)據(jù)庫(kù)和內(nèi)存結(jié)構(gòu),這些結(jié)構(gòu)對(duì)用戶(hù)是不可見(jiàn)的。5) 手工的數(shù)據(jù)封鎖下列情況允許使用選擇代替or
37、acle缺省的封鎖機(jī)制:l 應(yīng)用需要事務(wù)級(jí)讀一致或可重復(fù)讀。l 應(yīng)用需要一事務(wù)對(duì)一資源可排它存取,為了繼續(xù)它的語(yǔ)句,具有對(duì)資源排它存取的事務(wù)不必等待其它事務(wù)完成。oracle自動(dòng)封鎖可在二級(jí)被替代:事務(wù)級(jí)各系統(tǒng)級(jí)。l 事務(wù)級(jí):包含下列sql語(yǔ)句的事務(wù)替代oracle缺省封鎖:lock table命令、selectfor update命令、具有read only選項(xiàng)的set transactin命令。由這些語(yǔ)句所獲得的封鎖在事務(wù)提交或回滾后所釋放。l 系統(tǒng)級(jí):通過(guò)調(diào)整初始化參數(shù)serializable和reo-locking,實(shí)例可用非缺省封鎖啟動(dòng)。該兩參數(shù)據(jù)的缺省值為:serializable
38、=falseorw-locking=always四、數(shù)據(jù)庫(kù)后備與恢復(fù)當(dāng)我們使用一個(gè)數(shù)據(jù)庫(kù)時(shí),總希望數(shù)據(jù)庫(kù)的內(nèi)容是可靠的、正確的,但由于計(jì)算機(jī)系統(tǒng)的故障(硬件故障、軟件故障、網(wǎng)絡(luò)故障、進(jìn)程故障和系統(tǒng)故障)影響數(shù)據(jù)庫(kù)系統(tǒng)的操作,影響數(shù)據(jù)庫(kù)中數(shù)據(jù)的正確性,甚至破壞數(shù)據(jù)庫(kù),使數(shù)據(jù)庫(kù)中全部或部分?jǐn)?shù)據(jù)丟失。因此當(dāng)發(fā)生上述故障后,希望能重新建立一個(gè)完整的數(shù)據(jù)庫(kù),該處理稱(chēng)為數(shù)據(jù)庫(kù)恢復(fù)。恢復(fù)子系統(tǒng)是數(shù)據(jù)庫(kù)管理系統(tǒng)的一個(gè)重要組成部分?;謴?fù)處理隨所發(fā)生的故障類(lèi)型所影響的結(jié)構(gòu)而變化。1) 恢復(fù)數(shù)據(jù)庫(kù)所使用的結(jié)構(gòu)oracle數(shù)據(jù)庫(kù)使用幾種結(jié)構(gòu)對(duì)可能故障來(lái)保護(hù)數(shù)據(jù):數(shù)據(jù)庫(kù)后備、日志、回滾段和控制文件。數(shù)據(jù)庫(kù)后備是由構(gòu)成o
39、racle數(shù)據(jù)庫(kù)的物理文件的操作系統(tǒng)后備所組成。當(dāng)介質(zhì)故障時(shí)進(jìn)行數(shù)據(jù)庫(kù)恢復(fù),利用后備文件恢復(fù)毀壞的數(shù)據(jù)文件或控制文件。日志,每一個(gè)oracle數(shù)據(jù)庫(kù)實(shí)例都提供,記錄數(shù)據(jù)庫(kù)中所作的全部修改。一個(gè)實(shí)例的日志至少由兩個(gè)日志文件組成,當(dāng)實(shí)例故障或介質(zhì)故障時(shí)進(jìn)行數(shù)據(jù)庫(kù)部分恢復(fù),利用數(shù)據(jù)庫(kù)日志中的改變應(yīng)用于數(shù)據(jù)文件,修改數(shù)據(jù)庫(kù)數(shù)據(jù)到故障出現(xiàn)的時(shí)刻。數(shù)據(jù)庫(kù)日志由兩部分組成:在線(xiàn)日志和歸檔日志。每一個(gè)運(yùn)行的oracle數(shù)據(jù)庫(kù)實(shí)例相應(yīng)地有一個(gè)在線(xiàn)日志,它與oracle后臺(tái)進(jìn)程lgwr一起工作,立即記錄該實(shí)例所作的全部修改。在線(xiàn)日志由兩個(gè)或多個(gè)預(yù)期分配的文件組成,以循環(huán)方式使用。歸檔日志是可選擇的,一個(gè)oracl
40、e數(shù)據(jù)庫(kù)實(shí)例一旦在線(xiàn)日志填滿(mǎn)后,可形成在線(xiàn)日志的歸檔文件。歸檔的在線(xiàn)日志文件被唯一標(biāo)識(shí)并合成歸檔日志?;貪L段用于存儲(chǔ)正在進(jìn)行的事務(wù)(為未提交的事務(wù))所修改值的老值,該信息在數(shù)據(jù)庫(kù)恢復(fù)過(guò)程中用于撤消任何非提交的修改??刂莆募?,一般用于存儲(chǔ)數(shù)據(jù)庫(kù)的物理結(jié)構(gòu)的狀態(tài)。控制文件中某些狀態(tài)信息在實(shí)例恢復(fù)和介質(zhì)恢復(fù)期間用于引導(dǎo)oracle。2) 在線(xiàn)日志一個(gè)oracle數(shù)據(jù)庫(kù)的每一實(shí)例有一個(gè)相關(guān)聯(lián)的在線(xiàn)日志。一個(gè)在線(xiàn)日志由多個(gè)在線(xiàn)日志文件組成。在線(xiàn)日志文件填入日志項(xiàng),日志項(xiàng)記錄的數(shù)據(jù)用于重構(gòu)對(duì)數(shù)據(jù)庫(kù)所作的全部修改。后臺(tái)進(jìn)程lgwr以循環(huán)方式寫(xiě)入在線(xiàn)日志文件。當(dāng)當(dāng)前的在線(xiàn)日志文件寫(xiě)滿(mǎn)后,lgwr寫(xiě)入到下一可用
41、在線(xiàn)日志文件當(dāng)最后一個(gè)可用的在線(xiàn)日志文件的檢查點(diǎn)已完成時(shí)即可使用。如果歸檔不實(shí)施,一個(gè)已填滿(mǎn)的在線(xiàn)日志文件一當(dāng)包含該在線(xiàn)日志文件的檢查點(diǎn)完成,該文件已被歸檔后即可使用。在任何時(shí)候,僅有一個(gè)在線(xiàn)日志文件被寫(xiě)入存儲(chǔ)日志項(xiàng),它被稱(chēng)為活動(dòng)的或當(dāng)前在線(xiàn)日志文件,其它的在線(xiàn)日志文件為不活動(dòng)的在線(xiàn)日志文件。orcle結(jié)束寫(xiě)入一在線(xiàn)日志文件并開(kāi)始寫(xiě)入到另一個(gè)在線(xiàn)日志文件的點(diǎn)稱(chēng)為日志開(kāi)關(guān)。日志開(kāi)關(guān)在當(dāng)前在線(xiàn)日志文件完全填滿(mǎn),必須繼續(xù)寫(xiě)入到下一個(gè)在線(xiàn)日志文件時(shí)總出現(xiàn),也可由dba強(qiáng)制日志開(kāi)關(guān)。每一日志開(kāi)關(guān)出現(xiàn)時(shí),每一在線(xiàn)日志文件賦給一個(gè)新的日志序列號(hào)。如果在線(xiàn)日志文件被歸檔,在歸檔日志文件中包含有它的日志序列號(hào)。
42、oracle后臺(tái)進(jìn)程dbwr(數(shù)據(jù)庫(kù)寫(xiě))將sga中所有被修改的數(shù)據(jù)庫(kù)緩沖區(qū)(包含提交和未提交的)寫(xiě)入到數(shù)據(jù)文件,這樣的事件稱(chēng)為出現(xiàn)一個(gè)檢查點(diǎn)。因下列原因?qū)崿F(xiàn)檢查點(diǎn):l 檢查點(diǎn)確保將內(nèi)存中經(jīng)常改變的數(shù)據(jù)段塊每隔一定時(shí)間寫(xiě)入到數(shù)據(jù)文件。由于dbwr使用最近最少使用算法,經(jīng)常修改的數(shù)據(jù)段塊從不會(huì)作為最近最少使用塊,如果檢查點(diǎn)不出現(xiàn),它從不會(huì)寫(xiě)入磁盤(pán)。l 由于直至檢查點(diǎn)時(shí)所有的數(shù)據(jù)庫(kù)修改已記錄到數(shù)據(jù)文件,先于檢查點(diǎn)的日志項(xiàng)在實(shí)例恢復(fù)時(shí)不再需要應(yīng)用于數(shù)據(jù)文件,所以檢查點(diǎn)可加快實(shí)例恢復(fù)。雖然檢查點(diǎn)有一些開(kāi)銷(xiāo),但oracle既不停止活動(dòng)又不影響當(dāng)前事務(wù)。由于dbwr不斷地將數(shù)據(jù)庫(kù)緩沖區(qū)寫(xiě)入到磁盤(pán),所以一個(gè)檢
43、查點(diǎn)一次不必寫(xiě)許多數(shù)據(jù)塊。一個(gè)檢查點(diǎn)保證自前一個(gè)檢查點(diǎn)以來(lái)的全部修改數(shù)據(jù)塊寫(xiě)入到磁盤(pán)。檢查點(diǎn)不管填滿(mǎn)的在線(xiàn)日志文件是否正在歸檔,它總是出現(xiàn)。如果實(shí)施歸檔,在lgwr重用在線(xiàn)日志文件之前,檢查點(diǎn)必須完成并且所填滿(mǎn)的在線(xiàn)日志文件必須被歸檔。檢查點(diǎn)可對(duì)數(shù)據(jù)庫(kù)的全部數(shù)據(jù)文件出現(xiàn)(稱(chēng)為數(shù)據(jù)庫(kù)檢查點(diǎn)),也可對(duì)指定的數(shù)據(jù)文件出現(xiàn)。下面說(shuō)明一下什么時(shí)候出現(xiàn)檢查點(diǎn)及出現(xiàn)什么情況:l 在每一個(gè)日志開(kāi)關(guān)處自動(dòng)地出現(xiàn)一數(shù)據(jù)庫(kù)檢查點(diǎn)。如果前一個(gè)數(shù)據(jù)庫(kù)檢查點(diǎn)正在處理,由日志開(kāi)關(guān)實(shí)施的檢查點(diǎn)優(yōu)于當(dāng)前檢查點(diǎn)。l 初始化參數(shù)據(jù)log-checkpoint-interval設(shè)置所實(shí)施的數(shù)據(jù)庫(kù)檢查點(diǎn),當(dāng)預(yù)定的日志塊數(shù)被填滿(mǎn)后(自最
44、后一個(gè)數(shù)據(jù)庫(kù)檢查點(diǎn)以來(lái)),實(shí)施一數(shù)據(jù)庫(kù)檢查點(diǎn)。另一個(gè)參數(shù)log-checkpoint-timeout可設(shè)置自上一個(gè)數(shù)據(jù)庫(kù)檢查點(diǎn)開(kāi)始之后指定秒數(shù)后實(shí)施一數(shù)據(jù)庫(kù)檢查點(diǎn)。這種選擇對(duì)使用非常大的日志文件時(shí)有用,它在日志開(kāi)頭之間增加檢查點(diǎn)。由初始化參數(shù)所啟動(dòng)的數(shù)據(jù)庫(kù)檢查點(diǎn)只有在前一個(gè)檢查點(diǎn)完成后才能啟動(dòng)。l 當(dāng)一在線(xiàn)表空間開(kāi)始后備時(shí),僅對(duì)構(gòu)成該空間的數(shù)據(jù)文件實(shí)施一檢查點(diǎn),該檢查點(diǎn)壓倒仍在進(jìn)行中的任何檢查點(diǎn)。l 當(dāng)dba使一表空間離線(xiàn)時(shí),僅對(duì)構(gòu)成該表空間的在線(xiàn)文件實(shí)施一檢查點(diǎn)。l 當(dāng)dba以正常或立即方式關(guān)閉一實(shí)例時(shí),oracle在實(shí)例關(guān)閉之前實(shí)施一數(shù)據(jù)庫(kù)檢查點(diǎn),該檢查點(diǎn)壓倒任何運(yùn)行檢查點(diǎn)。l dba可要
45、求實(shí)施一數(shù)據(jù)庫(kù)檢查點(diǎn),該檢查點(diǎn)壓倒任何運(yùn)行檢查點(diǎn)。檢查點(diǎn)機(jī)制:當(dāng)檢查點(diǎn)出現(xiàn)時(shí),檢查點(diǎn)后臺(tái)進(jìn)程記住寫(xiě)入在線(xiàn)文件的下一日志行的位置,并通知數(shù)據(jù)庫(kù)寫(xiě)后臺(tái)進(jìn)程將sga中修改的數(shù)據(jù)庫(kù)緩沖區(qū)寫(xiě)入到磁盤(pán)上的數(shù)據(jù)文件。然后由ckpt修改全部控制文件和數(shù)據(jù)文件的標(biāo)頭,反映該最后檢查點(diǎn)。當(dāng)檢查點(diǎn)不發(fā)生,dbwr當(dāng)需要時(shí)僅將最近最少使用的數(shù)據(jù)庫(kù)緩沖區(qū)寫(xiě)入磁盤(pán),為新數(shù)據(jù)準(zhǔn)備緩沖區(qū)。鏡象在線(xiàn)日志文件:為了安全將實(shí)例的在線(xiàn)日志文件鏡象到它的在線(xiàn)日志文件oracle提供鏡象功能。當(dāng)具有鏡象在線(xiàn)日志文件時(shí),lgwr同時(shí)將同一日志信息寫(xiě)入到多個(gè)同樣的在線(xiàn)日志文件。日志文件分成組,每個(gè)組中的日志文件稱(chēng)為成員,每個(gè)組中的全部成員同
46、時(shí)活動(dòng),由lgwr賦給相同的日志序列號(hào)。如果使用鏡象在線(xiàn)日志,則可建立在線(xiàn)日志文件組,在組中的每一成員要求是同一大小。鏡象在線(xiàn)日志的機(jī)制:lgwr總是尋找組的全部成員,對(duì)一組的全部成員并行地寫(xiě),然后轉(zhuǎn)換到下一組的全部成員,并行地寫(xiě)。每個(gè)數(shù)據(jù)庫(kù)實(shí)例有自己的在線(xiàn)日志組,這些在線(xiàn)日志組可以是鏡象的或不是,稱(chēng)為實(shí)例的在線(xiàn)日志線(xiàn)索。在典型配置中,一個(gè)數(shù)據(jù)庫(kù)實(shí)例存取一個(gè)oracle數(shù)據(jù)庫(kù),于是僅一個(gè)線(xiàn)索存在。然而在運(yùn)行oracle并行服務(wù)器中,兩個(gè)或多個(gè)實(shí)例并行地存取單個(gè)數(shù)據(jù)庫(kù),在這種情況下,每個(gè)實(shí)例有自己的線(xiàn)索。3) 歸檔日志oracle要將填滿(mǎn)的在線(xiàn)日志文件組歸檔時(shí),則要建立歸檔日志,或稱(chēng)離線(xiàn)日志。其
47、對(duì)數(shù)據(jù)庫(kù)后備和恢復(fù)有下列用處:l 數(shù)據(jù)庫(kù)后備以及在線(xiàn)和歸檔日志文件,在操作系統(tǒng)或磁盤(pán)故障中可保證全部提交的事務(wù)可被恢復(fù)。l 在數(shù)據(jù)庫(kù)打開(kāi)時(shí)和正常系統(tǒng)使用下,如果歸檔日志是永久保持,在線(xiàn)后備可以進(jìn)行和使用。如果用戶(hù)數(shù)據(jù)庫(kù)要求在任何磁盤(pán)故障的事件中不丟失任何數(shù)據(jù),那么歸檔日志必須要存在。歸檔已填滿(mǎn)的在線(xiàn)日志文件可能需要dba執(zhí)行額外的管理操作。歸檔機(jī)制:決定于歸檔設(shè)置,歸檔已填滿(mǎn)的在線(xiàn)日志組的機(jī)制可由oracle后臺(tái)進(jìn)程arch自動(dòng)歸檔或由用戶(hù)進(jìn)程發(fā)出語(yǔ)句手工地歸檔。當(dāng)日志組變?yōu)椴换顒?dòng)、日志開(kāi)關(guān)指向下一組已完成時(shí),arch可歸檔一組,可存取該組的任何或全部成員,完成歸檔組。在線(xiàn)日志文件歸檔之后才可
48、為lgwr重用。當(dāng)使用歸檔時(shí),必須指定歸檔目標(biāo)指向一存儲(chǔ)設(shè)備,它不同于個(gè)有數(shù)據(jù)文件、在線(xiàn)日志文件和控制文件的設(shè)備,理想的是將歸檔日志文件永久地移到離線(xiàn)存儲(chǔ)設(shè)備、如磁帶。數(shù)據(jù)庫(kù)可運(yùn)行在兩種不同方式下:noarchivelog方式或archivelog方式。數(shù)據(jù)庫(kù)在noarchivelog方式下使用時(shí),不能進(jìn)行在線(xiàn)日志的歸檔。在該數(shù)據(jù)庫(kù)控制文件指明填滿(mǎn)的組不需要?dú)w檔,所以一當(dāng)填滿(mǎn)的組成為活動(dòng),在日志開(kāi)關(guān)的檢查點(diǎn)完成,該組即可被lgwr重用。在該方式下僅能保護(hù)數(shù)據(jù)庫(kù)實(shí)例故障,不能保護(hù)介質(zhì)(磁盤(pán))故障。利用存儲(chǔ)在在線(xiàn)日志中的信息,可實(shí)現(xiàn)實(shí)例故障恢復(fù)。如果數(shù)據(jù)庫(kù)在archivelog方式下,可實(shí)施在線(xiàn)日
49、志的歸檔。在控制文件中指明填滿(mǎn)的日志文件組在歸檔之前不能重用。一旦組成為不活動(dòng),執(zhí)行歸檔的進(jìn)程立即可使用該組。在實(shí)例起動(dòng)時(shí),通過(guò)參數(shù)log-archive-start設(shè)置,可啟動(dòng)arch進(jìn)程,否則arch進(jìn)程在實(shí)例啟動(dòng)時(shí)不能被啟動(dòng)。然而dba在憑借時(shí)候可交互地啟動(dòng)或停止自動(dòng)歸檔。一旦在線(xiàn)日志文件組變?yōu)椴换顒?dòng)時(shí),arch進(jìn)程自動(dòng)對(duì)它歸檔。如果數(shù)據(jù)庫(kù)在archivelog方式下運(yùn)行,dba可手工歸檔填滿(mǎn)的不活動(dòng)的日志文件組,不管自動(dòng)歸檔是可以還是不可以。4) 數(shù)據(jù)庫(kù)后備不管為oracle數(shù)據(jù)庫(kù)設(shè)計(jì)成什么樣的后備或恢復(fù)模式,數(shù)據(jù)庫(kù)數(shù)據(jù)文件、日志文件和控制文件的操作系統(tǒng)后備是絕對(duì)需要的,它是保護(hù)介質(zhì)故
50、障的策略部分。操作系統(tǒng)后備有完全后備和部分后備l 完全后備:一個(gè)完全后備將構(gòu)成oracle數(shù)據(jù)庫(kù)的全部數(shù)據(jù)庫(kù)文件、在線(xiàn)日志文件和控制文件的一個(gè)操作系統(tǒng)后備。一個(gè)完全后備在數(shù)據(jù)庫(kù)正常關(guān)閉之后進(jìn)行,不能在實(shí)例故障后進(jìn)行。在此時(shí),所有構(gòu)成數(shù)據(jù)庫(kù)的全部文件是關(guān)閉的,并與當(dāng)前點(diǎn)相一致。在數(shù)據(jù)庫(kù)打開(kāi)時(shí)不能進(jìn)行完全后備。由完全后備得到的數(shù)據(jù)文件在任何類(lèi)型的介質(zhì)恢復(fù)模式中是有用的。l 部分后備部分后備為除完全后備外的任何操作系統(tǒng)后備,可在數(shù)據(jù)庫(kù)打開(kāi)或關(guān)閉下進(jìn)行。如單個(gè)表空間中全部數(shù)據(jù)文件后備、單個(gè)數(shù)據(jù)文件后備和控制文件后備。部分后備僅對(duì)在archivelog方式下運(yùn)行數(shù)據(jù)庫(kù)有用,因?yàn)榇嬖诘臍w檔日志,數(shù)據(jù)文件可
51、由部分后備恢復(fù)。在恢復(fù)過(guò)程中與數(shù)據(jù)庫(kù)其它部分一致。5) 數(shù)據(jù)庫(kù)恢復(fù)l 實(shí)例故障的恢復(fù)當(dāng)實(shí)例意外地(如掉電、后臺(tái)進(jìn)程故障等)或預(yù)料地(發(fā)出shutdoum abort語(yǔ)句)中止時(shí)出現(xiàn)實(shí)例故障,此時(shí)需要實(shí)例恢復(fù)。實(shí)例恢復(fù)將數(shù)據(jù)庫(kù)恢復(fù)一故障之前的事務(wù)一致?tīng)顟B(tài)。如果在在線(xiàn)后備發(fā)現(xiàn)實(shí)例故障,則需介質(zhì)恢復(fù)。在其它情況oracle在下次數(shù)據(jù)庫(kù)起動(dòng)時(shí)(對(duì)新實(shí)例裝配和打開(kāi)),自動(dòng)地執(zhí)行實(shí)例恢復(fù)。如果需要,從裝配狀態(tài)變?yōu)榇蜷_(kāi)狀態(tài),自動(dòng)地激發(fā)實(shí)例恢復(fù),由下列處理:(1) 為了解恢復(fù)數(shù)據(jù)文件中沒(méi)有記錄的數(shù)據(jù),進(jìn)行向前滾。該數(shù)據(jù)記錄在在線(xiàn)日志,包括對(duì)回滾段的內(nèi)容恢復(fù)。(2) 回滾未提交的事務(wù),按步1重新生成回滾段所指定
52、的操作。(3) 釋放在故障時(shí)正在處理事務(wù)所持有的資源。(4) 解決在故障時(shí)正經(jīng)歷一階段提交的任何懸而未決的分布事務(wù)。l 介質(zhì)故障的恢復(fù)介質(zhì)故障是當(dāng)一個(gè)文件、一個(gè)文件的部分或一磁盤(pán)不能讀或不能寫(xiě)時(shí)出現(xiàn)的故障。介質(zhì)故障的恢復(fù)有兩種形式,決定于數(shù)據(jù)庫(kù)運(yùn)行的歸檔方式。l 如果數(shù)據(jù)庫(kù)是可運(yùn)行的,以致它的在線(xiàn)日志僅可重用但不能歸檔,此時(shí)介質(zhì)恢復(fù)為使用最新的完全后備的簡(jiǎn)單恢復(fù)。在完全后備執(zhí)行的工作必須手工地重作。l 如果數(shù)據(jù)庫(kù)可運(yùn)行,其在線(xiàn)日志是被歸檔的,該介質(zhì)故障的恢復(fù)是一個(gè)實(shí)際恢復(fù)過(guò)程,重構(gòu)受損的數(shù)據(jù)庫(kù)恢復(fù)到介質(zhì)故障前的一個(gè)指定事務(wù)一致?tīng)顟B(tài)。不管哪種形式,介質(zhì)故障的恢復(fù)總是將整個(gè)數(shù)據(jù)庫(kù)恢復(fù)到故障之前的一個(gè)事務(wù)一致?tīng)顟B(tài)。如果數(shù)據(jù)庫(kù)是在archivelog方式運(yùn)行,可有不同類(lèi)型的介質(zhì)恢復(fù):完全介質(zhì)恢復(fù)和不完全介質(zhì)恢復(fù)。完全介質(zhì)恢復(fù)可恢復(fù)全部丟失的修改。僅當(dāng)所有必要的日志可用時(shí)才可能。有不同類(lèi)型的完全介質(zhì)恢復(fù)可使用,其決定于毀壞文件和數(shù)據(jù)庫(kù)的可用性。例:l 關(guān)閉
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 原油中介合同范例
- 農(nóng)村養(yǎng)殖合同范本
- 印花委托加工合同范本
- 分批到貨付款合同范本
- 加盟養(yǎng)豬合同范本
- 合同范本 英文版
- 井蓋板購(gòu)銷(xiāo)合同范本
- 合同范本發(fā)布儀式
- 醫(yī)院健康服務(wù)合同范本
- 體檢套餐采購(gòu)合同范本
- 2025采購(gòu)部年度工作計(jì)劃
- 2024年度個(gè)人珠寶首飾分期購(gòu)買(mǎi)合同范本3篇
- 食為天:2024中國(guó)食品飲料行業(yè)白皮書(shū)
- 醫(yī)學(xué)倫理與醫(yī)患溝通技巧
- 2025年牛津譯林版英語(yǔ)七年級(jí)下冊(cè)全冊(cè)單元重點(diǎn)知識(shí)點(diǎn)與語(yǔ)法匯編
- 痔瘡中醫(yī)治療課件
- 污水處理設(shè)備的故障處理指南考核試卷
- 華東師范大學(xué)《社會(huì)研究方法》2023-2024學(xué)年第一學(xué)期期末試卷
- ps 課件教學(xué)課件
- 數(shù)控車(chē)編程實(shí)訓(xùn)教案
- 2024年世界職業(yè)院校技能大賽高職組“健康養(yǎng)老照護(hù)組”賽項(xiàng)考試題庫(kù)(含答案)
評(píng)論
0/150
提交評(píng)論