北京郵電大學軟件工程研究生的課程---數(shù)據(jù)庫設計開發(fā)-42.ppt_第1頁
北京郵電大學軟件工程研究生的課程---數(shù)據(jù)庫設計開發(fā)-42.ppt_第2頁
北京郵電大學軟件工程研究生的課程---數(shù)據(jù)庫設計開發(fā)-42.ppt_第3頁
北京郵電大學軟件工程研究生的課程---數(shù)據(jù)庫設計開發(fā)-42.ppt_第4頁
北京郵電大學軟件工程研究生的課程---數(shù)據(jù)庫設計開發(fā)-42.ppt_第5頁
已閱讀5頁,還剩58頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2 ORACLE數(shù)據(jù)庫實例管理,Oracle服務器就是數(shù)據(jù)庫管理系統(tǒng)(DBMS),由數(shù)據(jù)庫(Oracle database)和實例(Oracle instance)組成。 實例是一系列復雜的內(nèi)存結(jié)構(gòu)和操作系統(tǒng)進程,它為Oracle客戶提供所期望的不同程度的服務。一個實例只能打開一個數(shù)據(jù)庫,或者說一個數(shù)據(jù)庫被唯一的一個實例裝載。 4.2.1 實例組成 4.2.2 實例創(chuàng)建 4.2.3 監(jiān)控實例,北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.1 ORACLE數(shù)據(jù)庫實例組成,實例中每一個進程都有各自

2、的一個內(nèi)存塊,該內(nèi)存塊用于保存私有變量、地址堆棧和其他運行時的信息。 進程間使用公共共享區(qū)并在公共共享區(qū)內(nèi)完成它們的工作。公共共享區(qū)是能夠在同一時間內(nèi)被不同程序和不同進程讀寫的一塊內(nèi)存區(qū)。該內(nèi)存塊稱為系統(tǒng)全局區(qū)(SGA)。因為SGA駐留在一個共享內(nèi)存段中,所以它經(jīng)常被稱作共享全局區(qū)。 后臺進程就像數(shù)據(jù)庫的手,是直接處理數(shù)據(jù)庫的組件;SGA就像大腦,在必要時間接地調(diào)度手處理它們的信息與存儲檢索。SGA參與發(fā)生在數(shù)據(jù)庫中全部的信息和服務器的處理。 單用戶的Oracle配置(Personal Oracle Lite),不使用多進程執(zhí)行數(shù)據(jù)庫的功能。相反,所有的數(shù)據(jù)庫功能由一個Oracle進程完成。由

3、于這個原因,單用戶也稱為單進程Oracle。,北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.1 ORACLE數(shù)據(jù)庫實例組成,ORACLE實例是指有自己的內(nèi)存結(jié)構(gòu)和相關(guān)的服務器進程及后臺進程的DBMS。 4.2.1.1 內(nèi)存結(jié)構(gòu) 4.2.1.2 進程,實例,SGA,Shared pool,Database Buffer cache,Redo log Buffer cache,Library cache,Data Dictionary cache,PMON,SMON,DBWR,LGWR,CKPT,Others,內(nèi)存 結(jié)構(gòu),后臺 進程,用戶 進程,服務器 進程,PGA,

4、北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.1.1 ORACLE內(nèi)存結(jié)構(gòu),ORACLE的內(nèi)存結(jié)構(gòu)主要有兩個內(nèi)存區(qū)域組成: SGA(System Global Area):系統(tǒng)全局區(qū),是ORACLE實例的基礎(chǔ),是一個共享區(qū)域,存放最近使用的SQL語句、最近使用的數(shù)據(jù)、最近使用的數(shù)據(jù)字典等信息,供各個進程調(diào)用。 PGA(Program Global Area):程序全局區(qū),該區(qū)域是一非共享區(qū)域,存放會話、排序、游標、主變量等信息,被服務器進程調(diào)用,保證誰的請求處理結(jié)果給誰,誰的排序給誰,用戶聲明的、打開的、使用的、關(guān)閉的游標是私有的,用戶的主變量不被其他用戶干擾。,

5、北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.1.1 ORACLE內(nèi)存結(jié)構(gòu),系統(tǒng)全局區(qū):系統(tǒng)全局區(qū)是實例的主要部分。它含有數(shù)據(jù)維護、SQL語句分析與重做緩存所必須的所有內(nèi)存結(jié)構(gòu)。 系統(tǒng)全局區(qū)的數(shù)據(jù)是共享的,也就是說,多個進程可以在同一時間對SGA中的數(shù)據(jù)進行訪問和修改。所有數(shù)據(jù)庫操作都使用包含在SGA中某點上的結(jié)構(gòu)。 當實例被創(chuàng)建時,分配SGA;當實例關(guān)閉時,釋放SGA。,北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.1.1 ORACLE內(nèi)存結(jié)構(gòu),SGA組成如下: 共享池。 數(shù)據(jù)庫緩沖區(qū)高速緩存。 重做日志緩沖區(qū)。 另外oracle9

6、i還有Java pool,8i有Java虛擬機,解釋Java;Java pool是利用數(shù)據(jù)庫技術(shù)解釋Java. oracle9i的SGA可以通過SGA_MAX_SIZE被動態(tài)的設置大小,8i不能動態(tài)設置。,北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.1.1 ORACLE內(nèi)存結(jié)構(gòu),共享池:共享池包括庫高速緩存、數(shù)據(jù)字典高速緩存和服務器控制結(jié)構(gòu)(例如數(shù)據(jù)庫字符集)。 參見下圖,庫高速緩沖 字典高速緩沖 控制結(jié)構(gòu),共享 SQL區(qū),專用SQL區(qū),永久區(qū),運行區(qū),北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.1.1 ORACLE內(nèi)存結(jié)構(gòu),共享

7、池: 庫高速緩存存儲已提交給RDBMS的SQL語句文本、分析過的格式與執(zhí)行計劃,以及已被執(zhí)行的PL/SQL包頭與過程等。數(shù)據(jù)字典高速緩存存儲用于分析SQL語句的數(shù)據(jù)字典行。 Oracle服務器用庫高速緩存來提高執(zhí)行SQL語句的性能。當一條SQL語句提交時,服務器首先查找高速緩存,查看相同的語句是否已被提交或緩存過。如果有,Oracle使用存儲的語法分析樹和執(zhí)行路徑來執(zhí)行該語句,使用存儲代碼可以獲得明顯的性能提高。,北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.1.1 ORACLE內(nèi)存結(jié)構(gòu),共享池: 對于使用以前緩存的SQL語句,它必須在所有方面都與緩存版本完全相同

8、,包括標點符號和字母的大小寫。 庫高速緩存包括共享和專用SQL區(qū)。共享SQL區(qū)包括SQL語句語法分析樹和執(zhí)行路徑;專用SQL區(qū)存儲特定的會話信息,一個用戶會話能夠一次打開的專用SQL區(qū)的數(shù)量由init.ora參數(shù)OPEN_CURSORS決定。 庫高速緩存中的專用SQL區(qū)可更進一步分為永久區(qū)和運行區(qū)。永久區(qū)中包含合法的信息,并可應用于SQL語句的多個執(zhí)行中,而運行區(qū)中僅包含正在被執(zhí)行的SQL語句的數(shù)據(jù)。,北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.1.1 ORACLE內(nèi)存結(jié)構(gòu),共享池: 字典高速緩存含有RDBMS引擎分析SQL語句所使用的數(shù)據(jù)字典信息。在這個區(qū)域中

9、含有段信息、安全性、訪問權(quán)限和在可用的自由存儲空間等信息。 共享池的大小取決于init.ora文件參數(shù)SHARED_POOL_SIZE,它是以字節(jié)為單位的。ORACLE 9i可以通過ALTER SYSTEM SET SHARED_POOL_SIZE動態(tài)設置。 共享區(qū)經(jīng)過長期裝卸和卸載數(shù)據(jù)對象會產(chǎn)生許多碎片,如果在共享池中沒有足夠的連續(xù)空間用來裝載目標數(shù)據(jù),會產(chǎn)生錯誤。這個問題可以通過運行SQL命令ALTER SYSTEM FLUSH SHARED_POOL解決。但是如果在數(shù)據(jù)庫操作時,經(jīng)常遇到共享池錯誤,就必須增大共享池。,北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4

10、.2.1.1 ORACLE內(nèi)存結(jié)構(gòu),數(shù)據(jù)庫緩沖區(qū)高速緩存:是影響整個數(shù)據(jù)庫系統(tǒng)運行的重要因素之一。數(shù)據(jù)庫緩沖區(qū)高速緩存是由與Oracle塊相同大小的內(nèi)存塊組成。所有Oracle操作的數(shù)據(jù)在使用前被裝入到數(shù)據(jù)庫緩沖區(qū)高速緩存中。數(shù)據(jù)的更新在內(nèi)存塊中完成。 Oracle根據(jù)最近最少被使用(LRU)列表將數(shù)據(jù)清出緩沖區(qū)高速緩存。LRU列表記錄數(shù)據(jù)塊被訪問的頻繁程度。當服務器在緩沖區(qū)中需要更多空間來從磁盤讀入一個數(shù)據(jù)塊時,它去訪問LRU列表,以確定可以清出哪些塊,使用這種方法,保證最頻繁使用的塊保存在內(nèi)存中。,北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.1.1 ORAC

11、LE內(nèi)存結(jié)構(gòu),數(shù)據(jù)庫緩沖區(qū)高速緩存: 被修改過的緩沖塊稱為臟的,臟列表記錄所有在內(nèi)存中被修改而又尚未寫入磁盤中的數(shù)據(jù)。當Oracle接收到修改數(shù)據(jù)的請求時,對高速緩存中的塊進行數(shù)據(jù)修改,同時寫入重做日志中,然后該塊被放入臟的列表中,對這些數(shù)據(jù)的隨后訪問從高速緩存中讀取改變的數(shù)據(jù)的新的值。 Oracle服務器對更新的一塊數(shù)據(jù),并不立即更新數(shù)據(jù)文件中的數(shù)據(jù)。RDBMS等到一定條件時才將改變的數(shù)據(jù)刷新寫入數(shù)據(jù)文件(參見數(shù)據(jù)庫寫入進程)。,北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.1.1 ORACLE內(nèi)存結(jié)構(gòu),數(shù)據(jù)庫緩沖區(qū)高速緩存: DB_BLOCK_SIZE和DB_

12、BLOCK_BUFFERS是決定緩沖區(qū)高速緩存大小的兩個初始化參數(shù)。 DB_BLOCK_SIZE設置Oracle塊大小,DB_BLOCK_BUFFERS決定分配給緩沖區(qū)高速緩存的塊的數(shù)量。兩參數(shù)相乘就可得出緩沖區(qū)高速緩存的內(nèi)存總數(shù)(以字節(jié)為單位)。 ORACLE 9i可以通過ALTER SYSTEM SET DB_CACHE_SIZE動態(tài)設置。,北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.1.1 ORACLE內(nèi)存結(jié)構(gòu),重做日志緩沖區(qū):重做日志緩沖區(qū)用于在內(nèi)存中存儲未被刷新寫入聯(lián)機重做日志文件的重做信息。 它是循環(huán)使用的緩沖區(qū),當重做日志緩沖區(qū)填滿時,將它的內(nèi)容寫

13、入聯(lián)機重做日志文件。 重做日志緩沖區(qū)的大小是由LOG_BUFFER初始化參數(shù)決定,以字節(jié)為單位,決定在內(nèi)存中保留多少空間緩存重做日志項。如果這個值設置得過低,進程之間相互競爭,LGWR進程讀出和寫入緩存,有可能會導致性能問題。,北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.1.1 ORACLE內(nèi)存結(jié)構(gòu),重做日志緩沖區(qū): 為強迫重做日志順序?qū)懭?,Oracle服務器使用閂控制對緩存的訪問。閂是一個Oracle進程對一個內(nèi)存結(jié)構(gòu)的鎖定,一個進程必須持有重做分配閂,才能寫入重做日志緩沖區(qū)。當一個進程持有分配閂時,其他任何進程都不能使用這個分配閂寫入重做日志緩沖區(qū)。 Ora

14、cle服務器使用LOG_SMALL_ENTRY_MAX_SIZE初始化參數(shù)限制一次寫入的重做的總量。這個參數(shù)以字節(jié)為單位,其缺省值隨操作系統(tǒng)和硬件不同而不同。,北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.1.1 ORACLE內(nèi)存結(jié)構(gòu),重做日志緩沖區(qū): 對具有多個CPU的服務器而言,Oracle服務器不允許使用重做分配閂所書寫的重做日志項所需空間比參數(shù)LOG_SMALL_ENTRY_MAX_SIZE大。相反,進程必須持有一個重做復制閂??色@得的重做復制閂的數(shù)量等于LOG_SIMULTANEOUS_COPIES初始化參數(shù)的值。LOG_SIMULTANEOUS_COP

15、IES的缺省值是系統(tǒng)中CPU的數(shù)量。使用重做復制閂,多個進程能同時寫入重做日志緩沖區(qū)。 可以使用V$LATCH動態(tài)性能視圖監(jiān)控重做分配閂與重做復制閂。,北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.1.2 ORACLE進程,ORACLE進程可以理解為一系列執(zhí)行一定任務、提供不同服務信息的程序。主要有用戶進程、服務器進程、后臺進程三種類型。 用戶進程:當客戶機向ORACLE服務器發(fā)出一個連接請求時,就產(chǎn)生一個用戶進程。 數(shù)據(jù)庫用戶操縱數(shù)據(jù)前,首先要建立一個與數(shù)據(jù)庫服務器的連接(可通過Oracle工具,如SQL*Plus),連接的同時產(chǎn)生用戶進程,用戶進程并不直接作用

16、于ORACLE服務器,而是與一個服務器進程進行通信。,北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.1.2 ORACLE進程,用戶進程:每個用戶進程被分配一部分內(nèi)存區(qū),稱為進程全局區(qū)(PGA)。 當一個用戶進程通過專用服務器方式連接數(shù)據(jù)庫時,用戶的會話數(shù)據(jù)、堆??臻g和游標狀態(tài)信息存儲在進程全局區(qū)中。用戶的會話數(shù)據(jù)包括安全和資源使用信息;堆??臻g含有為用戶會話指定的本地變量;游標狀態(tài)區(qū)包括運行時的游標信息、返回的行和游標返回的代碼。 如果用戶進程通過共享服務器進程方式進行連接,游標和會話信息被存儲在系統(tǒng)全局區(qū)(SGA)中。盡管對整個數(shù)據(jù)庫而言,這并不增加對內(nèi)存空間的

17、要求,但是它需要一個更大的系統(tǒng)全局區(qū)來存放這些附加的會話信息。,北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,Oracle Server,4.2.1.2 ORACLE進程,服務器進程:服務器進程接受用戶發(fā)出的請求,并根據(jù)請求與數(shù)據(jù)庫通信,通過這些通信完成用戶進程對數(shù)據(jù)庫中數(shù)據(jù)的處理要求,同時完成對數(shù)據(jù)庫的連接操作和I/O訪問。,SGA,Shared pool,Database Buffer,Redo log Buffer,用戶 進程,服務器 進程,數(shù)據(jù)庫用戶,建立連接,建立會話,北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.1.2 ORACL

18、E進程,Oracle后臺進程:在任意瞬間,Oracle數(shù)據(jù)庫可以處理許多行信息、處理幾百個同步用戶請求、進行復雜的數(shù)據(jù)操作,與此同時提供最高水平的性能和數(shù)據(jù)的完整性。 為了完成這些任務,Oracle數(shù)據(jù)庫將一項大的工作分散到多個程序中,其中每個程序的大部分操作都是相互獨立的,并扮演一個特定的角色。這些程序稱為Oracle后臺進程。,北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.1.2 ORACLE進程,Oracle數(shù)據(jù)庫的物理文件和內(nèi)存結(jié)構(gòu)之間的關(guān)系由后臺進程來維持。 理解后臺進程和它們擔負的任務,將有助于分析性能問題、指出瓶頸和診斷數(shù)據(jù)庫中的故障點。 數(shù)據(jù)庫擁有

19、多個后臺進程,其數(shù)量取決于數(shù)據(jù)庫的配置。每個后臺進程創(chuàng)建一個跟蹤文件,在實例操作期間保存跟蹤文件??梢栽O置init.ora文件的BACKGROUND_DUMP_DEST參數(shù)來規(guī)定后臺進程跟蹤文件的位置。排除數(shù)據(jù)庫故障時,跟蹤文件就顯得非常重要。,北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.1.2 ORACLE進程,Oracle后臺進程有: 系統(tǒng)監(jiān)控(SMON) 進程監(jiān)控進程(PMON) 數(shù)據(jù)庫寫進程(DBWR) 日志寫進程(LGWR) 調(diào)度進程(Dnnn) 歸檔進程(ARCH) 檢查點(CKPT) 恢復進程(RECO) 快照進程(SNPn) 鎖進程(LCKn)

20、并行查詢進程(Pnnn),北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.1.2 ORACLE進程,系統(tǒng)監(jiān)控(System Monitor,SMON) 進程監(jiān)控(Process Monitor,PMON): 由于種種原因,對Oracle數(shù)據(jù)庫的連接可能會發(fā)生崩潰、掛起或其他非正常終止。例如,網(wǎng)絡斷線、用戶提出不合理的要求遭到系統(tǒng)拒絕,操作系統(tǒng)出錯等等,都會引起連接中斷或系統(tǒng)掛起,Oracle服務器必須有能力去處理由于各種原因而引起的失敗。 系統(tǒng)監(jiān)控和進程監(jiān)控都是自動解決數(shù)據(jù)庫系統(tǒng)問題的后臺進程。,北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4

21、.2.1.2 ORACLE進程,進程監(jiān)控(PMON)自動清除中斷或失敗的進程,包括清除非正常中斷的進程留下的孤兒會話、回滾未提交事務、釋放被斷開連接的進程占有的鎖、釋放被失敗進程占有的系統(tǒng)全局區(qū)(SGA)資源,它同時監(jiān)控服務器和調(diào)度進程,如果它們失敗則自動重啟它們。,Instance,SGA,PMON,PGA area,北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.1.2 ORACLE進程,系統(tǒng)監(jiān)控(SMON)作為恢復自動實例的進程,回滾尚未提交的事務或前卷重做日志。SMON也是管理某些數(shù)據(jù)庫段的進程,收回不再使用的臨時段空間,并自動合并在數(shù)據(jù)文件中相鄰的自由空間

22、塊。 SMON僅當創(chuàng)建表空間或表時的缺省存儲參數(shù)pctincrease不是0時,合并表空間中的自由空間。如果想讓SMON自動地處理這個操作,至少將pctincrease設置為1。,Instance,SGA,SMON,Database,Data files,Control files,Redo log files,北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,Database,4.2.1.2 ORACLE進程,數(shù)據(jù)庫寫進程(Database Writer, DBWR):負責將緩沖區(qū)中臟的數(shù)據(jù)塊寫入到數(shù)據(jù)文件中。,Instance,SGA,database Buffer ca

23、che,DBWR,Data files,Control files,Redo log files,北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.1.2 ORACLE進程,數(shù)據(jù)庫寫進程(Database Writer,DBWR) DBWR等到下列情況發(fā)生時,才成批地讀臟列表,并將在臟列表中發(fā)現(xiàn)的所有塊刷新寫入數(shù)據(jù)文件。 1)發(fā)生一個檢查點。 2)臟列表的長度達到init.ora文件中DB_BLOCK_WRITE_BATCH參數(shù)值的一半。 3)使用的緩沖區(qū)數(shù)量達到init.ora參數(shù)DB_BLOCK_MAX_SCAN。 4)DBWR后臺進程發(fā)生超時(大約每3秒)。,北

24、京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.1.2 ORACLE進程,數(shù)據(jù)庫寫進程(Database Writer,DBWR) 在大多數(shù)安裝中,有一個DBWR進程處理所有數(shù)據(jù)庫的所有寫入活動。但是當發(fā)現(xiàn)這個DBWR進程不能滿足數(shù)據(jù)庫要求時,可以啟動一個以上的DBWR進程。 init.ora文件中DB_WRITES參數(shù)可以設置在啟動時創(chuàng)建的DBWR進程數(shù)(缺省值是1)。建議使用與存儲數(shù)據(jù)文件的物理磁盤一樣多的DBWR進程或者將這個數(shù)量設為與數(shù)據(jù)庫中數(shù)據(jù)文件的數(shù)量相等。,北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.1.2 ORACLE進

25、程,數(shù)據(jù)庫寫進程(Database Writer,DBWR) 另一個參數(shù)是DB_BLOCK_CHECKPOINT_BATCH,設置在每個檢查點DBWR寫入的塊的最大量(參看檢查點進程)。增大該參數(shù),可以減少DBWR刷新緩沖區(qū)的次數(shù)。但將這個數(shù)值增得過大,當DBWR最終刷新緩沖區(qū)時,可能產(chǎn)生不能接受的延遲。 第三個參數(shù)是DB_BLOCK_CHECKSUM,這是個布爾參數(shù),啟用這個參數(shù)時,導致每個數(shù)據(jù)庫塊被寫入時附加一個校驗和值。當隨后讀取該塊時,計算校驗和值并與存儲在數(shù)據(jù)庫中的數(shù)值進行比較,如果值不同,將產(chǎn)生錯誤。當查找數(shù)據(jù)毀壞問題時,這是一個有價值的參數(shù),但是在全部時間都啟用這個值也會有代價。

26、,北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.1.2 ORACLE進程,日志寫(Log Writer,LGWR): LGWR是將在系統(tǒng)全局區(qū)中重做日志緩沖區(qū)的重做日志條目寫入到聯(lián)機重做日志文件的進程。 LGWR執(zhí)行寫入操作的條件是:發(fā)生提交、重做日志緩沖區(qū)滿度達到三分之一、超時(3秒)、DBWR進程開始之前。,Database,Instance,SGA,Redo log buffer,LGWR,DBWR,Data files,Control files,Redo log files,北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.1.

27、2 ORACLE進程,日志寫(Log Writer,LGWR): 直到Oracle在LGWR完成將重做信息從重做緩沖區(qū)刷新到聯(lián)機重做日志文件之后,Oracle才認為一個事務已完成。在LGWR成功地將重做日志項寫入聯(lián)機重做文件時(并不是改變數(shù)據(jù)文件中的數(shù)據(jù)時),將一個成功碼返回給服務器進程。 用于配置LGWR進程的選項很少,大多數(shù)的配置涉及重做日志緩沖區(qū)和支持該緩沖區(qū)的內(nèi)存結(jié)構(gòu),而不是LGWR進程自身。 可以建立多個LGWR的I/O口,以改善向日志文件的寫入性能,init.ora中LGWR_IO_SLAVES參數(shù)決定。,北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.

28、1.2 ORACLE進程,日志寫(Log Writer,LGWR): 檢查點導致LGWR和DBWR。檢查點間隔時間越短,發(fā)生數(shù)據(jù)庫故障時需要的恢復時間越短,同時減少了必須執(zhí)行每一檢查點所需的工作。當決定正確的檢查點間隔時,必須權(quán)衡所有這些因素。 LOG_CHECKPOINT_INTERVAL參數(shù)即一定數(shù)量的操作系統(tǒng)塊(不是Oracle塊)寫入重做時,引起數(shù)據(jù)庫中的一個檢查點被觸發(fā)。LOG_CHECKPOINT_TIMEOUT參數(shù)指定的時間間隔(以秒為單位)發(fā)生一個檢查點。,北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.1.2 ORACLE進程,日志寫(Log Wr

29、iter,LGWR): 另外當一個重做日志組寫滿時,一個檢查點被觸發(fā)。要注意不要設置不必要的檢查點,或者迫使不需要的檢查點發(fā)生。例如,如果一個重做日志組大小為3MB,而LOG_CHECKPOINT_INTERVAL設置為2.5MB。當有2.5MB的數(shù)據(jù)寫入重做日志時,導致發(fā)生一個檢查點。另外,當重做日志組寫滿時(僅在又寫入0.5MB的數(shù)據(jù)后),發(fā)生另一個檢查點。事實上,這兩個檢查點將相繼發(fā)生。頻繁的檢查點將浪費大量的進程活動和I/O次數(shù)以執(zhí)行相關(guān)的檢查點。 最后一個參數(shù)是布爾值LOG_CHECKPOINTS_TO_ALERT。每當檢查點發(fā)生時,它為數(shù)據(jù)庫在alert.log文件中設置一個標記,

30、并用于試圖指出確切的檢查點間隔。,北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.1.2 ORACLE進程,調(diào)度進程:正如前面所提到的,服務器進程既可以是一個用戶進程專有的,也可以在多個用戶進程之間共享。使用共享服務器要求配置多線程服務器。當使用共享服務器進程時,至少必須存在一個調(diào)度進程(Dnnn),在環(huán)境需要時也可能有多個調(diào)度進程。調(diào)度進程將用戶請求傳送到系統(tǒng)全局區(qū)的請求隊列,并將服務器的響應信息返回給正確的用戶進程。 參數(shù)MTS_DISPATCHERS指定調(diào)度進程使用的協(xié)議及開始使用該協(xié)議的調(diào)度進程的數(shù)量。 參數(shù)MTS_MAX_DISPATCHERS控制RDBM

31、S允許的調(diào)度進程的最大數(shù)量。,北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.1.2 ORACLE進程,歸檔進程(Archiver,ARCH):ARCH負責將全部聯(lián)機重做日志復制到歸檔重做日志文件。這僅在數(shù)據(jù)庫運行在歸檔模式(ARCHIVELOG)下才發(fā)生。,Data files,Control files,Redo log files,Archived Redo log files,ARCH,北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.1.2 ORACLE進程,歸檔進程(Archiver,ARCH): 當ARCH正在復制歸檔重做日志

32、時,沒有其他進程能夠?qū)懭脒@個重做日志。重做日志是按順序循環(huán)使用的,如果數(shù)據(jù)庫需要轉(zhuǎn)換重做日志,但是ARCH還正在按其順序復制下一個日志,所有數(shù)據(jù)庫的活動將終止,直到ARCH完成。如果歸檔由于某些原因不能完成復制日志,它將等待直到引起不能寫入的錯誤得到解決為止。 在init.ora文件中ARCHIVE_LOG_START參數(shù)必須設置為TRUE,當數(shù)據(jù)庫啟動時,才會自動開始歸檔。如果設置了歸檔模式,但不自動啟動ARCH,當所有聯(lián)機重做日志寫滿時,數(shù)據(jù)庫將會掛起,等待你手工歸檔聯(lián)機日志。,北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.1.2 ORACLE進程,檢查點進程

33、(CKPT):CKPT是可選的后臺進程,執(zhí)行LGWR進程通常會執(zhí)行的檢查點任務即用當前版本信息更新數(shù)據(jù)文件和控制文件頭。 CHECKPOINT_PROCESS參數(shù)設置為TRUE可以啟用CKPT進程。注意在Oracle 8.x中,該已被集成入RDBMS中并設置為TRUE。如果在Oracle 8.x的init文件中包括這個參數(shù),實例啟動將會失敗。,Database,Instance,SGA,Redo log buffer,LGWR,CKPT,DBWR,Data files,Control files,Redo log files,北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,

34、4.2.1.2 ORACLE進程,恢復進程(RECO):負責在分布式數(shù)據(jù)庫中恢復失敗的事務。分布式事務配置數(shù)據(jù)庫時(設置DISTRIBUTED_TRANSACTIONS值大于0),RECO會自動啟動。 快照進程(SNPn):處理數(shù)據(jù)庫快照的自動刷新,并運行預定的數(shù)據(jù)庫過程。參數(shù)JOB_QUEUE_PROCESS設置啟動的快照進程數(shù),參數(shù)JOB_QUEUE_INTERVAL決定快照進程在被喚醒以處理掛起的作業(yè)或事務之前休眠的時間(以秒為單位)。,北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.1.2 ORACLE進程,鎖進程(LCKn):在并行服務器環(huán)境中,多個實例安

35、裝在同一個數(shù)據(jù)庫上,鎖進程(LCKn)負責管理和協(xié)調(diào)每個實例占有的鎖。 并行查詢進程(Pnnn):根據(jù)數(shù)據(jù)庫的活動和并行查詢選項的配置,Oracle服務器啟動和停止查詢進程。這些進程涉及并行索引的創(chuàng)建、表的創(chuàng)建及查詢。啟動的進程的數(shù)量與參數(shù)PARALLEL_MIN_SERVERS指定的數(shù)量相同,但決不能超過參數(shù)PARALLEL_MAX_SERVERS指定的進程數(shù)。,北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.1 ORACLE數(shù)據(jù)庫實例組成,為更好地理解前面討論的實例組件是如何相互交互的,看一個典型的事務在實例結(jié)構(gòu)中的移動。 當一個用戶會話使用SQL*Net驅(qū)動程

36、序連接到服務器會話時,開始一個事務。這個連接可以使用它自己的一個服務進程進行專用連接,或通過調(diào)度進程處理的一個共享連接。服務器會話對傳遞給它的SQL語句與已經(jīng)保存在共享SQL區(qū)中的語句進行比較,如果在共享池中發(fā)現(xiàn)有完全一樣的語句,使用該語句早已存儲的做過語法分析的形式與執(zhí)行計劃。如果在共享池中沒有發(fā)現(xiàn)匹配語句,服務器進程對這些語句進行語法分析。,北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.1 ORACLE數(shù)據(jù)庫實例組成,接下來,服務器會話查看在數(shù)據(jù)庫緩沖區(qū)中是否已經(jīng)存儲了完成該事務所必須的數(shù)據(jù)塊。如果在緩沖區(qū)中沒有,服務器會話就從數(shù)據(jù)文件中讀取必要的數(shù)據(jù),將它們

37、拷貝到緩沖區(qū)中。如果事務是一個查詢,服務器會話將查詢的結(jié)果返回給用戶進程(執(zhí)行必要次數(shù)的數(shù)據(jù)塊讀和拷貝以返回所有數(shù)據(jù))。 對一個修改數(shù)據(jù)的事務,有更多的步驟需要做。例如,假設事務是一個更新。在將必要的數(shù)據(jù)塊讀入緩沖區(qū)高速緩存中之后,修改內(nèi)存中的數(shù)據(jù)塊。修改的緩存塊標記為臟的,并把它們放入臟列表中。還產(chǎn)生重做信息,并將重做信息存儲在重做日志緩存中。,北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.1 ORACLE數(shù)據(jù)庫實例組成,如果事務是相對短期的,事務完成,用戶提交,發(fā)出信號給LGWR進程讓它將重做日志緩沖區(qū)刷新到聯(lián)機重做日志文件。如果事務相對持續(xù)時間很長和很復雜,

38、下列事情有可能發(fā)生: 1)產(chǎn)生的重做引起重做日志緩沖區(qū)寫滿三分之一的空間,這會觸發(fā)LGWR進程刷新重做日志緩沖區(qū)。 2)放入臟列表中的塊數(shù)達到限定的長度,這會觸發(fā)DBWR進程將數(shù)據(jù)庫緩沖區(qū)所有臟列表項刷新寫入到數(shù)據(jù)文件中,它反過來也使LGWR進程向磁盤刷新重做日志緩沖區(qū)。 3)遇到一個數(shù)據(jù)庫檢查點,這將觸發(fā)數(shù)據(jù)庫緩沖區(qū)高速緩存和重做日志高速緩存刷新。,北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.1 ORACLE數(shù)據(jù)庫實例組成,4)可獲得的緩沖區(qū)高速緩存中的自由緩存空間下降到規(guī)定的門限以下,這也會引起數(shù)據(jù)庫高速緩存緩沖區(qū)的刷新。 5)產(chǎn)生一個不可恢復的數(shù)據(jù)庫錯誤,

39、這迫使該事務中斷、回滾并向服務器會話報告錯誤。 當事務正在處理向重做緩存生成的重做并刷新時,聯(lián)機重做日志逐漸被填滿。當前日志被填滿后,LGWR進程開始寫入下一個日志組;與此同時,歸檔進程將重做日志復制到磁盤或磁帶。因為直到所有重做日志信息從重做緩沖區(qū)寫入到聯(lián)機重做日志之后,事務才被記錄為執(zhí)行成功的,所以LGWR和ARCH必須各自有能力在無錯誤的情況下完成自己的任務。,北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.2 ORACLE數(shù)據(jù)庫實例創(chuàng)建,通過前面介紹,我們知道ORACLE數(shù)據(jù)庫服務器的啟動事實上是創(chuàng)建實例的過程。打開一個Oracle數(shù)據(jù)庫的過程具體包括以下三

40、步: 1)創(chuàng)建一個Oracle實例(非安裝階段) 2)由實例安裝數(shù)據(jù)庫(安裝階段) 3)打開數(shù)據(jù)庫(打開階段) Oracle實例在數(shù)據(jù)庫啟動的非安裝階段創(chuàng)建。當數(shù)據(jù)庫經(jīng)過非安裝階段時,讀取init.ora參數(shù)文件,啟動后臺進程,初始化系統(tǒng)全局區(qū)(SGA)。init.ora文件定義了實例的配置,包括內(nèi)存結(jié)構(gòu)的大小和啟動后臺進程的數(shù)量和類型等。,北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.2 ORACLE數(shù)據(jù)庫實例創(chuàng)建,下一階段稱為安裝階段。init.ora文件中的控制文件參數(shù)值決定數(shù)據(jù)庫的安裝實例。在安裝階段,讀取控制文件并使其成為可訪問的,可以對控制文件內(nèi)存儲的

41、數(shù)據(jù)進行查詢和修改。 最后的階段就是打開數(shù)據(jù)庫。在這一階段,存儲在控制文件中的數(shù)據(jù)庫文件以排它使用方式被實例鎖定,使數(shù)據(jù)庫能夠被普通用戶訪問。打開是數(shù)據(jù)庫的正常操作狀態(tài),在數(shù)據(jù)庫打開之前,只有DBA能訪問數(shù)據(jù)庫,且只能通過服務器管理器對其進行訪問。,北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.2 ORACLE數(shù)據(jù)庫實例創(chuàng)建,北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.2 ORACLE數(shù)據(jù)庫實例創(chuàng)建,為了改變數(shù)據(jù)庫的操作狀態(tài),必須擁有SYSDBA特權(quán)。當數(shù)據(jù)庫從關(guān)閉狀態(tài)到打開狀態(tài)時,可以單步調(diào)試數(shù)據(jù)庫的每一個操作狀態(tài),例如,可以在服

42、務器管理器工具中執(zhí)行STARTUP NOMOUNT命令,使數(shù)據(jù)庫處在非安裝階段,接下來可以運行ALTER DATABASE MOUNT或者ALTER DATABASE OPEN命令以單步調(diào)試到操作階段。 無論是在何種操作狀態(tài)下,如果執(zhí)行SHUT DOWN命令,將完全關(guān)閉數(shù)據(jù)庫。當關(guān)閉數(shù)據(jù)庫時,只能從當前運行狀態(tài)轉(zhuǎn)到完全關(guān)閉狀態(tài),數(shù)據(jù)庫不能從打開狀態(tài)轉(zhuǎn)到安裝狀態(tài)。,北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.2 ORACLE數(shù)據(jù)庫實例創(chuàng)建,沒有安裝數(shù)據(jù)庫的實例稱為空閑的它使用內(nèi)存,但不做任何工作。一個實例只能唯一地與一個數(shù)據(jù)庫連接,而且對一個數(shù)據(jù)庫也只分配一個實例

43、(使用并行服務器除外)。 啟動數(shù)據(jù)庫命令: STARTUP FORCERESTRICTPFILE=filename OPEN RECOVER|MOUNT|NOMOUNT; FORCE 強制關(guān)閉數(shù)據(jù)庫,然后正常啟動, RESTRICT 啟動數(shù)據(jù)庫,只允許具有特權(quán)的用戶訪問, RECOVER 啟動數(shù)據(jù)庫同時開始介質(zhì)恢復, PFILE 說明啟動實例使用的參數(shù)文件及其位置。,北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.2 ORACLE數(shù)據(jù)庫實例創(chuàng)建,關(guān)閉數(shù)據(jù)庫過程與啟動相反,關(guān)閉數(shù)據(jù)文件,關(guān)閉日志文件,關(guān)閉控制文件,關(guān)閉實例并釋放資源。關(guān)閉數(shù)據(jù)庫命令: SHUTDOWN

44、 NORMAL|TRANSACTIONAL|IMMEDIATE|ABORT;,北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.2 ORACLE數(shù)據(jù)庫實例創(chuàng)建,關(guān)閉數(shù)據(jù)庫的方式中可以看出, 對于NORMAL、 IMMEDIATE、 TRANSACTIONAL的關(guān)閉數(shù)據(jù)庫方式,下次啟動數(shù)據(jù)庫時不需做例程恢復; 對于ABORT的關(guān)閉方式,下次啟動要做例程恢復。,北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.3 ORACLE數(shù)據(jù)庫監(jiān)控實例,一般情況下,系統(tǒng)全局區(qū)和后臺進程在沒有DBA干預的情況下運行。然而,有時可能會發(fā)生問題,這時DBA必須能診

45、斷和修復發(fā)生的問題,即DBA應當能夠有效地監(jiān)控和管理實例。以下介紹的三種方法可以監(jiān)控和追蹤實例及其相關(guān)的結(jié)構(gòu)。 使用診斷追蹤文件管理實例 通過操作系統(tǒng)追蹤管理實例 使用V$表監(jiān)控實例結(jié)構(gòu),北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.3 ORACLE數(shù)據(jù)庫監(jiān)控實例,使用診斷追蹤文件管理實例 診斷追蹤文件中包含有實例運行過程中的事件發(fā)生信息,充分利用它可以發(fā)現(xiàn)和解決許多問題。診斷追蹤文件有三類:警告文件(alertSID.log)、后臺進程跟蹤文件、用戶跟蹤文件。 查找關(guān)于實例的問題最好的地方是在進程自己的追蹤文件中。根據(jù)特定的進程和所遇到的錯誤,這些追蹤文件被寫在

46、由參數(shù)USER_DUMP_DEST或者BACKGROUND_DUMP_DEST所指定的位置。,北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.3 ORACLE數(shù)據(jù)庫監(jiān)控實例,使用診斷追蹤文件管理實例 后臺進程失敗經(jīng)常在數(shù)據(jù)庫的alert.log文件中寫入一項,或者寫到它們各自的追蹤文件,當一個后臺進程被終止或者非正常中斷一個操作時,通常產(chǎn)生一個追蹤文件,包含導致失敗的錯誤信息、當前進程堆棧的轉(zhuǎn)儲、當前執(zhí)行的游標和與問題有關(guān)的其他信息。 DBA應當收集這些追蹤文件,將它們提供給Oracle全球范圍客戶支持顧問,他們會幫助你診斷問題。,北京郵電大學軟件學院 郭文明 20

47、03.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.3 ORACLE數(shù)據(jù)庫監(jiān)控實例,通過操作系統(tǒng)追蹤管理實例 后臺進程也能通過使用操作系統(tǒng)命令進行追蹤。在UNIX環(huán)境中,每一個后臺進程是一個分立的任務,可以分立追蹤。通過查看操作系統(tǒng)進程的內(nèi)存和CPU的使用(通過使用sar、ps、vmstat和top等工具)指明性能問題和失控的查詢。有時解決掛起、中斷服務器進程或用戶進程的唯一方法是在操作系統(tǒng)級中斷它們。但只能對有十足經(jīng)驗的用戶使用。,北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.3 ORACLE數(shù)據(jù)庫監(jiān)控實例,通過操作系統(tǒng)追蹤管理實例 在NT服務器環(huán)境中,全部的Oracle

48、實例在NT操作系統(tǒng)作為一個稱為服務的后臺進程實現(xiàn)。各個后臺進程作為屬于這個服務的線程實現(xiàn)。使用與NT OS的Performance Monitor工具進行監(jiān)控,它監(jiān)控許多事情,包括屬于這個服務的線程的內(nèi)存的消耗和環(huán)境的切換。詳細情況可查看有關(guān)使用手冊。,北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.3 ORACLE數(shù)據(jù)庫監(jiān)控實例,使用V$表監(jiān)控實例結(jié)構(gòu) DBA可以使用許多動態(tài)性能視圖顯示實例的信息。這些視圖對發(fā)現(xiàn)當前數(shù)據(jù)庫實例的狀態(tài)和與實例相關(guān)的故障問題有很大的價值。 1.監(jiān)控數(shù)據(jù)庫的連接 所有連接到實例的用戶和后臺進程都能夠使用V$視圖被監(jiān)控。,北京郵電大學軟件學院 郭文明 2003.06,數(shù)據(jù)庫設計與開發(fā)講義,4.2.3 ORACLE數(shù)據(jù)庫監(jiān)控實例,1.監(jiān)控數(shù)據(jù)庫的連接 V$process視圖顯示所有連接到數(shù)據(jù)庫的進程的信息,包括后臺進程和用戶進程; V

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論