




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、華為公司軟件筆試試卷(c/c+)一、填空題1-1、衡量一個(gè)算法好壞的度量主要有:時(shí)間復(fù)雜度、空間復(fù)雜度。1-2、頭文件中#ifndef/#define/#endif的作用是:防止頭文件被重復(fù)引用(宏保護(hù)作用)1-3、在如下的二叉數(shù)樹中:請(qǐng)寫出前序遍歷為:abdcegfhi(也稱前序周游)擴(kuò)展知識(shí):前序遍歷首先訪問根結(jié)點(diǎn)然后遍歷左子樹,最后遍歷右子樹。在遍歷左、右子樹時(shí),仍然先訪問根結(jié)點(diǎn),然后遍歷左子樹,最后遍歷右子樹。若二叉樹為空則結(jié)束返回,否則: (1)訪問根結(jié)點(diǎn) (2)前序遍歷左子樹 (3)前序遍歷右子樹 注意的是:遍歷左右子樹時(shí)仍然采用前序遍歷方法。 如上圖所示二叉樹前序遍歷,也叫先根遍
2、歷,遍歷的順序是:根,左子樹,右子樹遍歷結(jié)果:abdecf中序遍歷,也叫中根遍歷,順序是: 左子樹,根,右子樹 遍歷結(jié)果:dbeafc后序遍歷,也叫后根遍歷,遍歷順序,左子樹,右子樹,根遍歷結(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ù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ī)制稱為a,使命令執(zhí)行的結(jié)果不在屏幕上顯示, 而引入另外一個(gè)文件,這種機(jī)制稱為b。使命令所需要的處理信息不從鍵盤接收,而取自另一個(gè)文件,這種機(jī)制稱為c。操作系統(tǒng)不從鍵盤逐條接收命令,而調(diào)用一個(gè)正文文件,執(zhí)行其中保存的一系列命令,這種方式屬于d方式,編寫這樣的文件應(yīng)符合e 的語法規(guī)則。ea:1)鏈接 2)管道(線) 3)輸入重新定向
4、4)輸出重新定向b:1)清屏 2) 屏蔽顯示 3)輸入重新定向 4)管道(線)c:1)輸入重新定向 2)讀保護(hù) 3)管道(線) 4)批處理d:1)系統(tǒng)生成 2) 初始裝入 3)批處理 4)管道(線)e:1)會(huì)話語言 2)交互語言 3)機(jī)器語言 4)命令語言2-3、線程和進(jìn)程最主要的區(qū)別在于:(d)a:進(jìn)程是unix下的概念,線程是windows下的概念b:進(jìn)程的效率比線程低c:在進(jìn)程中可以創(chuàng)造線程,但線程中不能生成進(jìn)程d:進(jìn)程由自己獨(dú)立的運(yùn)行空間,線程的運(yùn)行空間是共享的。知識(shí)擴(kuò)展:線程是比進(jìn)程更小的處理模塊。進(jìn)程和線程都是由操作系統(tǒng)所體會(huì)的程序運(yùn)行的基本單元,系統(tǒng)利用該基本單元實(shí)現(xiàn)系統(tǒng)對(duì)應(yīng)用的
5、并發(fā)性。進(jìn)程和線程的區(qū)別在于: 簡而言之,一個(gè)程序至少有一個(gè)進(jìn)程,一個(gè)進(jìn)程至少有一個(gè)線程. 線程的劃分尺度小于進(jìn)程,使得多線程程序的并發(fā)性高。 另外,進(jìn)程在執(zhí)行過程中擁有獨(dú)立的內(nèi)存單元,而多個(gè)線程共享內(nèi)存,從而極大地提高了程序的運(yùn)行效率。 線程在執(zhí)行過程中與進(jìn)程還是有區(qū)別的。每個(gè)獨(dú)立的線程有一個(gè)程序運(yùn)行的入口、順序執(zhí)行序列和程序的出口。但是線程不能夠獨(dú)立執(zhí)行,必須依存在應(yīng)用程序中,由應(yīng)用程序提供多個(gè)線程執(zhí)行控制。 從邏輯角度來看,多線程的意義在于一個(gè)應(yīng)用程序中,有多個(gè)執(zhí)行部分可以同時(shí)執(zhí)行。但操作系統(tǒng)并沒有將多個(gè)線程看做多個(gè)獨(dú)立的應(yīng)用,來實(shí)現(xiàn)進(jìn)程的調(diào)度和管理以及資源分配。這就是進(jì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ú)立單位. 線程是進(jìn)程的一個(gè)實(shí)體,是cpu調(diào)度和分派的基本單位,它是比進(jìn)程更小的能獨(dú)立運(yùn)行的基本單位.線程自己基本上不擁有系統(tǒng)資源,只擁有一點(diǎn)在運(yùn)行中必不可少的資源(如程序計(jì)數(shù)器,一組寄存器和棧),但是它可與同屬一個(gè)進(jìn)程的其他的線程共享進(jìn)程所擁有的全部資源. 一個(gè)線程可以創(chuàng)建和撤銷另一個(gè)線程;同一個(gè)進(jìn)程中的多個(gè)線程之間可以并發(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)生成傳遞的變量)的話就在堆棧段即ss,這些變量會(huì)隨著程序的結(jié)束而被銷毀也就是結(jié)束生命期。2-7、以下措施是為了保證數(shù)據(jù)庫的安全才采用,請(qǐng)問哪一種有可能引起死鎖。(c)a 安全控制,包括用戶鑒定和存取控制b 完整性控制c 并發(fā)控制c 數(shù)據(jù)庫恢復(fù)
9、擴(kuò)展知識(shí):oracle數(shù)據(jù)庫的安全性、完整性、并發(fā)控制和恢復(fù)了保證數(shù)據(jù)庫數(shù)據(jù)的安全可靠性和正確有效,dbms必須提供統(tǒng)一的數(shù)據(jù)保護(hù)功能。數(shù)據(jù)保護(hù)也為數(shù)據(jù)控制,主要包括數(shù)據(jù)庫的安全性、完整性、并發(fā)控制和恢復(fù)。一、安全控制:數(shù)據(jù)庫的安全性是指保護(hù)數(shù)據(jù)庫以防止不合法的使用所造成的數(shù)據(jù)泄露、更改或破壞。計(jì)算機(jī)系統(tǒng)都有這個(gè)問題,在數(shù)據(jù)庫系統(tǒng)中大量數(shù)據(jù)集中存放,為許多用戶共享,使安全問題更為突出。在一般的計(jì)算機(jī)系統(tǒng)中,安全措施是一級(jí)一級(jí)設(shè)置的。在db存儲(chǔ)這一級(jí)可采用密碼技術(shù),當(dāng)物理存儲(chǔ)設(shè)備失竊后,它起到保密作用。在數(shù)據(jù)庫系統(tǒng)這一級(jí)中提供兩種控制:用戶標(biāo)識(shí)和鑒定,數(shù)據(jù)存取控制。在oracle多用戶數(shù)據(jù)庫系統(tǒng)
10、中,安全機(jī)制作下列工作:l 防止非授權(quán)的數(shù)據(jù)庫存??;防止非授權(quán)的對(duì)模式對(duì)象的存??;l 控制磁盤使用;l 控制系統(tǒng)資源使用;l 審計(jì)用戶動(dòng)作。數(shù)據(jù)庫安全可分為二類:系統(tǒng)安全性和數(shù)據(jù)安全性。系統(tǒng)安全性是指在系統(tǒng)級(jí)控制數(shù)據(jù)庫的存取和使用的機(jī)制,包含:l 有效的用戶名/口令的組合;l 一個(gè)用戶是否授權(quán)可連接數(shù)據(jù)庫;l 用戶對(duì)象可用的磁盤空間的數(shù)量;l 用戶的資源限制;l 數(shù)據(jù)庫審計(jì)是否是有效的;l 用戶可執(zhí)行哪些系統(tǒng)操作。數(shù)據(jù)安全性是指在對(duì)象級(jí)控制數(shù)據(jù)庫的存取和使用的機(jī)制,包含:哪些用戶可存取一指定的模式對(duì)象及在對(duì)象上允許作哪些操作類型。在oracle服務(wù)器上提供了一種任意存取控制,是一種基于特權(quán)限制
11、信息存取的方法。用戶要存取一對(duì)象必須有相應(yīng)的特權(quán)授給該用戶。已授權(quán)的用戶可任意地可將它授權(quán)給其它用戶,由于這個(gè)原因,這種安全性類型叫做任意型。oracle利用下列機(jī)制管理數(shù)據(jù)庫安全性:l 數(shù)據(jù)庫用戶和模式;l 特權(quán);l 角色;l 存儲(chǔ)設(shè)置和空間份額;l 資源限制;l 審計(jì)。(1)數(shù)據(jù)庫的存取控制oracle保護(hù)信息的方法采用任意存取控制來控制全部用戶對(duì)命名對(duì)象的存取。用戶對(duì)對(duì)象的存取受特權(quán)控制。一種特權(quán)是存取一命名對(duì)象的許可,為一種規(guī)定格式。oracle使用多種不同的機(jī)制管理數(shù)據(jù)庫安全性,其中有兩種機(jī)制:模式和用戶。模式為模式對(duì)象的集合,模式對(duì)象如表、視圖、過程和包等。第一數(shù)據(jù)庫有一組模式。每
12、一oracle數(shù)據(jù)庫有一組合法的用戶,可存取一數(shù)據(jù)庫,可運(yùn)行一數(shù)據(jù)庫應(yīng)用和使用該用戶各連接到定義該用戶的數(shù)據(jù)庫。當(dāng)建立一數(shù)據(jù)庫用戶時(shí),對(duì)該用戶建立一個(gè)相應(yīng)的模式,模式名與用戶名相同。一旦用戶連接一數(shù)據(jù)庫,該用戶就可存取相應(yīng)模式中的全部對(duì)象,一個(gè)用戶僅與同名的模式相聯(lián)系,所以用戶和模式是類似的。用戶的存取權(quán)利受用戶安全域的設(shè)置所控制,在建立一個(gè)數(shù)據(jù)庫的新用戶或更改一已有用戶時(shí),安全管理員對(duì)用戶安全域有下列決策:l 是由數(shù)據(jù)庫系統(tǒng)還是由操作系統(tǒng)維護(hù)用戶授權(quán)信息。l 設(shè)置用戶的缺省表空間和臨時(shí)表空間。l 列出用戶可存的表空間和在表空間中可使用空間份額。l 設(shè)置用戶資源限制的環(huán)境文件,該限制規(guī)定了用戶
13、可用的系統(tǒng)資源的總量。l 規(guī)定用戶具有的特權(quán)和角色,可存取相應(yīng)的對(duì)象。每一個(gè)用戶有一個(gè)安全域,它是一組特性,可決定下列內(nèi)容:用戶可用的特權(quán)和角色;用戶可用的表空間的份額;用戶的系統(tǒng)資源限制。1) 用戶鑒別:為了防止非授權(quán)的數(shù)據(jù)庫用戶的使用,oracle提供二種確認(rèn)方法操作系統(tǒng)確認(rèn)和相應(yīng)的oracle數(shù)據(jù)庫確認(rèn)。如果操作系統(tǒng)允許,oracle可使用操作系統(tǒng)所維護(hù)的信息來鑒定用戶。由操作系統(tǒng)鑒定用戶的優(yōu)點(diǎn)是:l 用戶可更方便地連接到oracle,不需要指定用戶名和口令。l 對(duì)用戶授權(quán)的控制集中在操作系統(tǒng),oracle不需要存儲(chǔ)和管理用戶口令。然而用戶名在數(shù)據(jù)庫中仍然要維護(hù)。l 在數(shù)據(jù)庫中的用戶名項(xiàng)
14、和操作系統(tǒng)審計(jì)跟蹤相對(duì)應(yīng)。oracle數(shù)據(jù)庫方式的用戶確認(rèn):oracle利用存儲(chǔ)在數(shù)據(jù)庫中的信息可鑒定試圖接到數(shù)據(jù)庫的一用戶,這種鑒別方法僅當(dāng)操作系統(tǒng)不能用于數(shù)據(jù)庫用戶鑒別時(shí)才使用。當(dāng)用戶使用一oracle數(shù)據(jù)庫時(shí)執(zhí)行用戶鑒別。每個(gè)用戶在建立時(shí)有一個(gè)口令,用戶口令在建立對(duì)數(shù)據(jù)庫連接時(shí)使用,以防止對(duì)數(shù)據(jù)庫非授權(quán)的使用。用戶的口令以密碼的格式存儲(chǔ)在數(shù)據(jù)庫數(shù)據(jù)字典中,用戶可隨時(shí)修改其口令。2) 用戶的表空間設(shè)置和定額關(guān)于表空間的使用有幾種設(shè)置選擇:用戶的缺省表空間;用戶的臨時(shí)表空間;數(shù)據(jù)庫表空間的空間使用定額。3) 用戶資源限制和環(huán)境文件用戶可用的各種系統(tǒng)資源總量的限制是用戶安全域的部分。利用顯式地
15、設(shè)置資源限制;安全管理員可防止用戶無控制地消耗寶貴的系統(tǒng)資源。資源限制是由環(huán)境文件管理。一個(gè)環(huán)境文件是命名的一組賦給用戶的資源限制。另外oracle為安全管理員在數(shù)據(jù)庫級(jí)提供使能或使不能實(shí)施環(huán)境文件資源限制的選擇。oracle可限制幾種類型的系統(tǒng)資源的使用,每種資源可在會(huì)話級(jí)、調(diào)用級(jí)或兩者上控制。在會(huì)話級(jí):每一次用戶連接到一數(shù)據(jù)庫,建立一會(huì)話。每一個(gè)會(huì)話在執(zhí)行sql語句的計(jì)算機(jī)上耗費(fèi)cpu時(shí)間和內(nèi)存量進(jìn)行限制。對(duì)oracle的幾種資源限制可在會(huì)話級(jí)上設(shè)置。如果會(huì)話級(jí)資源限制被超過,當(dāng)前語句被中止(回滾),并返回指明會(huì)話限制已達(dá)到的信息。此時(shí),當(dāng)前事務(wù)中所有之前執(zhí)行的語句不受影響,此時(shí)僅可作co
16、mmit、rollback或刪除對(duì)數(shù)據(jù)庫的連接等操作,進(jìn)行其它操作都將出錯(cuò)。在調(diào)用級(jí):在sql語句執(zhí)行時(shí),處理該語句有好幾步,為了防止過多地調(diào)用系統(tǒng),oracle在調(diào)用級(jí)可設(shè)置幾種資源限制。如果調(diào)用級(jí)的資源限制被超過,語句處理被停止,該語句被回滾,并返回一錯(cuò)誤。然而當(dāng)前事務(wù)的已執(zhí)行所用語句不受影響,用戶會(huì)話繼續(xù)連接。有下列資源限制:l 為了防止無控制地使用cpu時(shí)間,oracle可限制每次oracle調(diào)用的cpu時(shí)間和在一次會(huì)話期間oracle調(diào)用所使用的cpu的時(shí)間,以0.01秒為單位。l 為了防止過多的i/o,oracle可限制每次調(diào)用和每次會(huì)話的邏輯數(shù)據(jù)塊讀的數(shù)目。l oracle在會(huì)話
17、級(jí)還提供其它幾種資源限制。每個(gè)用戶的并行會(huì)話數(shù)的限制;會(huì)話空閑時(shí)間的限制,如果一次會(huì)話的oracle調(diào)用之間時(shí)間達(dá)到該空閑時(shí)間,當(dāng)前事務(wù)被回滾,會(huì)話被中止,會(huì)話資源返回給系統(tǒng);每次會(huì)話可消逝時(shí)間的限制,如果一次會(huì)話期間超過可消逝時(shí)間的限制,當(dāng)前事務(wù)被回滾,會(huì)話被刪除,該會(huì)話的資源被釋放;每次會(huì)話的專用sga空間量的限制。用戶環(huán)境文件:用戶環(huán)境文件是指定資源限制的命名集,可賦給oracle數(shù)據(jù)庫的有效的用戶。利用用戶環(huán)境文件可容易地管理資源限制。要使用用戶環(huán)境文件,首先應(yīng)將數(shù)據(jù)庫中的用戶分類,決定在數(shù)據(jù)庫中全部用戶類型需要多少種用戶環(huán)境文件。在建立環(huán)境文件之前,要決定每一種資源限制的值。例如一類
18、用戶通常不執(zhí)行大量邏輯數(shù)據(jù)塊讀,那就可將logical-reads-per-session和logical-reads-per-call設(shè)置相應(yīng)的值。在許多情況中決定一用戶的環(huán)境文件的合適資源限制的最好的方法是收集每種資源使用的歷史信息。(2) 特權(quán)和角色1) 特權(quán):特權(quán)是執(zhí)行一種特殊類型的sql語句或存取另一用戶的對(duì)象的權(quán)力。有兩類特權(quán):系統(tǒng)特權(quán)和對(duì)象特權(quán)。系統(tǒng)特權(quán):是執(zhí)行一處特殊動(dòng)作或者在對(duì)象類型上執(zhí)行一種特殊動(dòng)作的權(quán)利。oracle有60多種不同系統(tǒng)特權(quán),每一種系統(tǒng)允許用戶執(zhí)行一種特殊的數(shù)據(jù)庫操作或一類數(shù)據(jù)庫操作.系統(tǒng)特權(quán)可授權(quán)給用戶或角色,一般,系統(tǒng)特權(quán)全管理人員和應(yīng)用開發(fā)人員,終端用
19、戶不需要這些相關(guān)功能.授權(quán)給一用戶的系統(tǒng)特權(quán)并具有該 系統(tǒng)特權(quán)授權(quán)給其他用戶或角色.反之,可從那些被授權(quán)的用戶或角色回收系統(tǒng)特權(quán).對(duì)象特權(quán):在指定的表、視圖、序列、過程、函數(shù)或包上執(zhí)行特殊動(dòng)作的權(quán)利。對(duì)于不同類型的對(duì)象,有不同類型的對(duì)象特權(quán)。對(duì)于有些模式對(duì)象,如聚集、索引、觸發(fā)器、數(shù)據(jù)庫鏈沒有相關(guān)的對(duì)象特權(quán),它們由系統(tǒng)特權(quán)控制。對(duì)于包含在某用戶名的模式中的對(duì)象,該用戶對(duì)這些對(duì)象自動(dòng)地具有全部對(duì)象特權(quán),即模式的持有者對(duì)模式中的對(duì)象具有全部對(duì)象特權(quán)。這些對(duì)象的持有者可將這些對(duì)象上的任何對(duì)象特權(quán)可授權(quán)給其他用戶。如果被授者包含有g(shù)rant option 授權(quán),那么該被授者也可將其權(quán)利再授權(quán)給其他用戶
20、。2) 角色:為相關(guān)特權(quán)的命名組,可授權(quán)給用戶和角色。oracel利用角色更容易地進(jìn)行特權(quán)管理。有下列優(yōu)點(diǎn):l 減少特權(quán)管理,不要顯式地將同一特權(quán)組授權(quán)給幾個(gè)用戶,只需將這特權(quán)組授給角色,然后將角色授權(quán)給每一用戶。l 動(dòng)態(tài)特權(quán)管理,如果一組特權(quán)需要改變,只需修改角色的特權(quán),所有授給該角色的全部用戶的安全域?qū)⒆詣?dòng)地反映對(duì)角色所作的修改。l 特權(quán)的選擇可用性,授權(quán)給用戶的角色可選擇地使其使能(可用)或使不能(不可用)。l 應(yīng)用可知性,當(dāng)一用戶經(jīng)一用戶名執(zhí)行應(yīng)用時(shí),該數(shù)據(jù)庫應(yīng)用可查詢字典,將自動(dòng)地選擇使角色使能或不能。專門的應(yīng)用安全性,角色使用可由口令保護(hù),應(yīng)用可提供正確的口令使用權(quán)角色使能,達(dá)到專
21、用的應(yīng)用安全性。因用戶不知其口令,不能使角色使能。一般,建立角色服務(wù)于兩個(gè)目的:為數(shù)據(jù)庫應(yīng)用管理特權(quán)和為用戶組管理特權(quán)。相應(yīng)的角色稱為應(yīng)用角色和用戶角色。應(yīng)用角色是授予的運(yùn)行一數(shù)據(jù)庫應(yīng)用所需的全部特權(quán)。一個(gè)應(yīng)用角色可授給其它角色或指定用戶。一個(gè)應(yīng)用可有幾種不同角色,具有不同特權(quán)組的每一個(gè)角色在使用應(yīng)用時(shí)可進(jìn)行不同的數(shù)據(jù)存取。用戶角色是為具有公開特權(quán)需求的一組數(shù)據(jù)庫用戶而建立的。用戶特權(quán)管理是受應(yīng)用角色或特權(quán)授權(quán)給用戶角色所控制,然后將用戶角色授權(quán)給相應(yīng)的用戶。數(shù)據(jù)庫角色包含下列功能: l 一個(gè)角色可授予系統(tǒng)特權(quán)或?qū)ο筇貦?quán)。l 一個(gè)角色可授權(quán)給其它角色,但不能循環(huán)授權(quán)。l 任何角色可授權(quán)給任何數(shù)
22、據(jù)庫用戶。l 授權(quán)給一用戶的每一角色可以是使能的或者使不能的。一個(gè)用戶的安全域僅包含當(dāng)前對(duì)該用戶使能的全部角色的特權(quán)。l 一個(gè)間接授權(quán)角色(授權(quán)給另一角色的角色)對(duì)一用戶可顯式地使其能或使不能。在一個(gè)數(shù)據(jù)庫中,每一個(gè)角色名必須唯一。角色名與用戶不同,角色不包含在任何模式中,所以建立一角色的用戶被刪除時(shí)不影響該角色。oracle為了提供與以前版本的兼容性,預(yù)定義下列角色:connent、resource、dba、exp-full-database和imp-full-database。(3)審計(jì)審計(jì)是對(duì)選定的用戶動(dòng)作的監(jiān)控和記錄,通常用于:l 審查可疑的活動(dòng)。例如:數(shù)據(jù)被非授權(quán)用戶所刪除,此時(shí)安全
23、管理員可決定對(duì)該 數(shù)據(jù)庫的所有連接進(jìn)行審計(jì),以及對(duì)數(shù)據(jù)庫的所有表的成功地或不成功地刪除進(jìn)行審計(jì)。l 監(jiān)視和收集關(guān)于指定數(shù)據(jù)庫活動(dòng)的數(shù)據(jù)。例如:dba可收集哪些被修改、執(zhí)行了多少次邏輯的i/o等統(tǒng)計(jì)數(shù)據(jù)。oracle支持三種審計(jì)類型:l 語句審計(jì),對(duì)某種類型的sql語句審計(jì),不指定結(jié)構(gòu)或?qū)ο?。l 特權(quán)審計(jì),對(duì)執(zhí)行相應(yīng)動(dòng)作的系統(tǒng)特權(quán)的使用審計(jì)。l 對(duì)象審計(jì),對(duì)一特殊模式對(duì)象上的指定語句的審計(jì)。oracle所允許的審計(jì)選擇限于下列方面:l 審計(jì)語句的成功執(zhí)行、不成功執(zhí)行,或者其兩者。l 對(duì)每一用戶會(huì)話審計(jì)語句執(zhí)行一次或者對(duì)語句每次執(zhí)行審計(jì)一次。l 對(duì)全部用戶或指定用戶的活動(dòng)的審計(jì)。當(dāng)數(shù)據(jù)庫的審計(jì)是使
24、能的,在語句執(zhí)行階段產(chǎn)生審計(jì)記錄。審計(jì)記錄包含有審計(jì)的操作、用戶執(zhí)行的操作、操作的日期和時(shí)間等信息。審計(jì)記錄可存在數(shù)據(jù)字典表(稱為審計(jì)記錄)或操作系統(tǒng)審計(jì)記錄中。數(shù)據(jù)庫審計(jì)記錄是在sys模式的aud$表中。二、 數(shù)據(jù)完整性 它是指數(shù)據(jù)的正確性和相容性。數(shù)據(jù)的完整性是為了防止數(shù)據(jù)庫存在不符合主義的數(shù)據(jù),防止錯(cuò)誤信息輸入和輸出,即數(shù)據(jù)要遵守由dba或應(yīng)用開發(fā)者所決定的一組預(yù)定義的規(guī)則。oracle應(yīng)用于關(guān)系數(shù)據(jù)庫的表的數(shù)據(jù)完整性有下列類型:l 在插入或修改表的行時(shí)允許不允許包含有空值的列,稱為空與非空規(guī)則。l 唯一列值規(guī)則,允許插入或修改的表行在該列上的值唯一。l 引用完整性規(guī)則,同關(guān)系模型定義l
25、 用戶對(duì)定義的規(guī)則,為復(fù)雜性完整性檢查。oracle允許定義和實(shí)施上述每一種類型的數(shù)據(jù)完整性規(guī)則,這些規(guī)則可用完整性約束和數(shù)據(jù)庫觸發(fā)器定義。完整性約束,是對(duì)表的列定義一規(guī)則的說明性方法。數(shù)據(jù)庫觸發(fā)器,是使用非說明方法實(shí)施完整性規(guī)則,利用數(shù)據(jù)庫觸發(fā)器(存儲(chǔ)的數(shù)據(jù)庫過程)可定義和實(shí)施任何類型的完整性規(guī)則。1 完整性約束oracle利用完整性約束機(jī)制防止無效的數(shù)據(jù)進(jìn)入數(shù)據(jù)庫的基表,如果任何dml執(zhí)行結(jié)果破壞完整性約束,該語句被回滾并返回一上個(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ì),便很容易地編寫程序并可消除程序性錯(cuò)誤,其功能是由oracle控制。所以說明性完整性約束優(yōu)于應(yīng)用代碼和數(shù)據(jù)庫觸發(fā)器。l 對(duì)表所定義的完整性約束是存儲(chǔ)在數(shù)據(jù)字典中,所以由任何應(yīng)用進(jìn)入的數(shù)據(jù)都必須遵守與表相關(guān)聯(lián)的完整性約束。l 具有最大的開發(fā)能力。當(dāng)由完整性約束所實(shí)施的事務(wù)規(guī)則改變時(shí),管理員只需改變完整性約束的定義,所有應(yīng)用自動(dòng)地遵守所修改的約束。l 由于完整性約束存儲(chǔ)在數(shù)據(jù)字典中,數(shù)據(jù)庫應(yīng)用可利用這些信息,在sql語句執(zhí)行之前或由oracle檢查之前,就可立即反饋信息。l 由于完整性約束說明的語義是清楚地定義,對(duì)于每一指定說明規(guī)則可實(shí)現(xiàn)性能優(yōu)化。l 由于完整性約束可臨時(shí)地
27、使不能,以致在裝入大量數(shù)據(jù)時(shí)可避免約束檢索的開銷。當(dāng)數(shù)據(jù)庫裝入完成時(shí),完整性約束可容易地使其能,任何破壞完整性約束的任何新行在例外表中列出。oracle的dba和應(yīng)用開始者對(duì)列的值輸入可使用的完整性約束有下列類型:l not null約束:如果在表的一列的值不允許為空,則需在該列指定not null約束。l unique碼約束:在表指定的列或組列上不允許兩行是具有重復(fù)值時(shí),則需要該列或組列上指定unique碼完整性約束。在unique碼約束定義中的列或組列稱為唯一碼。所有唯一完整性約束是用索引方法實(shí)施。l primary key約束:在數(shù)據(jù)庫中每一個(gè)表可有一個(gè)primary key約束。包含在
28、primary key完整性約束的列或組列稱為主碼,每個(gè)表可有一個(gè)主碼。oracle使用索引實(shí)施primary key約束。l foreign key約束(可稱引用約束):在關(guān)系數(shù)據(jù)庫中表可通過公共列相關(guān)聯(lián),該規(guī)則控制必須維護(hù)的列之間的關(guān)系。包含在引用完整性約束定義的列或組列稱為外來碼。由外來碼所引用的表中的唯一碼或方碼,稱為引用碼。包含有外來碼的表稱為子表或從屬表。由子表的外來碼所引用的表稱為雙親表或引用表。如果對(duì)表的每一行,其外來碼的值必須與主碼中一值相匹配,則需指定引用完整性約束。l check約束:表的每行對(duì)一指定的條件必須是true或未知,則需在一列或列組上指定check完整性約束。
29、如果在發(fā)出一個(gè)dml語句時(shí),check約束的條件計(jì)算得false時(shí),該語句被回滾。2 數(shù)據(jù)庫觸發(fā)器oracle允許定義過程,當(dāng)對(duì)相關(guān)的表作insert、update或delete語句時(shí),這些過程被隱式地執(zhí)行。這些過程稱為數(shù)據(jù)庫觸發(fā)器。觸發(fā)器類似于存儲(chǔ)的過程,可包含sql語句和pl/sql語句,可調(diào)用其它的存儲(chǔ)過程。過程與觸發(fā)器差別在于調(diào)用方法:過程由用戶或應(yīng)用顯式執(zhí)行;而觸發(fā)器是為一激發(fā)語句(insert、update、delete)發(fā)出進(jìn)由oracle隱式地觸發(fā)。一個(gè)數(shù)據(jù)庫應(yīng)用可隱式地觸發(fā)存儲(chǔ)在數(shù)據(jù)庫中多個(gè)觸發(fā)器。在許多情況中觸發(fā)器補(bǔ)充oracle的標(biāo)準(zhǔn)功能,提供高度專用的數(shù)據(jù)庫管理系統(tǒng)。一
30、般觸發(fā)器用于:l 自動(dòng)地生成導(dǎo)出列值。l 防止無效事務(wù)。l 實(shí)施復(fù)雜的安全審核。l 在分布式數(shù)據(jù)庫中實(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所開發(fā)有應(yīng)用的一部分,它與在表上定義的數(shù)據(jù)庫觸發(fā)器有差別。數(shù)據(jù)庫觸發(fā)器在表上定義,存儲(chǔ)在相關(guān)的數(shù)據(jù)庫中,在對(duì)該表發(fā)出imsert、update、delete語句時(shí)將引起數(shù)據(jù)庫觸發(fā)器的執(zhí)行,不管是哪些用戶或應(yīng)用發(fā)出這些語句。而sql*forms
31、的觸發(fā)器是sql*forms應(yīng)用的組成,僅當(dāng)在指定sql*forms應(yīng)用中執(zhí)行指定觸發(fā)器點(diǎn)時(shí)才激發(fā)該觸發(fā)器。一個(gè)觸發(fā)器由三部分組成:觸發(fā)事件或語句、觸發(fā)限制和觸發(fā)器動(dòng)作。觸發(fā)事件或語句是指引起激發(fā)觸發(fā)器的sql語句,可為對(duì)一指定表的insert、unpdate或delete語句。觸發(fā)限制是指定一個(gè)布爾表達(dá)式,當(dāng)觸發(fā)器激以時(shí)該布爾表達(dá)式是必須為真。觸發(fā)器作為過程,是pl/sql塊,當(dāng)觸發(fā)語句發(fā)出、觸發(fā)限制計(jì)算為真時(shí)該過程被執(zhí)行。3.并發(fā)控制:數(shù)據(jù)庫是一個(gè)共享資源,可為多個(gè)應(yīng)用程序所共享。這些程序可串行運(yùn)行,但在許多情況下,由于應(yīng)用程序涉及的數(shù)據(jù)量可能很大,常常會(huì)涉及輸入/輸出的交換。為了有效地利
32、用數(shù)據(jù)庫資源,可能多個(gè)程序或一個(gè)程序的多個(gè)進(jìn)程并行地運(yùn)行,這就是數(shù)據(jù)庫的并行操作。在多用戶數(shù)據(jù)庫環(huán)境中,多個(gè)用戶程序可并行地存取數(shù)據(jù)庫,如果不對(duì)并發(fā)操作進(jìn)行控制,會(huì)存取不正確的數(shù)據(jù),或破壞數(shù)據(jù)庫數(shù)據(jù)的一致性。1) 數(shù)據(jù)庫不一致的類型l 不一致性在一事務(wù)期間,其它提交的或未提交事務(wù)的修改是顯然的,以致由查詢所返回的數(shù)據(jù)集不與任何點(diǎn)相一致。l 不可重復(fù)讀在一個(gè)事務(wù)范圍內(nèi),兩個(gè)相同查詢將返回不同數(shù)據(jù),由于查詢注意到其它提交事務(wù)的修改而引起。l 讀臟數(shù)據(jù)如果事務(wù)t1將一值(a)修改,然后事務(wù)t2讀該值,在這之后t1由于某種原因撤銷對(duì)該值的修改,這樣造成t2讀取的值是臟的。l 丟失更改在一事務(wù)中一修改重
33、寫另一事務(wù)的修改,如上述飛機(jī)票售票例子。l 破壞性的ddl操作在一用戶修改一表的數(shù)據(jù)時(shí),另一用戶同時(shí)更改或刪除該表。1) 封鎖在多用戶數(shù)據(jù)庫中一般采用某些數(shù)據(jù)封鎖來解決并發(fā)操作中的數(shù)據(jù)一致性和完整性問題。封鎖是防止存取同一資源的用戶之間破壞性的干擾的機(jī)制,該干擾是指不正確地修改數(shù)據(jù)或不正確地更改數(shù)據(jù)結(jié)構(gòu)。在多用戶數(shù)據(jù)庫中使用兩種封鎖:排它(專用)封鎖和共享封鎖。排它封鎖禁止相關(guān)資源的共享,如果一事務(wù)以排它方式封鎖一資源,僅僅該事務(wù)可更改該資源,直至釋放排它封鎖。共享封鎖允許相關(guān)資源可以共享,幾個(gè)用戶可同時(shí)讀同一數(shù)據(jù),幾個(gè)事務(wù)可在同一資源上獲取共享封鎖。共享封鎖比排它封鎖具有更高的數(shù)據(jù)并行性。在
34、多用戶系統(tǒng)中使用封鎖后會(huì)出現(xiàn)死鎖,引起一些事務(wù)不能繼續(xù)工作。當(dāng)兩個(gè)或多個(gè)用戶彼此等待所封鎖數(shù)據(jù)時(shí)可發(fā)生死鎖。2) oracle多種一致性模型。oracle利用事務(wù)和封鎖機(jī)制提供數(shù)據(jù)并發(fā)存取和數(shù)據(jù)完整性。在一事務(wù)內(nèi)由語句獲取的全部封鎖在事務(wù)期間被保持,防止其它并行事務(wù)的破壞性干擾。一個(gè)事務(wù)的sql語句所作的修改在它提交之后所啟動(dòng)的事務(wù)中才是可見的。在一事務(wù)中由語句所獲取的全部封鎖在該事務(wù)提交或回滾時(shí)被釋放。oracle在兩個(gè)不同級(jí)上提供讀一致性:語句級(jí)讀一致性和事務(wù)級(jí)一致性。orcle總是實(shí)施語句級(jí)讀一致性,保證單個(gè)查詢所返回的數(shù)據(jù)與該查詢開始時(shí)刻相一致。所以一個(gè)查詢從不會(huì)看到在查詢執(zhí)行過程中提
35、交的其它事務(wù)所作的任何修改。為了實(shí)現(xiàn)語句級(jí)讀一致性,在查詢進(jìn)入執(zhí)行階段時(shí),在注視scn的時(shí)候?yàn)橹顾峤坏臄?shù)據(jù)是有效的,而在語句執(zhí)行開始之后其它事務(wù)提交的任何修改,查詢將是看不到的。oracle允許選擇實(shí)施事務(wù)級(jí)讀一致性,它保證在同一事務(wù)內(nèi)所有查詢的數(shù)據(jù) 4)封鎖機(jī)制oracle自動(dòng)地使用不同封鎖類型來控制數(shù)據(jù)的并行存取,防止用戶之間的破壞性干擾。oracle為一事務(wù)自動(dòng)地封鎖一資源以防止其它事務(wù)對(duì)同一資源的排它封鎖。在某種事件出現(xiàn)或事務(wù)不再需要該資源時(shí)自動(dòng)地釋放。oracle將封鎖分為下列類:l 數(shù)據(jù)封鎖:數(shù)據(jù)封鎖保護(hù)表數(shù)據(jù),在多個(gè)用戶并行存取數(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語句隱式地提交一個(gè)事務(wù)。當(dāng)任何ddl事務(wù)需要時(shí)由oracle自動(dòng)獲取字典封鎖,用戶不能顯式地請(qǐng)求ddl封鎖。在ddl操作期間,被修改或引用的模式對(duì)象被封鎖。l 內(nèi)部封鎖:保護(hù)內(nèi)部數(shù)據(jù)庫和內(nèi)存結(jié)構(gòu),這些結(jié)構(gòu)對(duì)用戶是不可見的。5) 手工的數(shù)據(jù)封鎖下列情況允許使用選擇代替or
37、acle缺省的封鎖機(jī)制:l 應(yīng)用需要事務(wù)級(jí)讀一致或可重復(fù)讀。l 應(yīng)用需要一事務(wù)對(duì)一資源可排它存取,為了繼續(xù)它的語句,具有對(duì)資源排它存取的事務(wù)不必等待其它事務(wù)完成。oracle自動(dòng)封鎖可在二級(jí)被替代:事務(wù)級(jí)各系統(tǒng)級(jí)。l 事務(wù)級(jí):包含下列sql語句的事務(wù)替代oracle缺省封鎖:lock table命令、selectfor update命令、具有read only選項(xiàng)的set transactin命令。由這些語句所獲得的封鎖在事務(wù)提交或回滾后所釋放。l 系統(tǒng)級(jí):通過調(diào)整初始化參數(shù)serializable和reo-locking,實(shí)例可用非缺省封鎖啟動(dòng)。該兩參數(shù)據(jù)的缺省值為:serializable
38、=falseorw-locking=always四、數(shù)據(jù)庫后備與恢復(fù)當(dāng)我們使用一個(gè)數(shù)據(jù)庫時(shí),總希望數(shù)據(jù)庫的內(nèi)容是可靠的、正確的,但由于計(jì)算機(jī)系統(tǒng)的故障(硬件故障、軟件故障、網(wǎng)絡(luò)故障、進(jìn)程故障和系統(tǒng)故障)影響數(shù)據(jù)庫系統(tǒng)的操作,影響數(shù)據(jù)庫中數(shù)據(jù)的正確性,甚至破壞數(shù)據(jù)庫,使數(shù)據(jù)庫中全部或部分?jǐn)?shù)據(jù)丟失。因此當(dāng)發(fā)生上述故障后,希望能重新建立一個(gè)完整的數(shù)據(jù)庫,該處理稱為數(shù)據(jù)庫恢復(fù)?;謴?fù)子系統(tǒng)是數(shù)據(jù)庫管理系統(tǒng)的一個(gè)重要組成部分。恢復(fù)處理隨所發(fā)生的故障類型所影響的結(jié)構(gòu)而變化。1) 恢復(fù)數(shù)據(jù)庫所使用的結(jié)構(gòu)oracle數(shù)據(jù)庫使用幾種結(jié)構(gòu)對(duì)可能故障來保護(hù)數(shù)據(jù):數(shù)據(jù)庫后備、日志、回滾段和控制文件。數(shù)據(jù)庫后備是由構(gòu)成o
39、racle數(shù)據(jù)庫的物理文件的操作系統(tǒng)后備所組成。當(dāng)介質(zhì)故障時(shí)進(jìn)行數(shù)據(jù)庫恢復(fù),利用后備文件恢復(fù)毀壞的數(shù)據(jù)文件或控制文件。日志,每一個(gè)oracle數(shù)據(jù)庫實(shí)例都提供,記錄數(shù)據(jù)庫中所作的全部修改。一個(gè)實(shí)例的日志至少由兩個(gè)日志文件組成,當(dāng)實(shí)例故障或介質(zhì)故障時(shí)進(jìn)行數(shù)據(jù)庫部分恢復(fù),利用數(shù)據(jù)庫日志中的改變應(yīng)用于數(shù)據(jù)文件,修改數(shù)據(jù)庫數(shù)據(jù)到故障出現(xiàn)的時(shí)刻。數(shù)據(jù)庫日志由兩部分組成:在線日志和歸檔日志。每一個(gè)運(yùn)行的oracle數(shù)據(jù)庫實(shí)例相應(yīng)地有一個(gè)在線日志,它與oracle后臺(tái)進(jìn)程lgwr一起工作,立即記錄該實(shí)例所作的全部修改。在線日志由兩個(gè)或多個(gè)預(yù)期分配的文件組成,以循環(huán)方式使用。歸檔日志是可選擇的,一個(gè)oracl
40、e數(shù)據(jù)庫實(shí)例一旦在線日志填滿后,可形成在線日志的歸檔文件。歸檔的在線日志文件被唯一標(biāo)識(shí)并合成歸檔日志?;貪L段用于存儲(chǔ)正在進(jìn)行的事務(wù)(為未提交的事務(wù))所修改值的老值,該信息在數(shù)據(jù)庫恢復(fù)過程中用于撤消任何非提交的修改??刂莆募话阌糜诖鎯?chǔ)數(shù)據(jù)庫的物理結(jié)構(gòu)的狀態(tài)??刂莆募心承顟B(tài)信息在實(shí)例恢復(fù)和介質(zhì)恢復(fù)期間用于引導(dǎo)oracle。2) 在線日志一個(gè)oracle數(shù)據(jù)庫的每一實(shí)例有一個(gè)相關(guān)聯(lián)的在線日志。一個(gè)在線日志由多個(gè)在線日志文件組成。在線日志文件填入日志項(xiàng),日志項(xiàng)記錄的數(shù)據(jù)用于重構(gòu)對(duì)數(shù)據(jù)庫所作的全部修改。后臺(tái)進(jìn)程lgwr以循環(huán)方式寫入在線日志文件。當(dāng)當(dāng)前的在線日志文件寫滿后,lgwr寫入到下一可用
41、在線日志文件當(dāng)最后一個(gè)可用的在線日志文件的檢查點(diǎn)已完成時(shí)即可使用。如果歸檔不實(shí)施,一個(gè)已填滿的在線日志文件一當(dāng)包含該在線日志文件的檢查點(diǎn)完成,該文件已被歸檔后即可使用。在任何時(shí)候,僅有一個(gè)在線日志文件被寫入存儲(chǔ)日志項(xiàng),它被稱為活動(dòng)的或當(dāng)前在線日志文件,其它的在線日志文件為不活動(dòng)的在線日志文件。orcle結(jié)束寫入一在線日志文件并開始寫入到另一個(gè)在線日志文件的點(diǎn)稱為日志開關(guān)。日志開關(guān)在當(dāng)前在線日志文件完全填滿,必須繼續(xù)寫入到下一個(gè)在線日志文件時(shí)總出現(xiàn),也可由dba強(qiáng)制日志開關(guān)。每一日志開關(guān)出現(xiàn)時(shí),每一在線日志文件賦給一個(gè)新的日志序列號(hào)。如果在線日志文件被歸檔,在歸檔日志文件中包含有它的日志序列號(hào)。
42、oracle后臺(tái)進(jìn)程dbwr(數(shù)據(jù)庫寫)將sga中所有被修改的數(shù)據(jù)庫緩沖區(qū)(包含提交和未提交的)寫入到數(shù)據(jù)文件,這樣的事件稱為出現(xiàn)一個(gè)檢查點(diǎn)。因下列原因?qū)崿F(xiàn)檢查點(diǎn):l 檢查點(diǎn)確保將內(nèi)存中經(jīng)常改變的數(shù)據(jù)段塊每隔一定時(shí)間寫入到數(shù)據(jù)文件。由于dbwr使用最近最少使用算法,經(jīng)常修改的數(shù)據(jù)段塊從不會(huì)作為最近最少使用塊,如果檢查點(diǎn)不出現(xiàn),它從不會(huì)寫入磁盤。l 由于直至檢查點(diǎn)時(shí)所有的數(shù)據(jù)庫修改已記錄到數(shù)據(jù)文件,先于檢查點(diǎn)的日志項(xiàng)在實(shí)例恢復(fù)時(shí)不再需要應(yīng)用于數(shù)據(jù)文件,所以檢查點(diǎn)可加快實(shí)例恢復(fù)。雖然檢查點(diǎn)有一些開銷,但oracle既不停止活動(dòng)又不影響當(dāng)前事務(wù)。由于dbwr不斷地將數(shù)據(jù)庫緩沖區(qū)寫入到磁盤,所以一個(gè)檢
43、查點(diǎn)一次不必寫許多數(shù)據(jù)塊。一個(gè)檢查點(diǎn)保證自前一個(gè)檢查點(diǎn)以來的全部修改數(shù)據(jù)塊寫入到磁盤。檢查點(diǎn)不管填滿的在線日志文件是否正在歸檔,它總是出現(xiàn)。如果實(shí)施歸檔,在lgwr重用在線日志文件之前,檢查點(diǎn)必須完成并且所填滿的在線日志文件必須被歸檔。檢查點(diǎn)可對(duì)數(shù)據(jù)庫的全部數(shù)據(jù)文件出現(xiàn)(稱為數(shù)據(jù)庫檢查點(diǎn)),也可對(duì)指定的數(shù)據(jù)文件出現(xiàn)。下面說明一下什么時(shí)候出現(xiàn)檢查點(diǎn)及出現(xiàn)什么情況:l 在每一個(gè)日志開關(guān)處自動(dòng)地出現(xiàn)一數(shù)據(jù)庫檢查點(diǎn)。如果前一個(gè)數(shù)據(jù)庫檢查點(diǎn)正在處理,由日志開關(guān)實(shí)施的檢查點(diǎn)優(yōu)于當(dāng)前檢查點(diǎn)。l 初始化參數(shù)據(jù)log-checkpoint-interval設(shè)置所實(shí)施的數(shù)據(jù)庫檢查點(diǎn),當(dāng)預(yù)定的日志塊數(shù)被填滿后(自最
44、后一個(gè)數(shù)據(jù)庫檢查點(diǎn)以來),實(shí)施一數(shù)據(jù)庫檢查點(diǎn)。另一個(gè)參數(shù)log-checkpoint-timeout可設(shè)置自上一個(gè)數(shù)據(jù)庫檢查點(diǎn)開始之后指定秒數(shù)后實(shí)施一數(shù)據(jù)庫檢查點(diǎn)。這種選擇對(duì)使用非常大的日志文件時(shí)有用,它在日志開頭之間增加檢查點(diǎn)。由初始化參數(shù)所啟動(dòng)的數(shù)據(jù)庫檢查點(diǎn)只有在前一個(gè)檢查點(diǎn)完成后才能啟動(dòng)。l 當(dāng)一在線表空間開始后備時(shí),僅對(duì)構(gòu)成該空間的數(shù)據(jù)文件實(shí)施一檢查點(diǎn),該檢查點(diǎn)壓倒仍在進(jìn)行中的任何檢查點(diǎn)。l 當(dāng)dba使一表空間離線時(shí),僅對(duì)構(gòu)成該表空間的在線文件實(shí)施一檢查點(diǎn)。l 當(dāng)dba以正?;蛄⒓捶绞疥P(guān)閉一實(shí)例時(shí),oracle在實(shí)例關(guān)閉之前實(shí)施一數(shù)據(jù)庫檢查點(diǎn),該檢查點(diǎn)壓倒任何運(yùn)行檢查點(diǎn)。l dba可要
45、求實(shí)施一數(shù)據(jù)庫檢查點(diǎn),該檢查點(diǎn)壓倒任何運(yùn)行檢查點(diǎn)。檢查點(diǎn)機(jī)制:當(dāng)檢查點(diǎn)出現(xiàn)時(shí),檢查點(diǎn)后臺(tái)進(jìn)程記住寫入在線文件的下一日志行的位置,并通知數(shù)據(jù)庫寫后臺(tái)進(jìn)程將sga中修改的數(shù)據(jù)庫緩沖區(qū)寫入到磁盤上的數(shù)據(jù)文件。然后由ckpt修改全部控制文件和數(shù)據(jù)文件的標(biāo)頭,反映該最后檢查點(diǎn)。當(dāng)檢查點(diǎn)不發(fā)生,dbwr當(dāng)需要時(shí)僅將最近最少使用的數(shù)據(jù)庫緩沖區(qū)寫入磁盤,為新數(shù)據(jù)準(zhǔn)備緩沖區(qū)。鏡象在線日志文件:為了安全將實(shí)例的在線日志文件鏡象到它的在線日志文件oracle提供鏡象功能。當(dāng)具有鏡象在線日志文件時(shí),lgwr同時(shí)將同一日志信息寫入到多個(gè)同樣的在線日志文件。日志文件分成組,每個(gè)組中的日志文件稱為成員,每個(gè)組中的全部成員同
46、時(shí)活動(dòng),由lgwr賦給相同的日志序列號(hào)。如果使用鏡象在線日志,則可建立在線日志文件組,在組中的每一成員要求是同一大小。鏡象在線日志的機(jī)制:lgwr總是尋找組的全部成員,對(duì)一組的全部成員并行地寫,然后轉(zhuǎn)換到下一組的全部成員,并行地寫。每個(gè)數(shù)據(jù)庫實(shí)例有自己的在線日志組,這些在線日志組可以是鏡象的或不是,稱為實(shí)例的在線日志線索。在典型配置中,一個(gè)數(shù)據(jù)庫實(shí)例存取一個(gè)oracle數(shù)據(jù)庫,于是僅一個(gè)線索存在。然而在運(yùn)行oracle并行服務(wù)器中,兩個(gè)或多個(gè)實(shí)例并行地存取單個(gè)數(shù)據(jù)庫,在這種情況下,每個(gè)實(shí)例有自己的線索。3) 歸檔日志oracle要將填滿的在線日志文件組歸檔時(shí),則要建立歸檔日志,或稱離線日志。其
47、對(duì)數(shù)據(jù)庫后備和恢復(fù)有下列用處:l 數(shù)據(jù)庫后備以及在線和歸檔日志文件,在操作系統(tǒng)或磁盤故障中可保證全部提交的事務(wù)可被恢復(fù)。l 在數(shù)據(jù)庫打開時(shí)和正常系統(tǒng)使用下,如果歸檔日志是永久保持,在線后備可以進(jìn)行和使用。如果用戶數(shù)據(jù)庫要求在任何磁盤故障的事件中不丟失任何數(shù)據(jù),那么歸檔日志必須要存在。歸檔已填滿的在線日志文件可能需要dba執(zhí)行額外的管理操作。歸檔機(jī)制:決定于歸檔設(shè)置,歸檔已填滿的在線日志組的機(jī)制可由oracle后臺(tái)進(jìn)程arch自動(dòng)歸檔或由用戶進(jìn)程發(fā)出語句手工地歸檔。當(dāng)日志組變?yōu)椴换顒?dòng)、日志開關(guān)指向下一組已完成時(shí),arch可歸檔一組,可存取該組的任何或全部成員,完成歸檔組。在線日志文件歸檔之后才可
48、為lgwr重用。當(dāng)使用歸檔時(shí),必須指定歸檔目標(biāo)指向一存儲(chǔ)設(shè)備,它不同于個(gè)有數(shù)據(jù)文件、在線日志文件和控制文件的設(shè)備,理想的是將歸檔日志文件永久地移到離線存儲(chǔ)設(shè)備、如磁帶。數(shù)據(jù)庫可運(yùn)行在兩種不同方式下:noarchivelog方式或archivelog方式。數(shù)據(jù)庫在noarchivelog方式下使用時(shí),不能進(jìn)行在線日志的歸檔。在該數(shù)據(jù)庫控制文件指明填滿的組不需要?dú)w檔,所以一當(dāng)填滿的組成為活動(dòng),在日志開關(guān)的檢查點(diǎn)完成,該組即可被lgwr重用。在該方式下僅能保護(hù)數(shù)據(jù)庫實(shí)例故障,不能保護(hù)介質(zhì)(磁盤)故障。利用存儲(chǔ)在在線日志中的信息,可實(shí)現(xiàn)實(shí)例故障恢復(fù)。如果數(shù)據(jù)庫在archivelog方式下,可實(shí)施在線日
49、志的歸檔。在控制文件中指明填滿的日志文件組在歸檔之前不能重用。一旦組成為不活動(dòng),執(zhí)行歸檔的進(jìn)程立即可使用該組。在實(shí)例起動(dòng)時(shí),通過參數(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)歸檔。一旦在線日志文件組變?yōu)椴换顒?dòng)時(shí),arch進(jìn)程自動(dòng)對(duì)它歸檔。如果數(shù)據(jù)庫在archivelog方式下運(yùn)行,dba可手工歸檔填滿的不活動(dòng)的日志文件組,不管自動(dòng)歸檔是可以還是不可以。4) 數(shù)據(jù)庫后備不管為oracle數(shù)據(jù)庫設(shè)計(jì)成什么樣的后備或恢復(fù)模式,數(shù)據(jù)庫數(shù)據(jù)文件、日志文件和控制文件的操作系統(tǒng)后備是絕對(duì)需要的,它是保護(hù)介質(zhì)故
50、障的策略部分。操作系統(tǒng)后備有完全后備和部分后備l 完全后備:一個(gè)完全后備將構(gòu)成oracle數(shù)據(jù)庫的全部數(shù)據(jù)庫文件、在線日志文件和控制文件的一個(gè)操作系統(tǒng)后備。一個(gè)完全后備在數(shù)據(jù)庫正常關(guān)閉之后進(jìn)行,不能在實(shí)例故障后進(jìn)行。在此時(shí),所有構(gòu)成數(shù)據(jù)庫的全部文件是關(guān)閉的,并與當(dāng)前點(diǎn)相一致。在數(shù)據(jù)庫打開時(shí)不能進(jìn)行完全后備。由完全后備得到的數(shù)據(jù)文件在任何類型的介質(zhì)恢復(fù)模式中是有用的。l 部分后備部分后備為除完全后備外的任何操作系統(tǒng)后備,可在數(shù)據(jù)庫打開或關(guān)閉下進(jìn)行。如單個(gè)表空間中全部數(shù)據(jù)文件后備、單個(gè)數(shù)據(jù)文件后備和控制文件后備。部分后備僅對(duì)在archivelog方式下運(yùn)行數(shù)據(jù)庫有用,因?yàn)榇嬖诘臍w檔日志,數(shù)據(jù)文件可
51、由部分后備恢復(fù)。在恢復(fù)過程中與數(shù)據(jù)庫其它部分一致。5) 數(shù)據(jù)庫恢復(fù)l 實(shí)例故障的恢復(fù)當(dāng)實(shí)例意外地(如掉電、后臺(tái)進(jìn)程故障等)或預(yù)料地(發(fā)出shutdoum abort語句)中止時(shí)出現(xiàn)實(shí)例故障,此時(shí)需要實(shí)例恢復(fù)。實(shí)例恢復(fù)將數(shù)據(jù)庫恢復(fù)一故障之前的事務(wù)一致狀態(tài)。如果在在線后備發(fā)現(xiàn)實(shí)例故障,則需介質(zhì)恢復(fù)。在其它情況oracle在下次數(shù)據(jù)庫起動(dòng)時(shí)(對(duì)新實(shí)例裝配和打開),自動(dòng)地執(zhí)行實(shí)例恢復(fù)。如果需要,從裝配狀態(tài)變?yōu)榇蜷_狀態(tài),自動(dòng)地激發(fā)實(shí)例恢復(fù),由下列處理:(1) 為了解恢復(fù)數(shù)據(jù)文件中沒有記錄的數(shù)據(jù),進(jìn)行向前滾。該數(shù)據(jù)記錄在在線日志,包括對(duì)回滾段的內(nèi)容恢復(fù)。(2) 回滾未提交的事務(wù),按步1重新生成回滾段所指定
52、的操作。(3) 釋放在故障時(shí)正在處理事務(wù)所持有的資源。(4) 解決在故障時(shí)正經(jīng)歷一階段提交的任何懸而未決的分布事務(wù)。l 介質(zhì)故障的恢復(fù)介質(zhì)故障是當(dāng)一個(gè)文件、一個(gè)文件的部分或一磁盤不能讀或不能寫時(shí)出現(xiàn)的故障。介質(zhì)故障的恢復(fù)有兩種形式,決定于數(shù)據(jù)庫運(yùn)行的歸檔方式。l 如果數(shù)據(jù)庫是可運(yùn)行的,以致它的在線日志僅可重用但不能歸檔,此時(shí)介質(zhì)恢復(fù)為使用最新的完全后備的簡單恢復(fù)。在完全后備執(zhí)行的工作必須手工地重作。l 如果數(shù)據(jù)庫可運(yùn)行,其在線日志是被歸檔的,該介質(zhì)故障的恢復(fù)是一個(gè)實(shí)際恢復(fù)過程,重構(gòu)受損的數(shù)據(jù)庫恢復(fù)到介質(zhì)故障前的一個(gè)指定事務(wù)一致狀態(tài)。不管哪種形式,介質(zhì)故障的恢復(fù)總是將整個(gè)數(shù)據(jù)庫恢復(fù)到故障之前的一
53、個(gè)事務(wù)一致狀態(tài)。如果數(shù)據(jù)庫是在archivelog方式運(yùn)行,可有不同類型的介質(zhì)恢復(fù):完全介質(zhì)恢復(fù)和不完全介質(zhì)恢復(fù)。完全介質(zhì)恢復(fù)可恢復(fù)全部丟失的修改。僅當(dāng)所有必要的日志可用時(shí)才可能。有不同類型的完全介質(zhì)恢復(fù)可使用,其決定于毀壞文件和數(shù)據(jù)庫的可用性。例:l 關(guān)閉數(shù)據(jù)庫的恢復(fù)。當(dāng)數(shù)據(jù)庫可被裝配卻是關(guān)閉的,完全不能正常使用,此時(shí)可進(jìn)行全部的或單個(gè)毀壞數(shù)據(jù)文件的完全介質(zhì)恢復(fù)。l 打開數(shù)據(jù)庫的離線表空間的恢復(fù)。當(dāng)數(shù)據(jù)庫是打開的,完全介質(zhì)恢復(fù)可以處理。未損的數(shù)據(jù)庫表空間是在線的可以使用,而受損耗捕空間是離線的,其所有數(shù)據(jù)文件作為恢復(fù)的單位。l 打開數(shù)據(jù)庫的離線表間的單個(gè)數(shù)據(jù)文件的恢復(fù)。當(dāng)數(shù)據(jù)庫是打開的,完全
54、介質(zhì)恢復(fù)可以處理。未損的數(shù)據(jù)庫表空間是在線的可以使用,而所損的表空間是離線的,該表空間的指定所損的數(shù)據(jù)文件可被恢復(fù)。l 使用后備的控制文件的完全介質(zhì)恢復(fù)。當(dāng)控制文件所有拷貝由于磁盤故障而受損時(shí),可進(jìn)行介質(zhì)恢復(fù)而不丟失數(shù)據(jù)。不完全介質(zhì)恢復(fù)是在完全介質(zhì)恢復(fù)不可能或不要求時(shí)進(jìn)行的介質(zhì)恢復(fù)。重構(gòu)受損的數(shù)據(jù)庫,使其恢復(fù)介質(zhì)故障前或用戶出錯(cuò)之前的一個(gè)事務(wù)一致性狀態(tài)。不完全介質(zhì)恢復(fù)有不同類型的使用,決定于需要不完全介質(zhì)恢復(fù)的情況,有下列類型:基于撤消、基于時(shí)間和基于修改的不完全恢復(fù)。基于撤消恢復(fù):在某種情況,不完全介質(zhì)恢復(fù)必須被控制,dba可撤消在指定點(diǎn)的操作?;诔废幕謴?fù)地在一個(gè)或多個(gè)日志組(在線的或歸檔的)已被介質(zhì)故障所破壞,不能用于恢復(fù)過程時(shí)使用,所以介質(zhì)恢復(fù)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 10萬噸煤礦合同范本
- 單位只交社保合同范本
- 公司銷售代理合同范本
- 出售機(jī)械板車合同范本
- 醫(yī)藥培訓(xùn)銷售合同范本
- 個(gè)人精裝房租賃合同范例
- 保潔大掃除合同范本
- 買汽車有沒有三包合同范本
- 加工基地 合同范本
- 勞務(wù)用工合同范本
- 《水稻育秧技術(shù)新》課件
- 2024-2025年第一學(xué)期初中德育工作總結(jié)
- 圍手術(shù)期手術(shù)患者護(hù)理要點(diǎn)
- 2025年大連長興開發(fā)建設(shè)限公司工作人員公開招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
- 貨物學(xué) 課件1.3貨物的計(jì)量
- 《鈉離子電池用電解液編制說明》
- 全球醫(yī)療旅游經(jīng)濟(jì)的現(xiàn)狀與未來趨勢(shì)
- 2024年度儲(chǔ)能電站在建項(xiàng)目收購合作協(xié)議范本3篇
- 新建冷卻塔布水器項(xiàng)目立項(xiàng)申請(qǐng)報(bào)告
- 廣東省梅州市梅縣區(qū)2023-2024學(xué)年八年級(jí)上學(xué)期期末數(shù)學(xué)試題
- 2025屆江蘇省南通市海門市海門中學(xué)高三最后一模數(shù)學(xué)試題含解析
評(píng)論
0/150
提交評(píng)論