ORACLE 培訓教程(1)

ORACLE系統概述

 

ORACLE公司自86年推出版本5開始,系統具有分佈數據庫處理功能.88年推出版本6,ORACLE RDBMS(V6.0)可帶事務處理選項(TPO),提高了事務處理的速度.1992年推出了版本7,在ORACLE RDBMS中可帶過程數據庫選項(procedural database option)和並行服務器選項(parallel server option),稱爲ORACLE7數據庫管理系統,它釋放了開放的關係型系統的真正潛力。ORACLE7的協同開發環境提供了新一代集成的軟件生命週期開發環境,可用以實現高生產率、大型事務處理及客戶/服務器結構的應用系統。協同開發環境具有可移植性,支持多種數據來源、多種圖形用戶界面及多媒體、多民族語言、CASE等協同應用系統。

 

一、    ORACLE系統

 

1.         ORACLE產品結構及組成

ORACLE系統是由以RDBMS爲核心的一批軟件產品構成,其產品結構輪廓下圖所示:

SQL*PLUS

ORACLE*FORMS

ORACLE*REPORT

SQL*GRAPHIC

SQL*CALC

用戶編制的程序

程序接口

SQL執行程序)

ORACLE內核

RDBMS

操作系統

數據字典

DD

數據庫DB

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


2.         ORACLE系統特點

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

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

l        ORACLE遵守數據存取語言、操作系統、用戶接口和網絡通信協議的工業標準。所以它是一個開放系統,保護了用戶的投資。美國標準化和技術研究所(NIST)對ORACLE7 SERVER進行檢驗,100%地與ANSI/ISO SQL89標準的二級相兼容。

l        實施安全性控制和完整性控制。ORACLE爲限制各監控數據存取提供系統可靠的安全性。ORACLE實施數據完整性,爲可接受的數據指定標準。

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

l        具有可移植性、可兼容性和可連接性。由於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 選項時,單個數據庫可被多個實例裝配,即多個實例共享同一物理數據庫。

 

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

1)           進程結構

進程是操作系統中的一種機制,它可執行一系列的操作步。在有些操作系統中使用作業(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通信。它可執行下列任務:

l    對應用所發出的SQL語句進行語法分析和執行。

l    從磁盤(數據文件)中讀入必要的數據塊到SGA的共享數據庫緩衝區(該塊不在緩衝區時)。

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

系統爲了使性能最好和協調多個用戶,在多進程系統中使用一些附加進程,稱爲後臺進程。在許多操作系統中,後臺進程是在實例啓動時自動地建立。一個ORACLE實例可以有許多後臺進程,但它們不是一直存在。後臺進程的名字爲:

DBWR  數據庫寫入程序

LGWR 日誌寫入程序

CKPT 檢查點

SMON 系統監控

PMON  進程監控

ARCH 歸檔

RECO 恢復

LCKn 封鎖

Dnnn 調度進程

Snnn 服務器

每個後臺進程與ORACLE數據庫的不同部分交互。

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

DBWR進程:該進程執行將緩衝區寫入數據文件,是負責緩衝存儲區管理的一個ORACLE後臺進程。當緩衝區中的一緩衝區被修改,它被標誌爲“弄髒”,DBWR的主要任務是將“弄髒”的緩衝區寫入磁盤,使緩衝區保持“乾淨”。由於緩衝存儲區的緩衝區填入數據庫或被用戶進程弄髒,未用的緩衝區的數目減少。當未用的緩衝區下降到很少,以致用戶進程要從磁盤讀入塊到內存存儲區時無法找到未用的緩衝區時,DBWR將管理緩衝存儲區,使用戶進程總可得到未用的緩衝區。

ORACLE採用LRU(LEAST RECENTLY USED)算法(最近最少使用算法)保持內存中的數據塊是最近使用的,使I/O最小。在下列情況預示DBWR 要將弄髒的緩衝區寫入磁盤:

l        當一個服務器進程將一緩衝區移入“弄髒”表,該弄髒表達到臨界長度時,該服務進程將通知DBWR進行寫。該臨界長度是爲參數DB-BLOCK-WRITE-BATCH的值的一半。

l        當一個服務器進程在LRU表中查找DB-BLOCK-MAX-SCAN-CNT緩衝區時,沒有查到未用的緩衝區,它停止查找並通知DBWR進行寫。

l        出現超時(每次3秒),DBWR 將通知本身。

l        當出現檢查點時,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輸出:

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

l    每三秒將日誌緩衝區輸出。

l    當日志緩衝區的1/3已滿時將日誌緩衝區輸出。

l    DBWR將修改緩衝區寫入磁盤時則將日誌緩衝區輸出。

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

日誌緩衝區是一個循環緩衝區。當LGWR將日誌緩衝區的日誌項寫入日誌文件後,服務器進程可將新的日誌項寫入到該日誌緩衝區。LGWR 通常寫得很快,可確保日誌緩衝區總有空間可寫入新的日誌項。

注意:有時候當需要更多的日誌緩衝區時,LWGR在一個事務提交前就將日誌項寫出,而這些日誌項僅當在以後事務提交後才永久化。

ORACLE使用快速提交機制,當用戶發出COMMIT語句時,一個COMMIT記錄立即放入日誌緩衝區,但相應的數據緩衝區改變是被延遲,直到在更有效時纔將它們寫入數據文件。當一事務提交時,被賦給一個系統修改號(SCN),它同事務日誌項一起記錄在日誌中。由於SCN記錄在日誌中,以致在並行服務器選項配置情況下,恢復操作可以同步。

 

CKPT進程:該進程在檢查點出現時,對全部數據文件的標題進行修改,指示該檢查點。在通常的情況下,該任務由LGWR執行。然而,如果檢查點明顯地降低系統性能時,可使CKPT進程運行,將原來由LGWR進程執行的檢查點的工作分離出來,由CKPT進程實現。對於許多應用情況,CKPT進程是不必要的。只有當數據庫有許多數據文件,LGWR在檢查點時明顯地降低性能才使CKPT運行。CKPT進程不將塊寫入磁盤,該工作是由DBWR完成的。

初始化參數CHECKPOINT-PROCESS控制CKPT進程的使能或使不能。缺省時爲FALSE,即爲使不能。

 

SMON進程:該進程實例啓動時執行實例恢復,還負責清理不再使用的臨時段。在具有並行服務器選項的環境下,SMON對有故障CPU或實例進行實例恢復。SMON進程有規律地被呼醒,檢查是否需要,或者其它進程發現需要時可以被調用。

 

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

PMON有規律地被呼醒,檢查是否需要,或者其它進程發現需要時可以被調用。

 

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

當一數據庫服務器的RECO後臺進程試圖建立同一遠程服務器的通信,如果遠程服務器是不可用或者網絡連接不能建立時,RECO自動地在一個時間間隔之後再次連接。

RECO後臺進程僅當在允許分佈式事務的系統中出現,而且DISTRIBUTED TRANSACTIONS參數是大於0。

 

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

 

LCKn進程:是在具有並行服務器選件環境下使用,可多至10個進程(LCK0,LCK1……,LCK9),用於實例間的封鎖。

 

Dnnn進程(調度進程):該進程允許用戶進程共享有限的服務器進程(SERVER PROCESS)。沒有調度進程時,每個用戶進程需要一個專用服務進程(DEDICATEDSERVER PROCESS)。對於多線索服務器(MULTI-THREADED SERVER)可支持多個用戶進程。如果在系統中具有大量用戶,多線索服務器可支持大量用戶,尤其在客戶_服務器環境中。

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

 

 

 

2)、ORACLE內存結構

ORACLE在內存存儲下列信息:

l    執行的程序代碼。

l    連接的會話信息

l    程序執行期間所需數據和共享的信息

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

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

l    軟件代碼區

l    系統全局區,包括數據庫緩衝存儲區、日誌緩衝區和共享池.

l    程序全局區,包括棧區和數據區.

l    排序區

 

軟件代碼區

用於存儲正在執行的或可以執行的程序代碼。

軟件區是隻讀,可安裝成共享或非共享。ORACLE系統程序是可共享的,以致多個ORACLE用戶可存取它,而不需要在內存有多個副本。用戶程序可以共享也可以不共享。

 

系統全局區

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

 

程序全局區

PGA是一個內存區,包含單個進程的數據和控制信息,所以又稱爲進程全局區(PROCESS GLOBAL AREA)。

 

排序區

排序需要內存空間,ORACLE利用該內存排序數據,這部分空間稱爲排序區。排序區存在於請求排序的用戶進程的內存中,該空間的大小爲適就排序數據量的大小,可增長,但受初始化參數SORT-AREA-SIZER所限制。

 

2.         ORACLE的配置方案

所有連接到ORACLE的用戶必須執行兩個代碼模塊可存取一個ORACLE數據庫實例:

l        應用或ORACLE工具:一數據庫用戶執行一數據庫應用或一個ORACLE工具,可向ORACLE數據庫發出SQL語句。

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

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

l        對於每一個用戶,其數據庫應用程序和服務器程序組合成單個用戶進程

l        對於每一個用戶,其數據庫應用是由用戶進程所運行,並有一個專用服務器進程。執行ORACLE服務器的代碼。這樣的配置稱爲專用服務器體系結構

l        執行數據庫應用的進程不同於執行ORACLE服務器代碼的進程,而且每一個服務器進程(執行ORACLE服務器代碼)可服務於多個用戶進程,這樣的配置稱爲多線索服務器體系結構。

 

1) USER/SERVER進程相結合的結構

在這種配置下,數據庫應用和ORACLE服務器程序是在同一個進程中運行,該進程稱爲用戶進程。

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

 

2) 使用專用服務器進程的系統結構

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

 

3) 多線索服務器的系統結構

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

 

該系統中需要下列類型的進程:

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

l    一個或多個調度進程

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

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

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

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

ORACLE根據請求隊列的長度可動態地調整共享服務器進程。可建立的共享服務器進程將請求放到請求隊列。一個用戶請求是對數據庫的一次程序接口調用,爲SQL語句。在SGA中請求隊列對實例的全部調度進程是公用的。服務器進程爲新請求檢查公用請求隊列,按先進先出的原則從隊列檢出一個請求,然後爲完成該請求對數據庫作必要的調用。共享服務器進程將響應放在調度進程的響應隊列。每一個調度進程在SGA中有自己的響應隊列,每個調度進程負責將完成的請求回送給相應的用戶進程。

 

3.ORACLE運行

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

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

(1)    數據庫服務器計算機當前正在運行ORACLE(後臺進程)。

(2)    在一客戶工作站運行一個數據庫應用(爲用戶進程),如SQL*PLUS。客戶應用使用SQL*NET DRIVER建立對服務器的連接。

(3)    數據庫服務器計算機當前正運行合適的SQL*NET DRIVER,該機上接收器進程檢出客戶數據庫應用的連接請求,並在該機上爲用戶進程建立專用服務器進程。

(4)    用戶發出單個SQL語句。

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

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

l    如果在共享池中沒有一個SQL區包含有相同的SQL語句時,在共享池中爲該語句分配一新的共享SQL區。

在每一種情況,在會話的PGA中建立一個專用SQL區,專用服務器進程檢查用戶對查詢數據的存取權限。

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

(7) 服務器進程執行存儲在共享SQL區中的SQL語句。數據首先在SGA中修改,由DBWR進程在最有效時將它寫入磁盤。LGWR進程在在線日誌文件中記錄用戶提交請求的事務。

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

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

 

 

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

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

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

(2)    在一客戶工作站運行一數據庫應用(在一用戶進程中)。客戶應用合適的SQL*NET驅動器試圖建立到數據庫服務器計算機的連接。

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

(4)    用戶發出單個SQL語句

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

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

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

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

 

4.數據庫結構和空間管理

一個ORACLE數據庫是數據的集合,被處理成一個單位。一個ORACLE數據庫有一個物理結構和一個邏輯結構。

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

邏輯數據庫結構是用戶所涉及的數據庫結構。一個ORACLE數據庫的邏輯結構由下列因素決定:

l    一個或多個表空間

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

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

 

1)           物理結構

 

(1)    數據文件

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

l    一個數據文件僅與一個數據庫聯繫。

l    一旦建立,數據文件不能改變大小

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

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

 

(2)    日誌文件

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

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

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

 

(3)    控制文件

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

l    數據庫名;

l    數據庫數據文件和日誌文件的名字和位置;

l    數據庫建立日期。

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

每一次ORACLE數據庫的實例啓動時,它的控制文件用於標識數據庫和日誌文件,當着手數據庫操作時它們必須被打開。當數據庫的物理組成更改時,ORACLE自動更改該數據庫的控制文件。數據恢復時,也要使用控制文件。

 

2)           邏輯結構

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

(1)    表空間

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

l    控制數據庫數據的磁盤分配。

l    將確定的空間份額分配給數據庫用戶。

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

l    執行部分數據庫後備或恢復操作。

l    爲提高性能,跨越設備分配數據存儲。

數據庫、表空間和數據文件之間的關係如下圖所示:

                                      Database

  SYSTEM       DATA

  Tablespace      Tablespace

 

 

 

 


                      DTATAFILE1                

                      (2MB)              DATAFILE2           

                                         (2MB)              DATAFILE3

                                                            (2MB)

 

                             Driver1               Driver2

 

。每個數據庫可邏輯劃分爲一個或多個表空間

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

 

每一個ORACLE數據庫包含有一個名爲SYSTEM的表空間,在數據庫建立是自動建立。在該表空間中總包含有整個數據庫的數據字典表。最小的數據庫可只需要SYSTEM表空間。該表空間必須總是在線。表和存儲的PL/SQL程序單元(過程、函數、包和觸發器)的全部存儲數據是存儲在SYSTEM表空間中。如果這些PL/SQL對象是爲數據庫建的,DBA在SYSTEM表空間中需要規劃這些對象所需要的空間。

表空間利用增加數據文件擴大表空間,表空間的大小爲組成該表空間的數據文件大小的和。

DBA可以使ORACLE數據庫中任何表空間(除SYSTEM表空間外)在線(ONLINE)或離線(OFFLINE)。表空間通常是在線,以致它所包含的數據對數據庫用戶是可用的。當表空間爲離線時,其數據不可使用。在下列情況下,DBA可以使其離線。

。使部分數據不可用,而剩餘的部分允許正常存取

。執行離線的表空間後備

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

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

在數據字典中記錄表空間的狀態,在線還是離線。如果在數據庫關閉時一表空間爲離線,那麼在下次數據庫裝配和重新打開後,它仍然保持離線。

當出現某些錯誤時,一個表空間可自動地由在線改變爲離線。通過使用多個表空間,將不同類型的數據分開,更方便DBA來管理數據庫。

ORACLE數據庫中一表空間是由一個或多個物理數據文件組成,一個數據文件只可與一個表空間想聯繫。當爲一表空間建立一數據文件時,ORACLE建立該文件,分配指定的磁盤空間容量。在數據文件初時建立後,所分配的磁盤不包含任何數據。表空間可以在線或離線。在ORACLE中還允許單獨數據文件在線或離線。

 

(2)    段、範圍和數據塊

ORACLE通過段、範圍和數據塊邏輯數據結構可更細地控制磁盤空間的使用。

 

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

數據段:對於每一個非聚集的表有一數據段,表的所有數據存放在該段。每一聚集有一個數據段,聚集中每一個表的數據存儲在該段中。

索引段:每一個索引有一索引段,存儲索引數據。

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

臨時段:當一個SQL語句需要臨時工作區時,由ORACLE建立。當語句執行完畢,臨時段的範圍退回給系統。

ORACLE對所有段的空間分配,以範圍爲單位。

 

範圍

一個範圍(EXTENT)是數據庫存儲空間分配的一個邏輯單位,它由連續數據塊所組成。每一個段是由一個或多個範圍組成。當一段中間所有空間已完全使用時,ORACLE爲該段分配一個新的範圍。

爲了維護的目的,在數據庫的每一段含有段標題塊(segment header block)說明段的特徵以及該段中的範圍目錄。

 

數據塊

數據塊(data block)是ORACLE管理數據文件中存儲空間的單位,爲數據庫使用的I/O的最小單位,其大小可不同於操作系統的標準I/O塊大小。

 

 

數據塊的格式:

公用的變長標題

表目錄

行目錄

未用空間

行數據

 

(3)    模式和模式對象

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

 

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

 

視圖

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

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

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

引入視圖有下列好處:

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

。隱藏數據複雜性。

。爲用戶簡化命令

。爲基本表的數據提供另一種觀點。

。可將應用隔離基本表定義的修改

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

。可用於保存複雜查詢。

 

聚集

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

 

索引

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

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

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

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

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

索引段範圍的分配常駐該索引段的存儲參數控制。

其數據塊中未用空間可受該段的PCTFREE參數設置所控制。

 

序列生成器

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

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

 

同義詞

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

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

l        爲分佈式數據庫的遠程對象提供位置透明性。

l        爲用戶簡化SQL語句。

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

 

雜湊

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

 

程序單元

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

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

 

數據庫鏈

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

 

三、數據庫和實例的啓動和關閉

一個ORACLE數據庫沒有必要對所有用戶總是可用,數據庫管理員可啓動數據庫,以致它被打開。在數據庫打開情況下,用戶可存取數據庫中的信息。當數據庫不使用時,DBA可關閉它,關閉後的數據庫,用戶不能存取其信息。

數據庫的啓動和關閉是非常重要的管理功能,通過以INTERNAL連接到ORACLE的能力來保護。以INTERNAL 連接到ORACLE需要有下列先決條件:

該用戶的操作系統賬號具有使用INTERNAL連接的操作系統特權。

INTERNAL數據庫有一口令,該用戶知道其口令。

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

 

1.         數據庫啓動

     啓動數據庫並使它可用有三步操作:

l    啓動一個實例;

l    裝配數據庫

l    打開數據庫

 

1)            啓動一個實例

啓動一實例的處理包含分配一個SGA(數據庫信息使用的內存共享區)和後臺進程的建立。實例起動的執行先於該實例裝配一數據庫。如果僅啓動實例,則沒有數據庫與內存儲結構和進程相聯繫。

 

2)            裝配一數據庫

裝配數據庫是將一數據庫與已啓動的實例相聯。當實例安裝一數據庫之後,該數據庫保持關閉,僅DBA可存取。

 

3)            打開一數據庫

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

 

2.         數據庫和實例的關閉

 

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

 

1)            關閉數據庫

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

 

2)            卸下數據庫

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

 

3)            停止實例

停止數據庫的最後一步是停止實例。當實例停止後,SAG是從內存中撤消,後臺進程被中止。

 

3.         初始化參數文件

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

l    一個實例所啓動的數據庫名字

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

l    在填滿在線日誌文件後作什麼;

l    數據庫控制文件的名字和位置;

l    在數據庫中專用回滾段的名字。

 

 

四、數據字典的使用

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

l    ORACLE用戶的名字;

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

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

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

l    列的缺省值;

l    有關數據庫中對象的空間分佈及當前使用情況;

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

l    其它一般的數據庫信息。

可用SQL存取數據字典,由於數據字典爲只讀,允許查詢。

 

1.         數據字典的結構

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

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

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

 

2.         數據字典的使用

當數據庫打開時,數據字典總是可用,它駐留在SYSTEM表空間中。數據字典包含視圖集,在許多情況下,每一視圖集有三種視圖包含有類似信息,彼此以 前綴 相區別,前綴 USER、ALL和DBA。

l    前綴爲USER的視圖,爲用 視圖,是在用戶的模式內。

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

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

在數據庫中ORACLE還維護了一組虛表記錄當前數據庫的活動,這些表稱爲動態性能表。動態性能表不是真正的表,許多用戶不能存取,DBA可查詢這些表,可以建立視圖,給其它用戶授予存取視圖權。

 

五、事務管理

1.            事務

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

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

 

2.           ORACLE的事務管理

    在ORACLE中一個事務是由一個可執行的SQL語句開始,一個可執行SQL語句產生對實例的調用。在事務開始時,被賦給一個可用回滾段,記錄該事務的回滾項。一個事務以下列任何一個出現而結束。

l    COMMIT或ROLLBACK(沒有SAVEPOINT子句)語句發出。

l    一個DDL語句被執行。在DDL語句執行前、後都隱式地提交。

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

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

 

1)            提交事務

     提交一事務,即將在事務中由SQL語句所執行的改變永久化。在提交前,ORACLE已有下列情況:

l    SGA的回滾段緩衝區已生成回滾段記錄,回滾信息包含有所修改值的老值。

l    SGA的日誌緩衝區已生成日誌項。這些改變在事務提交前可進入磁盤。

l    SGA的數據庫緩衝區已作修改,這些修改在事務真正提交之前可進入磁盤。

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

l        對於與回滾段相關的內部事務表記錄提交事務,並賦給一個相應的唯一系統修改號(SCN),記錄在表中。

l        SGA的日誌緩衝區中日誌項由LGWR進程寫入到在線日誌文件,這是構成提交事務的原子事務。

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

l        該事務標誌爲完成 。

注意:對於提交事務的數據修改不必由DBWR後臺進程立即寫入數據文件,可繼續存儲在SGA的數據庫緩衝區中,在最有效時將其寫入數據文件。

 

2)            回滾事務

     回滾事務的含義是撤消未提交事務中的SQL語句所作的對數據修改。ORALCE允許撤消未提交的整個事務,也允許撤消部分。

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

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

l        所有數據的事務封鎖被釋放。

l        事務結束。

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

l        僅在該保留點之後執行的語句被撤消。

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

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

l        該事務仍可繼續。

 

3)   保留點

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

 

六、數據庫觸發器

1.         觸發器介紹

    數據庫觸發器(database trigger)是存儲在數據庫中的過程,當表被修改時它隱式地被激發(執行)。在ORACLE中允許在對錶發出INSERT、UPDATE或DELETE語句時隱式地執行所定義的過程,這些過程稱爲數據庫觸發器。觸發器存儲在數據庫中,並與所相關表分別存儲。觸發器僅可在表上定義。在許多情況中觸發器用於提供很高級的專用數據庫管理系統,來補充ORACLE的標準功能。觸發器一般用於:

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

l        防止無效的事務;

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

l        在分佈式數據庫中實施跨越結點的引用完整性;

l        實施複雜的事務規則;

l        提供透明事件日誌;

l        提供高級的審計;

l        維護同步表複製;

l        收集關於存取表的統計。

注意:數據庫觸發器與SQL*FORMS觸發器之間的差別。數據庫觸發器是定義在表上,存儲在數據庫中,當對錶執行INSERT、UPDATE或DELETE語句時被激發,不管是誰或哪一應用發出。而SQL*FORMS觸發器是SQL*FORM應用的部分,僅當在指定SQL*FORMS應用中執行一個指定觸發器點時才被激發。

觸發器和說明性完整性約束都可用於約束數據的輸入,但它們之間有一定區別:

說明性完整性約束是關於數據庫總是爲“真”的語句。一個完整性約束應用於表中已有數據和操縱表的任何語句。

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

 

2.觸發器的組成

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

觸發事件或語句:爲引起觸發器激發的SQL語句,是對指定表INSERT、UPDATE或DELETE語句。

 

觸發器限制:爲一布爾表達式,當觸發器激發時該條件必須爲TRUE。觸發器的限制是用WHEN子句來指定。

 

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

NEW.列名                         引用新值

OLE.列名                         引用老值

在定義觸發器時可指定觸發器動作執行次數:受觸發語句影響每一行執行一次或是對觸發語句執行一次。

對每一觸發語句可有四種類型觸發器:

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

語句觸發器:該類型觸發器對觸發語句執行一次,不管其受影響行數。

定義觸發器可以指定觸發時間,指定激發器動作的執行相對於觸發語句執行之後或之前。

BEFORE觸發器:該觸發器執行觸發器動作是在觸發語句執行之前。

AFTER觸發器:該觸發器執行觸發器動作是在觸發語句執行之後。

一個觸發器可處於兩種不同的方式:使能觸發器和使不能觸發器。

使能觸發器:只要當觸發語句發出,觸發器限制計算爲TRUE,這種類型的觸發器執行其觸發動作。

使不能觸發器:這種觸發器即使其觸發語句被髮出,觸發器限制計算爲TRUE,也不執行觸發器動作。

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

 

七、分佈處理和分佈式數據庫

1.            簡介

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

在系統中的每一臺計算機稱爲結點。如果一結點具有管理數據庫軟件,該結點稱爲數據庫服務器。如果一個結點爲請求服務器的信息的一應用,該結點稱爲客戶。在ORACLE客戶,執行數據庫應用,可存取數據信息和與用戶交互。在服務器,執行ORACLE軟件,處理對ORACLE數據庫併發、共享數據存取。ORACLE允許上述兩部分在同一臺計算機上,但當客戶部分和服務器部分是由網連接的不同計算機上時,更有效。

分佈處理是由多臺處理機分擔單個任務的處理。在ORACLE數據庫系統中分佈處理的例子如:

客戶和服務器是位於網絡連接的不同計算機上。

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

SQL*NET是ORACLE網絡接口,允許運行在網絡工作站的ORACLE工具和服務器上,可存取、修改、共享和存儲在其它服務器上的數據。SAQL*NET可被認爲是網絡通信的程序接口。SQL*NET利用通信協議和應用程序接口(API)爲OARCLE提供一個分佈式數據庫和分佈處理。

SQL*NET驅動器爲在數據庫服務器上運行的ORACLE進程與ORACLE工具的用戶進程之間提供一個接口。

 參與分佈式數據庫的每一服務器是分別地獨立地管理數據庫,好   像每一數據庫不是網絡化的數據庫。每一個數據庫獨立地被管理,稱爲場地自治性。場地自治性有下列好處:

l        系統的結點可反映公司的邏輯組織。

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

好管理。

l        只要一個數據庫和網絡是可用,那麼全局數據庫可部分可用。不會因一個數據庫的故   

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

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

l        每個局部數據庫存在一個數據字典。

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

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

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

[email protected]

其中SCOTT爲模式名,EMP爲表名,@符號之後爲數據庫名.

一個遠程查詢爲一查詢,是從一個或多個遠程表中選擇信息,這些表駐留在同一個遠程結點.

一個分佈式查詢可從兩個或多個結點檢索數據.一個分佈式更新可修改兩個或兩個以上結點的數據.

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

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

ORACLE分佈式數據庫系統結構可由ORACLE數據庫管理員爲終端用戶和應用提供位置透明性,利用視圖、同義詞、過程可提供ORACLE分佈式數據庫系統中的位置透明性.

ORACLE允許在SELECT(查詢)、INSERT、UPDATE、DELETE、SELECT…FOR UPDATE和LOCK TABLE語句中引用遠程數據。對於查詢,包含有連接、聚合、子查詢和SELECT …FOR  UPDATE,可引用本地的、遠程的表和視圖。對於UPDATE、INSERT、DELETE和LOCK TABLE語句可引用本地的和遠程的表。注意在引用LONG和LONG RAW列、序列、修改表和封鎖表時,必須位於同一個結點。ORACLE不允許作遠程DDL語句。

在單場地或分佈式數據庫中,所有事務都是用COMMIT或ROLLBACK語句中止。ORACLE提供兩種機制實現分佈式數據庫中表重複的透明性:錶快照提供異步的表重複;觸發器實現同步的表的重複。在兩種情況下,都實現了對錶重複的透明性。

 

2.         分佈式數據庫全局名與數據庫鏈

1)   分佈式數據庫全局名:每一個數據庫有一個唯一的全局名,由兩部分組成:數據庫名(小於等於8字符)和網絡域。全局數據庫名的網絡域成分必須服從標準互聯網規範。域名中的層次由符號“.”分開,域名的次序由葉至根,從左至右。

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

CREAT PUBLIC DATEBASE LINK sale。Division3。acme。com

CONNECT TO guest IDENTIFIED BY password

USING‘DB串’;

其中:sales。Divisin3。acme。com爲定義的鏈名;guest/password 爲遠程數據庫的用戶賬號和口令;DB串用於遠程連接。由賬號和DB串構成完全路徑。如果只有一個則爲部分路徑。

有三種數據庫鏈可用於決定用戶對全部對象名的引用:

專用數據庫鏈:爲一指定用戶建立。專用數據庫鏈僅鏈的主人可使用。在SQL語句中用於指定一全局對象名或者在持有者的視圖過程定義中使用。

公用數據庫鏈:爲特殊的用戶組PUBLIC建立。公用數據庫鏈可爲任何用戶使用,在SQL語句中用於指定一個全局對象名或對象定義。

網絡數據鏈:由網絡域服務器建立和管理,可爲網絡中的任何數據庫的任何用戶使用,可在SQL語句中指定全局對象名或對象定義中使用。注意:當前網絡域服務器對ORACLE不能用,所以網絡數據庫鏈不可用。

 

3.         錶快照

ORACLE的錶快照特徵允許一個主表在分佈式數據庫的其它結點進行復制。只允許修改主表,而複製只可讀。主表達式每一個複製稱爲一個快照。快照異步的刷新,反映主表的一個最近事務一致狀態。

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

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

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

在快照結點,ORACLE建立一基表用於存儲由快照定義的查詢所檢索的行,然後爲該表建立一個只讀的視圖,併爲遠程主表建立一視圖,該視圖用於新快照。

一個快照週期地被刷新,反映它的主表的當前情況。爲了刷新一快照,快照定義查詢是被髮出,其查詢結果想在存儲在快照中,代替以前的快照數據。

當快照爲簡單快照時,可以由快照日誌來刷新,這樣可加快刷新處理。快照日誌是在主表數據庫中的一表,與主表相關。ORACLE使用快照日誌跟蹤主表中已修改的行。當基於主表的簡單快照刷新時,僅需要快照日誌的相應行來刷新快照,這種刷新稱爲快速刷新。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章