国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > Oracle > 正文

ORACLE 培訓教程(1)

2024-08-29 13:30:08
字體:
來源:轉載
供稿:網(wǎng)友


收集最實用的網(wǎng)頁特效代碼!


oracle系統(tǒng)概述

 

oracle公司自86年推出版本5開始,系統(tǒng)具有分布數(shù)據(jù)庫處理功能.88年推出版本6,oracle rdbms(v6.0)可帶事務處理選項(tpo),提高了事務處理的速度.1992年推出了版本7,在oracle rdbms中可帶過程數(shù)據(jù)庫選項(procedural database option)和并行服務器選項(parallel server option),稱為oracle7數(shù)據(jù)庫管理系統(tǒng),它釋放了開放的關系型系統(tǒng)的真正潛力。oracle7的協(xié)同開發(fā)環(huán)境提供了新一代集成的軟件生命周期開發(fā)環(huán)境,可用以實現(xiàn)高生產(chǎn)率、大型事務處理及客戶/服務器結構的應用系統(tǒng)。協(xié)同開發(fā)環(huán)境具有可移植性,支持多種數(shù)據(jù)來源、多種圖形用戶界面及多媒體、多民族語言、case等協(xié)同應用系統(tǒng)。

 

一、    oracle系統(tǒng)

 

1.         oracle產(chǎn)品結構及組成

oracle系統(tǒng)是由以rdbms為核心的一批軟件產(chǎn)品構成,其產(chǎn)品結構輪廓下圖所示:


sql*plus

oracle*forms

oracle*report

sql*graphic

sql*calc

用戶編制的程序

程序接口

(sql執(zhí)行程序)

oracle內核

(rdbms)

操作系統(tǒng)

數(shù)據(jù)字典

dd

數(shù)據(jù)庫db
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2.         oracle系統(tǒng)特點

oracle公司于1979年,首先推出基于sql標準的關系數(shù)據(jù)庫產(chǎn)品,可在100多種硬件平臺上運行(所括微機、工作站、小型機、中型機和大型機),支持很多種操作系統(tǒng)。用戶的oracle應用可方便地從一種計算機配置移至另一種計算機配置上。oracle的分布式結構可將數(shù)據(jù)和應用駐留在多臺計算機上,而相互間的通信是透明的。1992年6月oracle公司推出的oracle7協(xié)同服務器數(shù)據(jù)庫,使關系數(shù)據(jù)庫技術邁上了新臺階。根據(jù)idg(國際數(shù)據(jù)集團)1992年全球unix數(shù)據(jù)庫市場報告,oracle占市場銷售量50%。它之所以倍受用戶喜愛是因為它有以下突出的特點:

l        支持大數(shù)據(jù)庫、多用戶的高性能的事務處理。oracle支持最大數(shù)據(jù)庫,其大小可到幾百千兆,可充分利用硬件設備。支持大量用戶同時在同一數(shù)據(jù)上執(zhí)行各種數(shù)據(jù)應用,并使數(shù)據(jù)爭用最小,保證數(shù)據(jù)一致性。系統(tǒng)維護具有高的性能,oracle每天可連續(xù)24小時工作,正常的系統(tǒng)操作(后備或個別計算機系統(tǒng)故障)不會中斷數(shù)據(jù)庫的使用。可控制數(shù)據(jù)庫數(shù)據(jù)的可用性,可在數(shù)據(jù)庫級或在子數(shù)據(jù)庫級上控制。

l        oracle遵守數(shù)據(jù)存取語言、操作系統(tǒng)、用戶接口和網(wǎng)絡通信協(xié)議的工業(yè)標準。所以它是一個開放系統(tǒng),保護了用戶的投資。美國標準化和技術研究所(nist)對oracle7 server進行檢驗,100%地與ansi/iso sql89標準的二級相兼容。

l        實施安全性控制和完整性控制。oracle為限制各監(jiān)控數(shù)據(jù)存取提供系統(tǒng)可靠的安全性。oracle實施數(shù)據(jù)完整性,為可接受的數(shù)據(jù)指定標準。

l        支持分布式數(shù)據(jù)庫和分布處理。oracle為了充分利用計算機系統(tǒng)和網(wǎng)絡,允許將處理分為數(shù)據(jù)庫服務器和客戶應用程序,所有共享的數(shù)據(jù)管理由數(shù)據(jù)庫管理系統(tǒng)的計算機處理,而運行數(shù)據(jù)庫應用的工作站集中于解釋和顯示數(shù)據(jù)。通過網(wǎng)絡連接的計算機環(huán)境,oracle將存放在多臺計算機上的數(shù)據(jù)組合成一個邏輯數(shù)據(jù)庫,可被全部網(wǎng)絡用戶存取。分布式系統(tǒng)像集中式數(shù)據(jù)庫一樣具有透明性和數(shù)據(jù)一致性。

l        具有可移植性、可兼容性和可連接性。由于oracle軟件可在許多不同的操作系統(tǒng)上運行,以致oracle上所開發(fā)的應用可移植到任何操作系統(tǒng),只需很少修改或不需修改。oracle軟件同工業(yè)標準相兼容,包括許多工業(yè)標準的操作系統(tǒng),所開發(fā)應用系統(tǒng)可在任何操作系統(tǒng)上運行??蛇B接性是指oralce允許不同類型的計算機和操作系統(tǒng)通過網(wǎng)絡可共享信息。

 

二、    oracle數(shù)據(jù)庫系統(tǒng)的體系結構

 

oracle數(shù)據(jù)庫系統(tǒng)為具有管理oracle數(shù)據(jù)庫功能的計算機系統(tǒng)。每一個運行的oracle數(shù)據(jù)庫與一個oracle實例(instance)相聯(lián)系。一個oracle實例為存取和控制一數(shù)據(jù)庫的軟件機制。每一次在數(shù)據(jù)庫服務器上啟動一數(shù)據(jù)庫時,稱為系統(tǒng)全局區(qū)(system global area)的一內存區(qū)(簡稱sga)被分配,有一個或多個oracle進程被啟動。該sga 和 oracle進程的結合稱為一個oracle數(shù)據(jù)庫實例。一個實例的sga和進程為管理數(shù)據(jù)庫數(shù)據(jù)、為該數(shù)據(jù)庫一個或多個用戶服務而工作。

在oracle系統(tǒng)中,首先是實例啟動,然后由實例裝配(mount)一數(shù)據(jù)庫。在松耦合系統(tǒng)中,在具有oracle parallel server 選項時,單個數(shù)據(jù)庫可被多個實例裝配,即多個實例共享同一物理數(shù)據(jù)庫。

 

1.         oracle實例的進程結構和內存結構

1)           進程結構

進程是操作系統(tǒng)中的一種機制,它可執(zhí)行一系列的操作步。在有些操作系統(tǒng)中使用作業(yè)(job)或任務(task)的術語。一個進程通常有它自己的專用存儲區(qū)。oracle進程的體系結構設計使性能最大。

oracle實例有兩種類型:單進程實例和多進程實例。

單進程oracle(又稱單用戶oracle)是一種數(shù)據(jù)庫系統(tǒng),一個進程執(zhí)行全部oracle代碼。由于oracle部分和客戶應用程序不能分別以進程執(zhí)行,所以oracle的代碼和用戶的數(shù)據(jù)庫應用是單個進程執(zhí)行。

在單進程環(huán)境下的oracle 實例,僅允許一個用戶可存取。例如在ms-dos上運行oracle 。

多進程oracle實例(又稱多用戶oracle)使用多個進程來執(zhí)行oracle的不同部分,對于每一個連接的用戶都有一個進程。

在多進程系統(tǒng)中,進程分為兩類:用戶進程和oracle進程。當一用戶運行一應用程序,如pro*c程序或一個oracle工具(如sql*plus),為用戶運行的應用建立一個用戶進程。oracle進程又分為兩類:服務器進程和后臺進程。服務器進程用于處理連接到該實例的用戶進程的請求。當應用和oracele是在同一臺機器上運行,而不再通過網(wǎng)絡,一般將用戶進程和它相應的服務器進程組合成單個的進程,可降低系統(tǒng)開銷。然而,當應用和oracle運行在不同的機器上時,用戶進程經(jīng)過一個分離服務器進程與oracle通信。它可執(zhí)行下列任務:

l    對應用所發(fā)出的sql語句進行語法分析和執(zhí)行。

l    從磁盤(數(shù)據(jù)文件)中讀入必要的數(shù)據(jù)塊到sga的共享數(shù)據(jù)庫緩沖區(qū)(該塊不在緩沖區(qū)時)。

l    將結果返回給應用程序處理。

系統(tǒng)為了使性能最好和協(xié)調多個用戶,在多進程系統(tǒng)中使用一些附加進程,稱為后臺進程。在許多操作系統(tǒng)中,后臺進程是在實例啟動時自動地建立。一個oracle實例可以有許多后臺進程,但它們不是一直存在。后臺進程的名字為:

dbwr  數(shù)據(jù)庫寫入程序

lgwr 日志寫入程序

ckpt 檢查點

smon 系統(tǒng)監(jiān)控

pmon  進程監(jiān)控

arch 歸檔

reco 恢復

lckn 封鎖

dnnn 調度進程

snnn 服務器

每個后臺進程與oracle數(shù)據(jù)庫的不同部分交互。

下面對后臺進程的功能作簡單介紹:

dbwr進程:該進程執(zhí)行將緩沖區(qū)寫入數(shù)據(jù)文件,是負責緩沖存儲區(qū)管理的一個oracle后臺進程。當緩沖區(qū)中的一緩沖區(qū)被修改,它被標志為“弄臟”,dbwr的主要任務是將“弄臟”的緩沖區(qū)寫入磁盤,使緩沖區(qū)保持“干凈”。由于緩沖存儲區(qū)的緩沖區(qū)填入數(shù)據(jù)庫或被用戶進程弄臟,未用的緩沖區(qū)的數(shù)目減少。當未用的緩沖區(qū)下降到很少,以致用戶進程要從磁盤讀入塊到內存存儲區(qū)時無法找到未用的緩沖區(qū)時,dbwr將管理緩沖存儲區(qū),使用戶進程總可得到未用的緩沖區(qū)。

oracle采用lru(least recently used)算法(最近最少使用算法)保持內存中的數(shù)據(jù)塊是最近使用的,使i/o最小。在下列情況預示dbwr 要將弄臟的緩沖區(qū)寫入磁盤:

l        當一個服務器進程將一緩沖區(qū)移入“弄臟”表,該弄臟表達到臨界長度時,該服務進程將通知dbwr進行寫。該臨界長度是為參數(shù)db-block-write-batch的值的一半。

l        當一個服務器進程在lru表中查找db-block-max-scan-cnt緩沖區(qū)時,沒有查到未用的緩沖區(qū),它停止查找并通知dbwr進行寫。

l        出現(xiàn)超時(每次3秒),dbwr 將通知本身。

l        當出現(xiàn)檢查點時,lgwr將通知dbwr

在前兩種情況下,dbwr將弄臟表中的塊寫入磁盤,每次可寫的塊數(shù)由初始化參數(shù)db-block-write-batch所指定。如果弄臟表中沒有該參數(shù)指定塊數(shù)的緩沖區(qū),dbwr從lur表中查找另外一個弄臟緩沖區(qū)。

如果dbwr在三秒內未活動,則出現(xiàn)超時。在這種情況下dbwr對lru表查找指定數(shù)目的緩沖區(qū),將所找到任何弄臟緩沖區(qū)寫入磁盤。每當出現(xiàn)超時,dbwr查找一個新的緩沖區(qū)組。每次由dbwr查找的緩沖區(qū)的數(shù)目是為寢化參數(shù)db-block-write-batch的值的二倍。如果數(shù)據(jù)庫空運轉,dbwr最終將全部緩沖區(qū)存儲區(qū)寫入磁盤。

在出現(xiàn)檢查點時,lgwr指定一修改緩沖區(qū)表必須寫入到磁盤。dbwr將指定的緩沖區(qū)寫入磁盤。

在有些平臺上,一個實例可有多個dbwr。在這樣的實例中,一些塊可寫入一磁盤,另一些塊可寫入其它磁盤。參數(shù)db-writers控制dbwr進程個數(shù)。

lgwr進程:該進程將日志緩沖區(qū)寫入磁盤上的一個日志文件,它是負責管理日志緩沖區(qū)的一個oracle后臺進程。lgwr進程將自上次寫入磁盤以來的全部日志項輸出,lgwr輸出:

l    當用戶進程提交一事務時寫入一個提交記錄。

l    每三秒將日志緩沖區(qū)輸出。

l    當日志緩沖區(qū)的1/3已滿時將日志緩沖區(qū)輸出。

l    當dbwr將修改緩沖區(qū)寫入磁盤時則將日志緩沖區(qū)輸出。

lgwr進程同步地寫入到活動的鏡象在線日志文件組。如果組中一個文件被刪除或不可用,lgwr 可繼續(xù)地寫入該組的其它文件。

日志緩沖區(qū)是一個循環(huán)緩沖區(qū)。當lgwr將日志緩沖區(qū)的日志項寫入日志文件后,服務器進程可將新的日志項寫入到該日志緩沖區(qū)。lgwr 通常寫得很快,可確保日志緩沖區(qū)總有空間可寫入新的日志項。

注意:有時候當需要更多的日志緩沖區(qū)時,lwgr在一個事務提交前就將日志項寫出,而這些日志項僅當在以后事務提交后才永久化。

oracle使用快速提交機制,當用戶發(fā)出commit語句時,一個commit記錄立即放入日志緩沖區(qū),但相應的數(shù)據(jù)緩沖區(qū)改變是被延遲,直到在更有效時才將它們寫入數(shù)據(jù)文件。當一事務提交時,被賦給一個系統(tǒng)修改號(scn),它同事務日志項一起記錄在日志中。由于scn記錄在日志中,以致在并行服務器選項配置情況下,恢復操作可以同步。

 

ckpt進程:該進程在檢查點出現(xiàn)時,對全部數(shù)據(jù)文件的標題進行修改,指示該檢查點。在通常的情況下,該任務由lgwr執(zhí)行。然而,如果檢查點明顯地降低系統(tǒng)性能時,可使ckpt進程運行,將原來由lgwr進程執(zhí)行的檢查點的工作分離出來,由ckpt進程實現(xiàn)。對于許多應用情況,ckpt進程是不必要的。只有當數(shù)據(jù)庫有許多數(shù)據(jù)文件,lgwr在檢查點時明顯地降低性能才使ckpt運行。ckpt進程不將塊寫入磁盤,該工作是由dbwr完成的。

初始化參數(shù)checkpoint-process控制ckpt進程的使能或使不能。缺省時為false,即為使不能。

 

smon進程:該進程實例啟動時執(zhí)行實例恢復,還負責清理不再使用的臨時段。在具有并行服務器選項的環(huán)境下,smon對有故障cpu或實例進行實例恢復。smon進程有規(guī)律地被呼醒,檢查是否需要,或者其它進程發(fā)現(xiàn)需要時可以被調用。

 

pmon進程:該進程在用戶進程出現(xiàn)故障時執(zhí)行進程恢復,負責清理內存儲區(qū)和釋放該進程所使用的資源。例:它要重置活動事務表的狀態(tài),釋放封鎖,將該故障的進程的id從活動進程表中移去。pmon還周期地檢查調度進程(dispatcher)和服務器進程的狀態(tài),如果已死,則重新啟動(不包括有意刪除的進程)。

pmon有規(guī)律地被呼醒,檢查是否需要,或者其它進程發(fā)現(xiàn)需要時可以被調用。

 

reco進程:該進程是在具有分布式選項時所使用的一個進程,自動地解決在分布式事務中的故障。一個結點reco后臺進程自動地連接到包含有懸而未決的分布式事務的其它數(shù)據(jù)庫中,reco自動地解決所有的懸而不決的事務。任何相應于已處理的懸而不決的事務的行將從每一個數(shù)據(jù)庫的懸掛事務表中刪去。

當一數(shù)據(jù)庫服務器的reco后臺進程試圖建立同一遠程服務器的通信,如果遠程服務器是不可用或者網(wǎng)絡連接不能建立時,reco自動地在一個時間間隔之后再次連接。

reco后臺進程僅當在允許分布式事務的系統(tǒng)中出現(xiàn),而且distributed – transactions參數(shù)是大于0。

 

arch進程:該進程將已填滿的在線日志文件拷貝到指定的存儲設備。當日志是為archivelog使用方式、并可自動地歸檔時arch進程才存在。

 

lckn進程:是在具有并行服務器選件環(huán)境下使用,可多至10個進程(lck0,lck1……,lck9),用于實例間的封鎖。

 

dnnn進程(調度進程):該進程允許用戶進程共享有限的服務器進程(server process)。沒有調度進程時,每個用戶進程需要一個專用服務進程(dedicatedserver process)。對于多線索服務器(multi-threaded server)可支持多個用戶進程。如果在系統(tǒng)中具有大量用戶,多線索服務器可支持大量用戶,尤其在客戶_服務器環(huán)境中。

在一個數(shù)據(jù)庫實例中可建立多個調度進程。對每種網(wǎng)絡協(xié)議至少建立一個調度進程。數(shù)據(jù)庫管理員根據(jù)操作系統(tǒng)中每個進程可連接數(shù)目的限制決定啟動的調度程序的最優(yōu)數(shù),在實例運行時可增加或刪除調度進程。多線索服務器需要sql*net版本2或更后的版本。在多線索服務器的配置下,一個網(wǎng)絡接收器進程等待客戶應用連接請求,并將每一個發(fā)送到一個調度進程。如果不能將客戶應用連接到一調度進程時,網(wǎng)絡接收器進程將啟動一個專用服務器進程。該網(wǎng)絡接收器進程不是oracle實例的組成部分,它是處理與oracle有關的網(wǎng)絡進程的組成部分。在實例啟動時,該網(wǎng)絡接收器被打開,為用戶連接到oracle建立一通信路徑,然后每一個調度進程把連接請求的調度進程的地址給予于它的接收器。當一個用戶進程作連接請求時,網(wǎng)絡接收器進程分析請求并決定該用戶是否可使用一調度進程。如果是,該網(wǎng)絡接收器進程返回該調度進程的地址,之后用戶進程直接連接到該調度進程。有些用戶進程不能調度進程通信(如果使用sql*net以前的版本的用戶),網(wǎng)絡接收器進程不能將如此用戶連接到一調度進程。在這種情況下,網(wǎng)絡接收器建立一個專用服務器進程,建立一種合適的連接。

 

 

 

2)、oracle內存結構

oracle在內存存儲下列信息:

l    執(zhí)行的程序代碼。

l    連接的會話信息

l    程序執(zhí)行期間所需數(shù)據(jù)和共享的信息

l    存儲在外存儲上的緩沖信息。

oracle具有下列基本的內存結構:

l    軟件代碼區(qū)

l    系統(tǒng)全局區(qū),包括數(shù)據(jù)庫緩沖存儲區(qū)、日志緩沖區(qū)和共享池.

l    程序全局區(qū),包括棧區(qū)和數(shù)據(jù)區(qū).

l    排序區(qū)

 

軟件代碼區(qū)

用于存儲正在執(zhí)行的或可以執(zhí)行的程序代碼。

軟件區(qū)是只讀,可安裝成共享或非共享。oracle系統(tǒng)程序是可共享的,以致多個oracle用戶可存取它,而不需要在內存有多個副本。用戶程序可以共享也可以不共享。

 

系統(tǒng)全局區(qū)

為一組由oracle分配的共享的內存結構,可包含一個數(shù)據(jù)庫實例的數(shù)據(jù)或控制信息。如果多個用戶同時連接到同一實例時,在實例的sga中數(shù)據(jù)可為多個用戶所共享,所以又稱為共享全局區(qū)。當實例起動時,sga的存儲自動地被分配;當實例關閉時,該存儲被回收。所有連接到多進程數(shù)據(jù)庫實例的全部用戶可自動地被分配;當實例關閉時,該存儲被回收。所有連接到多進程數(shù)據(jù)庫實例的全部用戶可使用其sga中的信息,但僅僅有幾個進程可寫入信息。在sga中存儲信息將內存劃分成幾個區(qū):數(shù)據(jù)庫緩沖存儲區(qū)、日志緩沖區(qū)、共享池、請求和響應隊列、數(shù)據(jù)字典存儲區(qū)和其它各種信息。

 

程序全局區(qū)

pga是一個內存區(qū),包含單個進程的數(shù)據(jù)和控制信息,所以又稱為進程全局區(qū)(process global area)。

 

排序區(qū)

排序需要內存空間,oracle利用該內存排序數(shù)據(jù),這部分空間稱為排序區(qū)。排序區(qū)存在于請求排序的用戶進程的內存中,該空間的大小為適就排序數(shù)據(jù)量的大小,可增長,但受初始化參數(shù)sort-area-sizer所限制。

 

2.         oracle的配置方案

所有連接到oracle的用戶必須執(zhí)行兩個代碼模塊可存取一個oracle數(shù)據(jù)庫實例:

l        應用或oracle工具:一數(shù)據(jù)庫用戶執(zhí)行一數(shù)據(jù)庫應用或一個oracle工具,可向oracle數(shù)據(jù)庫發(fā)出sql語句。

l        oracle服務器程序:負責解釋和處理應用中的sql語句。

在多進程實例中,連接用戶的代碼可按下列三種方案之一配置:

l        對于每一個用戶,其數(shù)據(jù)庫應用程序和服務器程序組合成單個用戶進程

l        對于每一個用戶,其數(shù)據(jù)庫應用是由用戶進程所運行,并有一個專用服務器進程。執(zhí)行oracle服務器的代碼。這樣的配置稱為專用服務器體系結構

l        執(zhí)行數(shù)據(jù)庫應用的進程不同于執(zhí)行oracle服務器代碼的進程,而且每一個服務器進程(執(zhí)行oracle服務器代碼)可服務于多個用戶進程,這樣的配置稱為多線索服務器體系結構。

 

1) user/server進程相結合的結構

在這種配置下,數(shù)據(jù)庫應用和oracle服務器程序是在同一個進程中運行,該進程稱為用戶進程。

這種oracle配置有時稱為單任務oracle(single_task oracle),該配置適用于這樣的操作系統(tǒng),它可在同一進程中的數(shù)據(jù)庫應用和oracle代碼之間維護一個隔離,該隔離是為數(shù)據(jù)安全性和完整性所需。其中程序接口(program interface)是負責oracle服務器代碼的隔離和保護,在數(shù)據(jù)庫應用和oracle用戶程序之間傳送數(shù)據(jù)。

 

2) 使用專用服務器進程的系統(tǒng)結構

使用專用服務器進程的oracle系統(tǒng)在兩臺計算機上運行。在這種系統(tǒng)中,在一計算機上用戶進程執(zhí)行數(shù)據(jù)庫應用,而在另一臺計算機上的服務器進程執(zhí)行相應的oracle服務器代碼,這兩個進程是分離的。為每個用戶進程建立的不同的服務器進程稱為專用服務器進程,因為該服務器進程僅對相連的用戶進程起作用。這種配置又稱為兩任務oracle。每一個連接到oracle的用戶進程有一個相應的專用服務進程。這種系統(tǒng)結構允許客戶應用是有工作站上執(zhí)行,通過網(wǎng)絡與運行oracle的計算機通信。當客戶應用和oracle服務器代碼是在同一臺計算機上執(zhí)行時,這種結構也可用。

 

3) 多線索服務器的系統(tǒng)結構

多線索服務器配置允許許多用戶進程共享很少服務器進程。在沒有多線索服務器的配置中,每一個用戶進程需要自己的專用服務器進程。在具有多線索服務器的配置中,許多用戶進程連接到調度進程,由調度進程將客戶請求發(fā)送到一個共享服務器進程。多線索服務器配置的優(yōu)點是降低系統(tǒng)開銷,增加用戶個數(shù)。

 

該系統(tǒng)中需要下列類型的進程:

l    網(wǎng)絡接收器進程,將用戶進程連接到調度進程和專用服務器進程。

l    一個或多個調度進程

l    一個或多個共享服務器進程

其中網(wǎng)絡接收器進程等待新來的連接請求,決定每一用戶進程能否用共享服務器進程。如果可以使用,接收器進程將一調度進程的地址返回給用戶進程。如果用戶進程請求一專用服務器,該接收器進程將建立一個專用服務器進程,將用戶進程連接到該專用服務器進程。對于數(shù)據(jù)庫客戶機所使用的每種網(wǎng)絡協(xié)議至少配置一個調度進程,并啟動它。

當用戶作一次調用時,調度進程將請求放置在sga的請求隊列中,由可用的共享服務器進程獲取。共享服務器進程為完成每一個用戶進程的請求作所有必要的數(shù)據(jù)庫調用。當服務器完成請求時,將結果返回到調度進程的隊列,然后由調度進程將完成的請求返回給用戶進程。

共享服務器進程:除共享服務器進程不是連接指定的用戶進程外,共享服務器進程和專用服務器進程提供相同的功能,一個共享服務器進程在多線索服務器的配置中可為任何客戶請求服務。一個共享服務器進程的sga不包含有與用戶相關的數(shù)據(jù),其信息可為所有共享服務器進程存取,它僅包含??臻g、進程指定變量。所有與會話有關的信息是包含有sga中。每一個共享服務器進程可存取全部會話的數(shù)據(jù)空間,以致任何服務進程可處理任何會話的請求。對于每一個會話的數(shù)據(jù)空間是在sga中分配空間。

oracle根據(jù)請求隊列的長度可動態(tài)地調整共享服務器進程??山⒌墓蚕矸掌鬟M程將請求放到請求隊列。一個用戶請求是對數(shù)據(jù)庫的一次程序接口調用,為sql語句。在sga中請求隊列對實例的全部調度進程是公用的。服務器進程為新請求檢查公用請求隊列,按先進先出的原則從隊列檢出一個請求,然后為完成該請求對數(shù)據(jù)庫作必要的調用。共享服務器進程將響應放在調度進程的響應隊列。每一個調度進程在sga中有自己的響應隊列,每個調度進程負責將完成的請求回送給相應的用戶進程。

 

3.oracle運行

1)         使用專用服務進程的oracle的運行

在這種配置下,oracle運行過程如下:

(1)    數(shù)據(jù)庫服務器計算機當前正在運行oracle(后臺進程)。

(2)    在一客戶工作站運行一個數(shù)據(jù)庫應用(為用戶進程),如sql*plus??蛻魬檬褂胹ql*net driver建立對服務器的連接。

(3)    數(shù)據(jù)庫服務器計算機當前正運行合適的sql*net driver,該機上接收器進程檢出客戶數(shù)據(jù)庫應用的連接請求,并在該機上為用戶進程建立專用服務器進程。

(4)    用戶發(fā)出單個sql語句。

(5)    專用服務器進程接收該語句,在此處有兩種方法處理sql語句:

l    如果在共享池一共享sql區(qū)中包含有相同sql語句時,該服務器進程可利用已存在的共享sql區(qū)執(zhí)行客戶的sql語句。

l    如果在共享池中沒有一個sql區(qū)包含有相同的sql語句時,在共享池中為該語句分配一新的共享sql區(qū)。

在每一種情況,在會話的pga中建立一個專用sql區(qū),專用服務器進程檢查用戶對查詢數(shù)據(jù)的存取權限。

(6) 如果需要,服務器進程從數(shù)據(jù)文件中檢索數(shù)據(jù)塊,或者可使用已存儲在實例sga中的緩沖存儲區(qū)的數(shù)據(jù)塊。

(7) 服務器進程執(zhí)行存儲在共享sql區(qū)中的sql語句。數(shù)據(jù)首先在sga中修改,由dbwr進程在最有效時將它寫入磁盤。lgwr進程在在線日志文件中記錄用戶提交請求的事務。

(8)如果請求成功,服務器將通過網(wǎng)絡發(fā)送一信息。如果請求不成功,將發(fā)送相應的錯誤信息。

(9)在整個過程中,其它的后臺進程是運行的,同時注意需要干預的條件。另外,oracle管理其它事務,防止不同事務之間請求同一數(shù)據(jù)的競爭。

 

 

2)    使用多線索服務器的oracle的運行

在這種配置下,oracle運行過程如下:

(1)    一數(shù)據(jù)庫服務器計算機運行使用多線索服務器配置的oracle。

(2)    在一客戶工作站運行一數(shù)據(jù)庫應用(在一用戶進程中)??蛻魬煤线m的sql*net驅動器試圖建立到數(shù)據(jù)庫服務器計算機的連接。

(3)    數(shù)據(jù)庫服務器計算機當前運行合適的sql*net驅動器,它的網(wǎng)絡接收器進程檢出用戶進程的連接請求,并決定用戶進程如何連接。如果用戶是使用sql*net版本2,該網(wǎng)絡接收器通知用戶進程使用一個可用的調度進程的地址重新連接。

(4)    用戶發(fā)出單個sql語句

(5)    調度進程將用戶進程的請求放入請求隊列,該隊列位于sga中,可為所有調度進程共享。

(6)    一個可用共享服務器檢驗公用調度進程請求隊列,并從隊列中檢出下一個sql語句。然后處理該sql語句,同前一(5),(6)和(7)。注意:會話的專用sql區(qū)是建立在sga中。

(7)    一當共享服務器進程完成sql處理,該進程將結果放置發(fā)入該請求的調度進程的響應隊列。

(8)    調度進程檢查它的響應隊列,并將完成的請求送回請求的用戶進程。

 

4.數(shù)據(jù)庫結構和空間管理

一個oracle數(shù)據(jù)庫是數(shù)據(jù)的集合,被處理成一個單位。一個oracle數(shù)據(jù)庫有一個物理結構和一個邏輯結構。

物理數(shù)據(jù)庫結構(physical database structure)是由構成數(shù)據(jù)庫的操作系統(tǒng)文件所決定。每一個oracle數(shù)據(jù)庫是由三種類型的文件組成:數(shù)據(jù)文件、日志文件和控制文件。數(shù)據(jù)庫的文件為數(shù)據(jù)庫信息提供真正的物理存儲。

邏輯數(shù)據(jù)庫結構是用戶所涉及的數(shù)據(jù)庫結構。一個oracle數(shù)據(jù)庫的邏輯結構由下列因素決定:

l    一個或多個表空間

l    數(shù)據(jù)庫模式對象(即表、視圖、索引、聚集、序列、存儲過程)

邏輯存儲結構如表空間(dataspace)、段(segment)和范圍將支配一個數(shù)據(jù)庫的物理空間如何使用。模式對象(schema object)用它們之間的聯(lián)系組成了一個數(shù)據(jù)庫的關系設計。

 

1)           物理結構

 

(1)    數(shù)據(jù)文件

每一個oracle數(shù)據(jù)庫有一個或多個物理的數(shù)據(jù)文件(data file)。一個數(shù)據(jù)庫的數(shù)據(jù)文件包含全部數(shù)據(jù)庫數(shù)據(jù)。邏輯數(shù)據(jù)庫結構(如表、索引)的數(shù)據(jù)物理地存儲在數(shù)據(jù)庫的數(shù)據(jù)文件中。數(shù)據(jù)文件有下列特征:

l    一個數(shù)據(jù)文件僅與一個數(shù)據(jù)庫聯(lián)系。

l    一旦建立,數(shù)據(jù)文件不能改變大小

l    一個表空間(數(shù)據(jù)庫存儲的邏輯單位)由一個或多個數(shù)據(jù)文件組成。

     數(shù)據(jù)文件中的數(shù)據(jù)在需要時可以讀取并存儲在oracle內存儲區(qū)中。例如:用戶要存取數(shù)據(jù)庫一表的某些數(shù)據(jù),如果請求信息不在數(shù)據(jù)庫的內存存儲區(qū)內,則從相應的數(shù)據(jù)文件中讀取并存儲在內存。當修改和插入新數(shù)據(jù)時,不必立刻寫入數(shù)據(jù)文件。為了減少磁盤輸出的總數(shù),提高性能,數(shù)據(jù)存儲在內存,然后由oracle后臺進程dbwr決定如何將其寫入到相應的數(shù)據(jù)文件。

 

(2)    日志文件

每一個數(shù)據(jù)庫有兩個或多個日志文件(redo log file)的組,每一個日志文件組用于收集數(shù)據(jù)庫日志。日志的主要功能是記錄對數(shù)據(jù)所作的修改,所以對數(shù)據(jù)庫作的全部修改是記錄在日志中。在出現(xiàn)故障時,如果不能將修改數(shù)據(jù)永久地寫入數(shù)據(jù)文件,則可利用日志得到該修改,所以從不會丟失已有操作成果。

日志文件主要是保護數(shù)據(jù)庫以防止故障。為了防止日志文件本身的故障,oracle允許鏡象日志(mirrored redo log),以致可在不同磁盤上維護兩個或多個日志副本。

日志文件中的信息僅在系統(tǒng)故障或介質故障恢復數(shù)據(jù)庫時使用,這些故障阻止將數(shù)據(jù)庫數(shù)據(jù)寫入到數(shù)據(jù)庫的數(shù)據(jù)文件。然而任何丟失的數(shù)據(jù)在下一次數(shù)據(jù)庫打開時,oracle自動地應用日志文件中的信息來恢復數(shù)據(jù)庫數(shù)據(jù)文件。

 

(3)    控制文件

每一oracle數(shù)據(jù)庫有一個控制文件(control file),它記錄數(shù)據(jù)庫的物理結構,包含下列信息類型:

l    數(shù)據(jù)庫名;

l    數(shù)據(jù)庫數(shù)據(jù)文件和日志文件的名字和位置;

l    數(shù)據(jù)庫建立日期。

為了安全起見,允許控制文件被鏡象。

每一次oracle數(shù)據(jù)庫的實例啟動時,它的控制文件用于標識數(shù)據(jù)庫和日志文件,當著手數(shù)據(jù)庫操作時它們必須被打開。當數(shù)據(jù)庫的物理組成更改時,oracle自動更改該數(shù)據(jù)庫的控制文件。數(shù)據(jù)恢復時,也要使用控制文件。

 

2)           邏輯結構

數(shù)據(jù)庫邏輯結構包含表空間、段、范圍(extent)、數(shù)據(jù)塊和模式對象。

(1)    表空間

一個數(shù)據(jù)庫劃分為一個或多個邏輯單位,該邏輯單位稱為表空間(tablespace)。一個表空間可將相關的邏輯結構組合在一起。dba可利用表空間作下列工作:

l    控制數(shù)據(jù)庫數(shù)據(jù)的磁盤分配。

l    將確定的空間份額分配給數(shù)據(jù)庫用戶。

l    通過使單個表空間在線或離線,控制數(shù)據(jù)的可用性。

l    執(zhí)行部分數(shù)據(jù)庫后備或恢復操作。

l    為提高性能,跨越設備分配數(shù)據(jù)存儲。

數(shù)據(jù)庫、表空間和數(shù)據(jù)文件之間的關系如下圖所示:

                                      database


  system       data

  tablespace      tablespace
 

 

 

 

                      dtatafile1                

                      (2mb)              datafile2           

                                         (2mb)              datafile3

                                                            (2mb)

 

                             driver1               driver2

 

。每個數(shù)據(jù)庫可邏輯劃分為一個或多個表空間

。每一個表空間是由一個或多個數(shù)據(jù)文件組成,該表空間物理地存儲表空間中全部邏輯結構的數(shù)據(jù)。dba可以建立新的表空間,可為表空間增加數(shù)據(jù)文件或可刪除數(shù)據(jù)文件,設置或更改缺省的段存儲位置。

 

每一個oracle數(shù)據(jù)庫包含有一個名為system的表空間,在數(shù)據(jù)庫建立是自動建立。在該表空間中總包含有整個數(shù)據(jù)庫的數(shù)據(jù)字典表。最小的數(shù)據(jù)庫可只需要system表空間。該表空間必須總是在線。表和存儲的pl/sql程序單元(過程、函數(shù)、包和觸發(fā)器)的全部存儲數(shù)據(jù)是存儲在system表空間中。如果這些pl/sql對象是為數(shù)據(jù)庫建的,dba在system表空間中需要規(guī)劃這些對象所需要的空間。

表空間利用增加數(shù)據(jù)文件擴大表空間,表空間的大小為組成該表空間的數(shù)據(jù)文件大小的和。

dba可以使oracle數(shù)據(jù)庫中任何表空間(除system表空間外)在線(online)或離線(offline)。表空間通常是在線,以致它所包含的數(shù)據(jù)對數(shù)據(jù)庫用戶是可用的。當表空間為離線時,其數(shù)據(jù)不可使用。在下列情況下,dba可以使其離線。

。使部分數(shù)據(jù)不可用,而剩余的部分允許正常存取

。執(zhí)行離線的表空間后備

。為了修改或維護一應用,使它和它的一組表臨時不可用。

包含有正在活動的回滾段的表空間不能被離線,僅當回滾段不正在使用時,該表空間才可離線。

在數(shù)據(jù)字典中記錄表空間的狀態(tài),在線還是離線。如果在數(shù)據(jù)庫關閉時一表空間為離線,那么在下次數(shù)據(jù)庫裝配和重新打開后,它仍然保持離線。

當出現(xiàn)某些錯誤時,一個表空間可自動地由在線改變?yōu)殡x線。通過使用多個表空間,將不同類型的數(shù)據(jù)分開,更方便dba來管理數(shù)據(jù)庫。

oracle數(shù)據(jù)庫中一表空間是由一個或多個物理數(shù)據(jù)文件組成,一個數(shù)據(jù)文件只可與一個表空間想聯(lián)系。當為一表空間建立一數(shù)據(jù)文件時,oracle建立該文件,分配指定的磁盤空間容量。在數(shù)據(jù)文件初時建立后,所分配的磁盤不包含任何數(shù)據(jù)。表空間可以在線或離線。在oracle中還允許單獨數(shù)據(jù)文件在線或離線。

 

(2)    段、范圍和數(shù)據(jù)塊

oracle通過段、范圍和數(shù)據(jù)塊邏輯數(shù)據(jù)結構可更細地控制磁盤空間的使用。

 



段(segment)包含表空間中一種指定類型的邏輯存儲結構,是由一組范圍組成。在oracle數(shù)據(jù)庫中有幾種類型的段:數(shù)據(jù)段、牽引段、回滾段和臨時段。

數(shù)據(jù)段:對于每一個非聚集的表有一數(shù)據(jù)段,表的所有數(shù)據(jù)存放在該段。每一聚集有一個數(shù)據(jù)段,聚集中每一個表的數(shù)據(jù)存儲在該段中。

索引段:每一個索引有一索引段,存儲索引數(shù)據(jù)。

回滾段:是由dba建立,用于臨時存儲要撤消的信息,這些信息用于生成讀一致性數(shù)據(jù)庫信息、在數(shù)據(jù)庫恢復時使用、回滾未提交的事務。

臨時段:當一個sql語句需要臨時工作區(qū)時,由oracle建立。當語句執(zhí)行完畢,臨時段的范圍退回給系統(tǒng)。

oracle對所有段的空間分配,以范圍為單位。

 

范圍

一個范圍(extent)是數(shù)據(jù)庫存儲空間分配的一個邏輯單位,它由連續(xù)數(shù)據(jù)塊所組成。每一個段是由一個或多個范圍組成。當一段中間所有空間已完全使用時,oracle為該段分配一個新的范圍。

為了維護的目的,在數(shù)據(jù)庫的每一段含有段標題塊(segment header block)說明段的特征以及該段中的范圍目錄。

 

數(shù)據(jù)塊

數(shù)據(jù)塊(data block)是oracle管理數(shù)據(jù)文件中存儲空間的單位,為數(shù)據(jù)庫使用的i/o的最小單位,其大小可不同于操作系統(tǒng)的標準i/o塊大小。

 

 

數(shù)據(jù)塊的格式:

公用的變長標題

表目錄

行目錄

未用空間

行數(shù)據(jù)

 

(3)    模式和模式對象

一個模式(schema)為模式對象(scehma object)的一個集合,每一個數(shù)據(jù)庫用戶對應一個模式。模式對象為直接引用數(shù)據(jù)庫數(shù)據(jù)的邏輯結構,模式對象包含如表、視圖、索引、聚集、序列、同義詞、數(shù)據(jù)庫鏈、過程和包等結構。模式對象是邏輯數(shù)據(jù)存儲結構,每一種模式對象在磁盤上沒有一個相應文件存儲其信息。一個模式對象邏輯地存儲在數(shù)據(jù)庫的一個表空間中,每一個對象的數(shù)據(jù)物理地包含在表空間的一個或多個數(shù)據(jù)文件中。

 



表(table)為數(shù)據(jù)庫中數(shù)據(jù)存儲的基本單位,其數(shù)據(jù)按行、列存儲。每個表具有一表名和列的集合。每一列有一個列名、數(shù)據(jù)類型、寬度或精度、比例。一行是對應單個記錄的列信息的集合。

 

視圖

一個視圖(view)是由一個或多個表(或其他視圖)中的數(shù)據(jù)的一種定制的表示,是用一個查詢定義,所以可認為是一個存儲的查詢(stored query)或是一個虛表(virtual table)。視圖可在使用表的許多地方使用。

由于視圖是由表導出的,視圖和表存在許多類似,視圖象表最多可定義254列。視圖可以被查詢,而在修改、插入或刪除時具有一定的限制,在視圖上執(zhí)行的全部操作真正地影響視圖的基本表中的數(shù)據(jù),受到基本表的完整性約束和觸發(fā)器的限制。

視圖與表不同,一個視圖不分配任何存儲空間,視圖不真正地包含數(shù)據(jù)。由查詢定義的視圖相應于視圖引用表中的數(shù)據(jù)。視圖只在數(shù)據(jù)字典中存儲其定義。

引入視圖有下列好處:

。通過限制對表的行預定義集合的存取,為表提供附加的安全性

。隱藏數(shù)據(jù)復雜性。

。為用戶簡化命令

。為基本表的數(shù)據(jù)提供另一種觀點。

??蓪酶綦x基本表定義的修改

。用于不用視圖無法表示的查詢。

。可用于保存復雜查詢。

 

聚集

聚集(cluster)是存儲表數(shù)據(jù)的可選擇的方法。一個聚集是一組表,將具有同一公共列值的行存儲在一起,并且它們經(jīng)常一起使用。這些公共列構成聚集碼。例如:emp表各dept表共享deptno列,所以emp表和dept表可聚集在一起,聚集碼的列為deptno列,該聚集將每個部門的全部職工行各該部門的行物理地存儲在同一數(shù)據(jù)塊中。

 

索引

索引(index)是與表和聚集相關的一種選擇結構。索引是為提高數(shù)據(jù)檢索的性能而建立,利用它可快速地確定指定的信息。oracle索引為表數(shù)據(jù)提供快速存取路徑。索引適用于一范圍的行查詢或指定行的查詢。

索引可建立在一表的一列或多列上,一旦建立,由oracle自動維護和使用,對用戶是完全透明的。索引是邏輯地和物理地獨立于數(shù)據(jù),它們的建立或刪除對表沒有影響,應用可繼續(xù)處理。索引數(shù)據(jù)的檢索性能幾乎保持常數(shù),而當一表上存在許多索引時,修改、刪除和插入操作的性能會下降。

索引有唯一索引各非唯一索引。唯一索引保證表中沒有兩行在定義索引的列上具有重復值。oracle在唯一碼上自動地定義唯一索引實施unique完整性約束。

組合索引是在表的某個列上所建立的一索引。組全索引可加快select語句的檢索速度,在其where子句中可引用組合索引的全部或主要部分 。所以在定義中給出列的次序,將經(jīng)常存取的或選擇最多的列放在首位。

在建立索引時,將在表空間自動地建立一索引段,索引段空間分配和保留空間的使用受下列方式控制:

索引段范圍的分配常駐該索引段的存儲參數(shù)控制。

其數(shù)據(jù)塊中未用空間可受該段的pctfree參數(shù)設置所控制。

 

序列生成器

序列生成器(sequence generator)產(chǎn)生序列號。在多用戶環(huán)境下該序列生成器特別有用,可生成各返回序列號而不需要磁盤i/o或事務封鎖。

序列號為oracle整數(shù),最多可有38個數(shù)字。一個序列定義指出一般信息:序列的名字、上升或下降、序列號之間間距和其它信息。對所有序列的確的定義以行存儲在system表空間中的數(shù)據(jù)字典表中,所以所有序列定義總是可用。由引用序列號的sql語句使用序列號,可生成一個新的序列號或使用當前序列號。一旦在用戶會話中的sql語句生成一序列號,該序列號僅為該會話可用。序列號生成是獨立于表,所以同一序列生成器可用于一個和多個表。所生成序列號可用于生成唯一的主碼。

 

同義詞

一個同義詞(synonym)為任何表、視圖、快照、序列、過程、函數(shù)或包的別名,其定義存儲在數(shù)據(jù)字典中。同義詞因安全性和方便原因而經(jīng)常使用,可用于:

l        可屏蔽對象的名字及其持有者。

l        為分布式數(shù)據(jù)庫的遠程對象提供位置透明性。

l        為用戶簡化sql語句。

有兩種同義詞:公用和專用。一個公用同義詞為命名為public特殊用戶組所持有,可為數(shù)據(jù)庫中每一個用戶所存取。一個專用同義詞是包含在指定用戶的模式中,僅為該用戶和授權的用戶所使用。

 

雜湊

雜湊(hashing)是存儲表數(shù)據(jù)一種可選擇的方法,用以改進數(shù)據(jù)檢索的性能。要使用雜湊,就要建立雜湊聚集,將表裝入到該聚集。在驃湊聚集中的表行根據(jù)雜湊函數(shù)的結果進行物理學存儲和檢索。雜湊函數(shù)用于生成一個數(shù)值的分布,該數(shù)值稱為雜湊值,它是基于指定的聚集碼值。

 

程序單元

程序單元(program unit)是指存儲過程、函數(shù)和包(package)。一個過程和函數(shù),是由sql語句和pl/sql語句組合在一起,為執(zhí)行某一個任務的一個可執(zhí)行單位。一個過程或函數(shù)可被建立,在數(shù)據(jù)庫中存儲其編譯形式,可由用戶或數(shù)據(jù)庫應用所執(zhí)行。過程和函數(shù)差別在函數(shù)總返回單個值給調用者,而過程沒有值返回給調用者。

包提供相關的過程、函數(shù)、變量和其它包結構封裝起來并存貯在一起的一種方法,允許管理者和應用開發(fā)者利用該方法組織如此的程序(routine),來提供更多的功能和提高性能。

 

數(shù)據(jù)庫鏈

數(shù)據(jù)庫鏈是一個命名的對象,說明從一數(shù)據(jù)庫到另一數(shù)據(jù)庫的一路徑(path)。在分布式數(shù)據(jù)庫中,對全局對象名引用時,數(shù)據(jù)庫鏈隱式地使用。

 

三、數(shù)據(jù)庫和實例的啟動和關閉

一個oracle數(shù)據(jù)庫沒有必要對所有用戶總是可用,數(shù)據(jù)庫管理員可啟動數(shù)據(jù)庫,以致它被打開。在數(shù)據(jù)庫打開情況下,用戶可存取數(shù)據(jù)庫中的信息。當數(shù)據(jù)庫不使用時,dba可關閉它,關閉后的數(shù)據(jù)庫,用戶不能存取其信息。

數(shù)據(jù)庫的啟動和關閉是非常重要的管理功能,通過以internal連接到oracle的能力來保護。以internal 連接到oracle需要有下列先決條件:

該用戶的操作系統(tǒng)賬號具有使用internal連接的操作系統(tǒng)特權。

對internal數(shù)據(jù)庫有一口令,該用戶知道其口令。

另外:當用戶以internal連接時,可連接到專用服務器,而且是安全連接。

 

1.         數(shù)據(jù)庫啟動

     啟動數(shù)據(jù)庫并使它可用有三步操作:

l    啟動一個實例;

l    裝配數(shù)據(jù)庫

l    打開數(shù)據(jù)庫

 

1)            啟動一個實例

啟動一實例的處理包含分配一個sga(數(shù)據(jù)庫信息使用的內存共享區(qū))和后臺進程的建立。實例起動的執(zhí)行先于該實例裝配一數(shù)據(jù)庫。如果僅啟動實例,則沒有數(shù)據(jù)庫與內存儲結構和進程相聯(lián)系。

 

2)            裝配一數(shù)據(jù)庫

裝配數(shù)據(jù)庫是將一數(shù)據(jù)庫與已啟動的實例相聯(lián)。當實例安裝一數(shù)據(jù)庫之后,該數(shù)據(jù)庫保持關閉,僅dba可存取。

 

3)            打開一數(shù)據(jù)庫

打開一數(shù)據(jù)庫是使數(shù)據(jù)庫可以進行正常數(shù)據(jù)庫操作的處理。當一數(shù)據(jù)庫打開所有用戶可連接到該數(shù)據(jù)庫用存取其信息。在數(shù)據(jù)庫打開時,在線數(shù)據(jù)文件和在線日志文件也被打開。如果一表空間在上一次數(shù)據(jù)庫關閉時為離線,在數(shù)據(jù)庫再次打開時,該表空間與它所相聯(lián)的數(shù)據(jù)文件還是離線的。

 

2.         數(shù)據(jù)庫和實例的關閉

 

關閉一實例以及它所連接的數(shù)據(jù)庫也有三步操作:

 

1)            關閉數(shù)據(jù)庫

數(shù)據(jù)庫停止的第一步是關閉數(shù)據(jù)庫。當數(shù)據(jù)庫關閉后,所有在sga中的數(shù)據(jù)庫數(shù)據(jù)和恢復數(shù)據(jù)相應地寫入到數(shù)據(jù)文件和日志文件。在這操作之后,所有聯(lián)機數(shù)據(jù)文件和聯(lián)機的日志文件也被關閉,任何離線表空間中數(shù)據(jù)文件夾是已關閉的。在數(shù)據(jù)庫關閉后但還安裝時,控制文件仍保持打開。

 

2)            卸下數(shù)據(jù)庫

停止數(shù)據(jù)庫的第二步是從實例卸下數(shù)據(jù)庫。在數(shù)據(jù)庫卸下后,在計算機內存中僅保留實例。在數(shù)據(jù)庫卸下后,數(shù)據(jù)庫的控制文件也被關閉。

 

3)            停止實例

停止數(shù)據(jù)庫的最后一步是停止實例。當實例停止后,sag是從內存中撤消,后臺進程被中止。

 

3.         初始化參數(shù)文件

在啟動一個實例時,oracle必須讀入一初始化參數(shù)文件(initialization parameter file),該參數(shù)文件是一個文本文件,包含有實例配置參數(shù)。這些參數(shù)置成特殊值,用于初始oracle實例的許多內存和進程設置,該參數(shù)文件包含:

l    一個實例所啟動的數(shù)據(jù)庫名字

l    在sga中存儲結構使用多少內存;

l    在填滿在線日志文件后作什么;

l    數(shù)據(jù)庫控制文件的名字和位置;

l    在數(shù)據(jù)庫中專用回滾段的名字。

 

 

四、數(shù)據(jù)字典的使用

數(shù)據(jù)字典是oracle數(shù)據(jù)庫的最重要的部分之一,是由一組只讀的表及其視圖所組成。它提供有關該數(shù)據(jù)庫的信息,可提供的信息如下:

l    oracle用戶的名字;

l    每一個用戶所授的特權和角色;

l    模式對象的名字(表、視圖、快照、索引、聚集、同義詞、序列、過程、函數(shù)、包及觸發(fā)器等);

l    關于完整性約束的信息;

l    列的缺省值;

l    有關數(shù)據(jù)庫中對象的空間分布及當前使用情況;

l    審計信息(如誰存取或修改各種對象);

l    其它一般的數(shù)據(jù)庫信息。

可用sql存取數(shù)據(jù)字典,由于數(shù)據(jù)字典為只讀,允許查詢。

 

1.         數(shù)據(jù)字典的結構

數(shù)據(jù)庫數(shù)據(jù)字典是由基本表和用戶可存取的視圖組成。

基本表:數(shù)據(jù)字典的基礎是一組基本表組成,存儲相關的數(shù)據(jù)庫的信息。這些信息僅由oracle讀和寫,它們很少被oracle用戶直接存取。

用戶可存取視圖:數(shù)據(jù)字典包含用戶可存取視圖,可概括地方便地顯示數(shù)據(jù)字典的基本表的信息。視圖將基本表中信息解碼成可用信息。

 

2.         數(shù)據(jù)字典的使用

當數(shù)據(jù)庫打開時,數(shù)據(jù)字典總是可用,它駐留在system表空間中。數(shù)據(jù)字典包含視圖集,在許多情況下,每一視圖集有三種視圖包含有類似信息,彼此以 前綴 相區(qū)別,前綴 user、all和dba。

l    前綴為user的視圖,為用 視圖,是在用戶的模式內。

l    前綴為all的視圖,為擴展的用戶視圖(為用戶可存取的視圖)。

l    前綴為dba的視圖為dba的視圖(為全部用戶可存取的視圖)。

在數(shù)據(jù)庫中oracle還維護了一組虛表記錄當前數(shù)據(jù)庫的活動,這些表稱為動態(tài)性能表。動態(tài)性能表不是真正的表,許多用戶不能存取,dba可查詢這些表,可以建立視圖,給其它用戶授予存取視圖權。

 

五、事務管理

1.            事務

     一個事務為工作的一個邏輯單位,由一個或多個sql語句組成。一個事務是一個原子單位,構成事務的全部sql語句的結果可被全部提交或者全部回滾。一個事務由第一個可執(zhí)行sql語句開始,以提交或回滾結束,可以是顯式的,也可是隱式的(執(zhí)行ddl語句)。

在執(zhí)行一個sql語句出現(xiàn)錯誤時,該語句所有影響被回滾,好像該語句沒有被執(zhí)行一樣,但它不會引起當前事務先前的工作的丟失。

 

2.           oracle的事務管理

    在oracle中一個事務是由一個可執(zhí)行的sql語句開始,一個可執(zhí)行sql語句產(chǎn)生對實例的調用。在事務開始時,被賦給一個可用回滾段,記錄該事務的回滾項。一個事務以下列任何一個出現(xiàn)而結束。

l    當commit或rollback(沒有savepoint子句)語句發(fā)出。

l    一個ddl語句被執(zhí)行。在ddl語句執(zhí)行前、后都隱式地提交。

l    用戶撤消對oracle的連接(當前事務提交)。

l    用戶進程異常中止(當前事務回滾)。

 

1)            提交事務

     提交一事務,即將在事務中由sql語句所執(zhí)行的改變永久化。在提交前,oracle已有下列情況:

l    在sga的回滾段緩沖區(qū)已生成回滾段記錄,回滾信息包含有所修改值的老值。

l    在sga的日志緩沖區(qū)已生成日志項。這些改變在事務提交前可進入磁盤。

l    對sga的數(shù)據(jù)庫緩沖區(qū)已作修改,這些修改在事務真正提交之前可進入磁盤。

在事務提交之后,有下列情況:

l        對于與回滾段相關的內部事務表記錄提交事務,并賦給一個相應的唯一系統(tǒng)修改號(scn),記錄在表中。

l        在sga的日志緩沖區(qū)中日志項由lgwr進程寫入到在線日志文件,這是構成提交事務的原子事務。

l        在行上和表上的封鎖被釋放。

l        該事務標志為完成 。

注意:對于提交事務的數(shù)據(jù)修改不必由dbwr后臺進程立即寫入數(shù)據(jù)文件,可繼續(xù)存儲在sga的數(shù)據(jù)庫緩沖區(qū)中,在最有效時將其寫入數(shù)據(jù)文件。

 

2)            回滾事務

     回滾事務的含義是撤消未提交事務中的sql語句所作的對數(shù)據(jù)修改。oralce允許撤消未提交的整個事務,也允許撤消部分。

在回滾整個事務(沒有引用保留點)時,有下列情況:

l        在事務中所有sql語句作的全部修改,利用相應的回滾段被撤消。

l        所有數(shù)據(jù)的事務封鎖被釋放。

l        事務結束。

當事務回滾到一保留點(具有savepoint)時,有下列情況:

l        僅在該保留點之后執(zhí)行的語句被撤消。

l        該指定的保留點仍然被保留,該保留點之后所建立的保留點被刪除。

l        自該保留點之后所獲取的全部表封鎖和行封鎖被釋放,但指定的保留點以前所獲取的全部數(shù)據(jù)封鎖繼續(xù)保持。

l        該事務仍可繼續(xù)。

 

3)   保留點

     保留點(savepoint)是在一事務范圍內的中間標志,經(jīng)常用于將一個長的事務劃分為小的部分。保留點可標志長事務中的任何點,允許可回滾該點之后的工作。在應用程序中經(jīng)常使用保留點;例如一過程包含幾個函數(shù),在每個函數(shù)前可建立一個保留點,如果函數(shù)失敗,很容易返回到每一個函數(shù)開始的情況。在回滾到一個保留點之后,該保持點之后所獲得的數(shù)據(jù)封鎖被釋放。

 

六、數(shù)據(jù)庫觸發(fā)器

1.         觸發(fā)器介紹

    數(shù)據(jù)庫觸發(fā)器(database trigger)是存儲在數(shù)據(jù)庫中的過程,當表被修改時它隱式地被激發(fā)(執(zhí)行)。在oracle中允許在對表發(fā)出insert、update或delete語句時隱式地執(zhí)行所定義的過程,這些過程稱為數(shù)據(jù)庫觸發(fā)器。觸發(fā)器存儲在數(shù)據(jù)庫中,并與所相關表分別存儲。觸發(fā)器僅可在表上定義。在許多情況中觸發(fā)器用于提供很高級的專用數(shù)據(jù)庫管理系統(tǒng),來補充oracle的標準功能。觸發(fā)器一般用于:

l        自動地生成導出的列值;

l        防止無效的事務;

l        實施更復雜的安全性檢查

l        在分布式數(shù)據(jù)庫中實施跨越結點的引用完整性;

l        實施復雜的事務規(guī)則;

l        提供透明事件日志;

l        提供高級的審計;

l        維護同步表復制;

l        收集關于存取表的統(tǒng)計。

注意:數(shù)據(jù)庫觸發(fā)器與sql*forms觸發(fā)器之間的差別。數(shù)據(jù)庫觸發(fā)器是定義在表上,存儲在數(shù)據(jù)庫中,當對表執(zhí)行insert、update或delete語句時被激發(fā),不管是誰或哪一應用發(fā)出。而sql*forms觸發(fā)器是sql*form應用的部分,僅當在指定sql*forms應用中執(zhí)行一個指定觸發(fā)器點時才被激發(fā)。

觸發(fā)器和說明性完整性約束都可用于約束數(shù)據(jù)的輸入,但它們之間有一定區(qū)別:

說明性完整性約束是關于數(shù)據(jù)庫總是為“真”的語句。一個完整性約束應用于表中已有數(shù)據(jù)和操縱表的任何語句。

而觸發(fā)器約束事務不可應用于在定義觸發(fā)器前已裝入的數(shù)據(jù),所以它不能保證表中全部數(shù)據(jù)服從該觸發(fā)器的規(guī)則。觸發(fā)器實施瞬時約束,即在數(shù)據(jù)改變時實施一約束。

 

2.觸發(fā)器的組成:

一個觸發(fā)器有三個基本部件:觸發(fā)事件或語句、觸發(fā)器的限制、觸發(fā)器動作。

觸發(fā)事件或語句:為引起觸發(fā)器激發(fā)的sql語句,是對指定表insert、update或delete語句。

 

觸發(fā)器限制:為一布爾表達式,當觸發(fā)器激發(fā)時該條件必須為true。觸發(fā)器的限制是用when子句來指定。

 

觸發(fā)器的動作:為一個pl/sql塊(過程),由sql語句和pl/sql語句組成。當觸發(fā)語句發(fā)出,觸發(fā)器的限制計算得true時,它被執(zhí)行。在觸發(fā)器動作的語句中,可使用觸發(fā)器的處理的當前行的列值(新值、老值),使用形式為:

new.列名                         引用新值

ole.列名                         引用老值

在定義觸發(fā)器時可指定觸發(fā)器動作執(zhí)行次數(shù):受觸發(fā)語句影響每一行執(zhí)行一次或是對觸發(fā)語句執(zhí)行一次。

對每一觸發(fā)語句可有四種類型觸發(fā)器:

行觸發(fā)器:對受觸發(fā)語句所影響的每一行,行觸發(fā)器激發(fā)一次。

語句觸發(fā)器:該類型觸發(fā)器對觸發(fā)語句執(zhí)行一次,不管其受影響行數(shù)。

定義觸發(fā)器可以指定觸發(fā)時間,指定激發(fā)器動作的執(zhí)行相對于觸發(fā)語句執(zhí)行之后或之前。

before觸發(fā)器:該觸發(fā)器執(zhí)行觸發(fā)器動作是在觸發(fā)語句執(zhí)行之前。

after觸發(fā)器:該觸發(fā)器執(zhí)行觸發(fā)器動作是在觸發(fā)語句執(zhí)行之后。

一個觸發(fā)器可處于兩種不同的方式:使能觸發(fā)器和使不能觸發(fā)器。

使能觸發(fā)器:只要當觸發(fā)語句發(fā)出,觸發(fā)器限制計算為true,這種類型的觸發(fā)器執(zhí)行其觸發(fā)動作。

使不能觸發(fā)器:這種觸發(fā)器即使其觸發(fā)語句被發(fā)出,觸發(fā)器限制計算為true,也不執(zhí)行觸發(fā)器動作。

觸發(fā)器的源代碼存儲在數(shù)據(jù)庫中,在第一次執(zhí)行時,觸發(fā)器的源代碼被編譯,存儲在共享池中。如果觸發(fā)器從共享池中擠了,再使用時必須再重新編譯。

 

七、分布處理和分布式數(shù)據(jù)庫

1.            簡介

    一個分布式數(shù)據(jù)庫在用戶面前為單個邏輯數(shù)據(jù)庫,但實際上是由存儲在多臺計算機上的一組數(shù)據(jù)庫組成。在幾臺計算機上的數(shù)據(jù)庫通過網(wǎng)絡可同時修改和存取,每一數(shù)據(jù)庫受它的局部的dbms控制。分布式數(shù)據(jù)庫中每一個數(shù)據(jù)庫服務器合作地維護全局數(shù)據(jù)庫的一致性。

在系統(tǒng)中的每一臺計算機稱為結點。如果一結點具有管理數(shù)據(jù)庫軟件,該結點稱為數(shù)據(jù)庫服務器。如果一個結點為請求服務器的信息的一應用,該結點稱為客戶。在oracle客戶,執(zhí)行數(shù)據(jù)庫應用,可存取數(shù)據(jù)信息和與用戶交互。在服務器,執(zhí)行oracle軟件,處理對oracle數(shù)據(jù)庫并發(fā)、共享數(shù)據(jù)存取。oracle允許上述兩部分在同一臺計算機上,但當客戶部分和服務器部分是由網(wǎng)連接的不同計算機上時,更有效。

分布處理是由多臺處理機分擔單個任務的處理。在oracle數(shù)據(jù)庫系統(tǒng)中分布處理的例子如:

客戶和服務器是位于網(wǎng)絡連接的不同計算機上。

單臺計算機上有多個處理器,不同處理器分別執(zhí)行客戶應用。

sql*net是oracle網(wǎng)絡接口,允許運行在網(wǎng)絡工作站的oracle工具和服務器上,可存取、修改、共享和存儲在其它服務器上的數(shù)據(jù)。saql*net可被認為是網(wǎng)絡通信的程序接口。sql*net利用通信協(xié)議和應用程序接口(api)為oarcle提供一個分布式數(shù)據(jù)庫和分布處理。

sql*net驅動器為在數(shù)據(jù)庫服務器上運行的oracle進程與oracle工具的用戶進程之間提供一個接口。

 參與分布式數(shù)據(jù)庫的每一服務器是分別地獨立地管理數(shù)據(jù)庫,好   像每一數(shù)據(jù)庫不是網(wǎng)絡化的數(shù)據(jù)庫。每一個數(shù)據(jù)庫獨立地被管理,稱為場地自治性。場地自治性有下列好處:

l        系統(tǒng)的結點可反映公司的邏輯組織。

l        由局部數(shù)據(jù)庫管理員控制局部數(shù)據(jù),這樣每一個數(shù)據(jù)庫管理員責任域要小一些,可更

好管理。

l        只要一個數(shù)據(jù)庫和網(wǎng)絡是可用,那么全局數(shù)據(jù)庫可部分可用。不會因一個數(shù)據(jù)庫的故   

障而停止全部操作或引起性能瓶頸。

l        故障恢復通常在單個結點上進行。

l        每個局部數(shù)據(jù)庫存在一個數(shù)據(jù)字典。

l        結點可獨立地升級軟件。

可從分布式數(shù)據(jù)庫的所有結點存取模式對象,因此正像非分布的局部的dbms,必須提供一種機制,可在局部數(shù)據(jù)庫中引用一個對象。分布式dbms必須提供一種命名模式,以致分布式數(shù)據(jù)庫中一個對象可在應用中唯一標識和引用。一般彩在層次結構的每一層實施唯一性。分布式dvms簡單地擴充層次命名模型,實施在網(wǎng)絡上唯一數(shù)據(jù)庫命名。因此一個對象的全局對象名保證在分布式數(shù)據(jù)庫內是唯一。

oracle允許在sql語句中使用佤對象名引用分布式數(shù)據(jù)庫中的模式對象(表、視圖和過程)。在oracle中,一個模式對象的全局名由三部分組成:包含對象的模式名、對象名、數(shù)據(jù)庫名、其形式如:

[email protected]

其中scott為模式名,emp為表名,@符號之后為數(shù)據(jù)庫名.

一個遠程查詢?yōu)橐徊樵?是從一個或多個遠程表中選擇信息,這些表駐留在同一個遠程結點.

一個分布式查詢可從兩個或多個結點檢索數(shù)據(jù).一個分布式更新可修改兩個或兩個以上結點的數(shù)據(jù).

一個遠程事務為一個事務,包含一人或多個遠程語句,它所引用的全部是在同一個遠程結點上.一個分布式事務中一個事務,包含一個或多個語句修改分布式數(shù)據(jù)庫的兩個或多個不同結點的數(shù)據(jù).

在分布式數(shù)據(jù)庫中,事務控制必須在網(wǎng)絡上直轄市,保證數(shù)據(jù)一致性.兩階段提交機制保證參與分布式事務的全部數(shù)據(jù)庫服務器是全部提交或全部回滾事務中的語句.

oracle分布式數(shù)據(jù)庫系統(tǒng)結構可由oracle數(shù)據(jù)庫管理員為終端用戶和應用提供位置透明性,利用視圖、同義詞、過程可提供oracle分布式數(shù)據(jù)庫系統(tǒng)中的位置透明性.

oracle允許在select(查詢)、insert、update、delete、select…for update和lock table語句中引用遠程數(shù)據(jù)。對于查詢,包含有連接、聚合、子查詢和select …for  update,可引用本地的、遠程的表和視圖。對于update、insert、delete和lock table語句可引用本地的和遠程的表。注意在引用long和long raw列、序列、修改表和封鎖表時,必須位于同一個結點。oracle不允許作遠程ddl語句。

在單場地或分布式數(shù)據(jù)庫中,所有事務都是用commit或rollback語句中止。oracle提供兩種機制實現(xiàn)分布式數(shù)據(jù)庫中表重復的透明性:表快照提供異步的表重復;觸發(fā)器實現(xiàn)同步的表的重復。在兩種情況下,都實現(xiàn)了對表重復的透明性。

 

2.         分布式數(shù)據(jù)庫全局名與數(shù)據(jù)庫鏈

1)   分布式數(shù)據(jù)庫全局名:每一個數(shù)據(jù)庫有一個唯一的全局名,由兩部分組成:數(shù)據(jù)庫名(小于等于8字符)和網(wǎng)絡域。全局數(shù)據(jù)庫名的網(wǎng)絡域成分必須服從標準互聯(lián)網(wǎng)規(guī)范。域名中的層次由符號“.”分開,域名的次序由葉至根,從左至右。

2)   數(shù)據(jù)庫鏈:為對過程數(shù)據(jù)庫定義的一路徑。數(shù)據(jù)庫鏈對分布式數(shù)據(jù)庫的用戶是透明的,數(shù)據(jù)庫鏈的名字與鏈所指向的數(shù)據(jù)庫的全局名相同。其由二部分組成:遠程賬號和數(shù)據(jù)庫串。例建立數(shù)據(jù)庫鏈的形式:

creat public datebase link sale。division3。acme。com

connect to guest identified by password

using‘db串’;

其中:sales。divisin3。acme。com為定義的鏈名;guest/password 為遠程數(shù)據(jù)庫的用戶賬號和口令;db串用于遠程連接。由賬號和db串構成完全路徑。如果只有一個則為部分路徑。

有三種數(shù)據(jù)庫鏈可用于決定用戶對全部對象名的引用:

專用數(shù)據(jù)庫鏈:為一指定用戶建立。專用數(shù)據(jù)庫鏈僅鏈的主人可使用。在sql語句中用于指定一全局對象名或者在持有者的視圖過程定義中使用。

公用數(shù)據(jù)庫鏈:為特殊的用戶組public建立。公用數(shù)據(jù)庫鏈可為任何用戶使用,在sql語句中用于指定一個全局對象名或對象定義。

網(wǎng)絡數(shù)據(jù)鏈:由網(wǎng)絡域服務器建立和管理,可為網(wǎng)絡中的任何數(shù)據(jù)庫的任何用戶使用,可在sql語句中指定全局對象名或對象定義中使用。注意:當前網(wǎng)絡域服務器對oracle不能用,所以網(wǎng)絡數(shù)據(jù)庫鏈不可用。

 

3.         表快照

oracle的表快照特征允許一個主表在分布式數(shù)據(jù)庫的其它結點進行復制。只允許修改主表,而復制只可讀。主表達式每一個復制稱為一個快照。快照異步的刷新,反映主表的一個最近事務一致狀態(tài)。

一個快照可為表的完全拷貝或者為表的一個子集,由引用一個或多個主表、視圖或其它快照的分布式查詢所定義。包含主表的數(shù)據(jù)庫稱為主數(shù)據(jù)庫。

快照有簡單快照和復雜快照。簡單快照的每行是基于單個遠程表中的一行。所以定義簡單快照的查詢中不能有groub by或connect by子句,或子查詢、連接或集合操作。如果在快照定義的查詢中包含有上述子句或操作,這種快照稱為復雜快照。

在快照建立時,oracle在快照的模式中建立幾種內部對象:

在快照結點,oracle建立一基表用于存儲由快照定義的查詢所檢索的行,然后為該表建立一個只讀的視圖,并為遠程主表建立一視圖,該視圖用于新快照。

一個快照周期地被刷新,反映它的主表的當前情況。為了刷新一快照,快照定義查詢是被發(fā)出,其查詢結果想在存儲在快照中,代替以前的快照數(shù)據(jù)。

當快照為簡單快照時,可以由快照日志來刷新,這樣可加快刷新處理??煺杖罩臼窃谥鞅頂?shù)據(jù)庫中的一表,與主表相關。oracle使用快照日志跟蹤主表中已修改的行。當基于主表的簡單快照刷新時,僅需要快照日志的相應行來刷新快照,這種刷新稱為快速刷新。

 

 

 

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 阳东县| 桃江县| 乐陵市| 铁岭县| 图木舒克市| 镇康县| 通河县| 吐鲁番市| 青河县| 巴南区| 中西区| 小金县| 普兰县| 财经| 晋州市| 岚皋县| 南郑县| 扶风县| 赞皇县| 大英县| 洮南市| 赫章县| 固镇县| 永仁县| 闻喜县| 松溪县| 日照市| 教育| 金山区| 淮南市| 长春市| 虹口区| 建湖县| 永春县| 福安市| 南部县| 曲水县| 西和县| 政和县| 调兵山市| 延寿县|