oracle公司自86年推出版本5開始,系統具有分布數據庫處理功能.88年推出版本6,oracle rdbms(v6.0)可帶事務處理選項(tpo),提高了事務處理的速度.1992年推出了版本7,在oracle rdbms中可帶過程數據庫選項(procedural database option)和并行服務器選項(parallel server option),稱為oracle7數據庫管理系統,它釋放了開放的關系型系統的真正潛力。oracle7的協同開發環境提供了新一代集成的軟件生命周期開發環境,可用以實現高生產率、大型事務處理及客戶/服務器結構的應用系統。協同開發環境具有可移植性,支持多種數據來源、多種圖形用戶界面及多媒體、多民族語言、case等協同應用系統。
oracle系統是由以rdbms為核心的一批軟件產品構成.
oracle公司于1979年,首先推出基于sql標準的關系數據庫產品,可在100多種硬件平臺上運行(所括微機、工作站、小型機、中型機和大型機),支持很多種操作系統。用戶的oracle應用可方便地從一種計算機配置移至另一種計算機配置上。oracle的分布式結構可將數據和應用駐留在多臺計算機上,而相互間的通信是透明的。1992年6月oracle公司推出的oracle7協同服務器數據庫,使關系數據庫技術邁上了新臺階。根據idg(國際數據集團)1992年全球unix數據庫市場報告,oracle占市場銷售量50%。它之所以倍受用戶喜愛是因為它有以下突出的特點:
支持大數據庫、多用戶的高性能的事務處理。oracle支持最大數據庫,其大小可到幾百千兆,可充分利用硬件設備。支持大量用戶同時在同一數據上執行各種數據應用,并使數據爭用最小,保證數據一致性。系統維護具有高的性能,oracle每天可連續24小時工作,正常的系統操作(后備或個別計算機系統故障)不會中斷數據庫的使用。可控制數據庫數據的可用性,可在數據庫級或在子數據庫級上控制。
oracle遵守數據存取語言、操作系統、用戶接口和網絡通信協議的工業標準。所以它是一個開放系統,保護了用戶的投資。美國標準化和技術研究所(nist)對oracle7 server進行檢驗,100%地與ansi/iso sql89標準的二級相兼容。
支持分布式數據庫和分布處理。oracle為了充分利用計算機系統和網絡,允許將處理分為數據庫服務器和客戶應用程序,所有共享的數據管理由數據庫管理系統的計算機處理,而運行數據庫應用的工作站集中于解釋和顯示數據。通過網絡連接的計算機環境,oracle將存放在多臺計算機上的數據組合成一個邏輯數據庫,可被全部網絡用戶存取。分布式系統像集中式數據庫一樣具有透明性和數據一致性。
具有可移植性、可兼容性和可連接性。由于oracle軟件可在許多不同的操作系統上運行,以致oracle上所開發的應用可移植到任何操作系統,只需很少修改或不需修改。oracle軟件同工業標準相兼容,包括許多工業標準的操作系統,所開發應用系統可在任何操作系統上運行。可連接性是指oralce允許不同類型的計算機和操作系統通過網絡可共享信息。
二、oracle數據庫系統的體系結構
oracle數據庫系統為具有管理oracle數據庫功能的計算機系統。每一個運行的oracle數據庫與一個oracle實例(instance)相聯系。一個oracle實例為存取和控制一數據庫的軟件機制。每一次在數據庫服務器上啟動一數據庫時,稱為系統全局區(system global area)的一內存區(簡稱sga)被分配,有一個或多個oracle進程被啟動。該sga 和 oracle進程的結合稱為一個oracle數據庫實例。一個實例的sga和進程為管理數據庫數據、為該數據庫一個或多個用戶服務而工作。
在oracle系統中,首先是實例啟動,然后由實例裝配(mount)一數據庫。在松耦合系統中,在具有oracle parallel server 選項時,單個數據庫可被多個實例裝配,即多個實例共享同一物理數據庫。
oracle實例的進程結構和內存結構
進程結構
進程是操作系統中的一種機制,它可執行一系列的操作步。在有些操作系統中使用作業(job)或任務(task)的術語。一個進程通常有它自己的專用存儲區。oracle進程的體系結構設計使性能最大。
oracle實例有兩種類型:單進程實例和多進程實例。
單進程oracle(又稱單用戶oracle)是一種數據庫系統,一個進程執行全部oracle代碼。由于oracle部分和客戶應用程序不能分別以進程執行,所以oracle的代碼和用戶的數據庫應用是單個進程執行。
在單進程環境下的oracle 實例,僅允許一個用戶可存取。例如在ms-dos上運行oracle 。
多進程oracle實例(又稱多用戶oracle)使用多個進程來執行oracle的不同部分,對于每一個連接的用戶都有一個進程。
在多進程系統中,進程分為兩類:用戶進程和oracle進程。當一用戶運行一應用程序,如pro*c程序或一個oracle工具(如sql*plus),為用戶運行的應用建立一個用戶進程。oracle進程又分為兩類:服務器進程和后臺進程。服務器進程用于處理連接到該實例的用戶進程的請求。當應用和oracele是在同一臺機器上運行,而不再通過網絡,一般將用戶進程和它相應的服務器進程組合成單個的進程,可降低系統開銷。然而,當應用和oracle運行在不同的機器上時,用戶進程經過一個分離服務器進程與oracle通信。它可執行下列任務:
對應用所發出的sql語句進行語法分析和執行。
從磁盤(數據文件)中讀入必要的數據塊到sga的共享數據庫緩沖區(該塊不在緩沖區時),將結果返回給應用程序處理。
系統為了使性能最好和協調多個用戶,在多進程系統中使用一些附加進程,稱為后臺進程。在許多操作系統中,后臺進程是在實例啟動時自動地建立。一個oracle實例可以有許多后臺進程,但它們不是一直存在。后臺進程的名字為:
dbwr 數據庫寫入程序
lgwr 日志寫入程序
ckpt 檢查點
smon 系統監控
pmon 進程監控
arch 歸檔
reco 恢復
lckn 封鎖
dnnn 調度進程
snnn 服務器
每個后臺進程與oracle數據庫的不同部分交互。
下面對后臺進程的功能作簡單介紹:
dbwr進程:該進程執行將緩沖區寫入數據文件,是負責緩沖存儲區管理的一個oracle后臺進程。當緩沖區中的一緩沖區被修改,它被標志為“弄臟”,dbwr的主要任務是將“弄臟”的緩沖區寫入磁盤,使緩沖區保持“干凈”。由于緩沖存儲區的緩沖區填入數據庫或被用戶進程弄臟,未用的緩沖區的數目減少。當未用的緩沖區下降到很少,以致用戶進程要從磁盤讀入塊到內存存儲區時無法找到未用的緩沖區時,dbwr將管理緩沖存儲區,使用戶進程總可得到未用的緩沖區。
oracle采用lru(least recently used)算法(最近最少使用算法)保持內存中的數據塊是最近使用的,使i/o最小。在下列情況預示dbwr 要將弄臟的緩沖區寫入磁盤:
當一個服務器進程將一緩沖區移入“弄臟”表,該弄臟表達到臨界長度時,該服務進程將通知dbwr進行寫。該臨界長度是為參數db-block-write-batch的值的一半。
當一個服務器進程在lru表中查找db-block-max-scan-cnt緩沖區時,沒有查到未用的緩沖區,它停止查找并通知dbwr進行寫。
出現超時(每次3秒),dbwr 將通知本身。
當出現檢查點時,lgwr將通知dbwr
在前兩種情況下,dbwr將弄臟表中的塊寫入磁盤,每次可寫的塊數由初始化參數db-block-write-batch所指定。如果弄臟表中沒有該參數指定塊數的緩沖區,dbwr從lur表中查找另外一個弄臟緩沖區。
如果dbwr在三秒內未活動,則出現超時。在這種情況下dbwr對lru表查找指定數目的緩沖區,將所找到任何弄臟緩沖區寫入磁盤。每當出現超時,dbwr查找一個新的緩沖區組。每次由dbwr查找的緩沖區的數目是為寢化參數db-block-write-batch的值的二倍。如果數據庫空運轉,dbwr最終將全部緩沖區存儲區寫入磁盤。
在出現檢查點時,lgwr指定一修改緩沖區表必須寫入到磁盤。dbwr將指定的緩沖區寫入磁盤。
在有些平臺上,一個實例可有多個dbwr。在這樣的實例中,一些塊可寫入一磁盤,另一些塊可寫入其它磁盤。參數db-writers控制dbwr進程個數。
lgwr進程:該進程將日志緩沖區寫入磁盤上的一個日志文件,它是負責管理日志緩沖區的一個oracle后臺進程。lgwr進程將自上次寫入磁盤以來的全部日志項輸出,lgwr輸出:
當用戶進程提交一事務時寫入一個提交記錄。
每三秒將日志緩沖區輸出。
當日志緩沖區的1/3已滿時將日志緩沖區輸出。
當dbwr將修改緩沖區寫入磁盤時則將日志緩沖區輸出。
lgwr進程同步地寫入到活動的鏡象在線日志文件組。如果組中一個文件被刪除或不可用,lgwr 可繼續地寫入該組的其它文件。
日志緩沖區是一個循環緩沖區。當lgwr將日志緩沖區的日志項寫入日志文件后,服務器進程可將新的日志項寫入到該日志緩沖區。lgwr 通常寫得很快,可確保日志緩沖區總有空間可寫入新的日志項。
注意:有時候當需要更多的日志緩沖區時,lwgr在一個事務提交前就將日志項寫出,而這些日志項僅當在以后事務提交后才永久化。