圖解Oracle資料庫(一)

來源:互聯網
上載者:User
原創作品,允許轉載,轉載時請務必以超連結形式標明文章 原始出處 、作者資訊和本聲明。否則將追究法律責任。 http://linuxtro.blog.51cto.com/1239505/289197                   -------聲明:本文參考了Oracle官方文檔和互連網的海量資訊,並歸納總結而來。如有錯誤之處,還請各位不吝賜教。   Oracle 伺服器是一個資料庫管理系統,它提供了一種開放、全面、整合的方法來管理資訊。 Oracle 伺服器的關鍵是管理資訊。其主要效能有以下幾個方面: 開放式聯結、開發工具、空間管理、備份與恢複、海量資料管理、保密機制、決策支援系統 Oracle資料庫體繫結構 Oracle伺服器由 Oracle 執行個體和 Oracle 資料庫組成,如圖所示: 簡易表示為下圖所示:             每一個Oracle 資料庫都關聯著一個 Oracle 執行個體。在資料庫伺服器上啟動資料庫後,Oracle 軟體會分配一個稱為系統全域區(SGA) 的共用記憶體區,還會啟動若干個 Oracle 後台進程。這種 SGA 和Oracle 進程的組合就稱為一個 Oracle 執行個體。        執行個體啟動後,Oracle 軟體會將執行個體與特定的資料庫關聯起來。這個過程稱為裝載資料庫。接下來就可以開啟資料庫了。在同一台Oracle伺服器上可以並發執行多個執行個體,每一個執行個體只訪問自己的物理資料庫。Oracle 資料庫使用記憶體結構和進程來管理、訪問資料庫。所有記憶體結構都存在於構成資料庫伺服器的電腦的主存中。 進程指的是在這些電腦記憶體中啟動並執行作業。進程被定義為“控制線程”或作業系統中可以運行一系列步驟的機制。 可以將 Oracle 資料庫體繫結構看作多種不同的、相互關聯的結構化組件。 接下來就介紹一下執行個體的相關內容: Oracle執行個體有進程和記憶體組成。 先來說一下進程結構,下圖是Oracle進程結構。 Oracle進程可以分為以下三種:         後台進程:在啟動 Oracle 執行個體時啟動。系統為了使效能最好和協調多個使用者,在多進程系統中使用一些附加進程,統稱為後台進程。在許多作業系統中,一個ORACLE執行個體可以有許多後台進程,但它們不是一直存在。          使用者進程:在資料庫使用者請求串連到 Oracle 伺服器時啟動。負責將用戶端使用者的SQL語句傳遞給服務進程,並從伺服器端拿回查詢資料。         伺服器處理序:可以串連到 Oracle 執行個體,它在使用者建立會話時啟動。伺服器處理序用於處理串連到該執行個體的使用者進程的請求。有以下兩種情況: 1、當使用者和ORACELE資料庫是在同一台機器上運行,而不再通過網路,一般將使用者進程和它相應的伺服器處理序組合成單個的進程,可降低系統開銷。 2、當使用者和ORACLE資料庫運行在不同的機器上時,使用者進程經過一個分離伺服器處理序與ORACLE通訊。它可執行下列任務:對應用所發出的SQL語句進行文法分析和執行。從磁碟(資料檔案)中讀入必要的資料區塊到SGA的共用資料庫緩衝區(該塊不在緩衝區時)。將結果返回給應用程式處理。   Oracle的後台進程: Oracle的後台進程比較重要的包括以下幾個:     SMON     PMON        DBWRn         LGWR      ARCHn         CKPT 在Linux上可以通過如下方法查看後台進程: 命令為:ps -ef | grep ora_ SMON(系統監護進程):在執行個體啟動時執行執行個體恢複,並負責清理不再使用的臨時段。SMON進程要完成所有“系統級”任務。PMON感興趣的是單個的進程,而SMON與之不同,它以系統級為出發點,這是一種資料庫“垃圾收集器”。SMON所做的工作包括: ·清理臨時空間 ·合并空閑空間 ·針對原來停用檔案恢複活動的事務 ·執行RAC中失敗節點的執行個體恢複 ·清理OBJ$ ·收縮復原段 ·“離線”復原段   PMON(使用者進程監護進程):後台進程清除失敗使用者的進程,釋放使用者當時正在使用的資源。PMON負責釋放鎖並使其可以被其他使用者使用。同SMON一樣,PMON周期性地喚醒檢測它是否需要被使用。負責在出現異常中止的串連之後完成清理-釋放資源,復原未提交的事務工作。還負責監視其他的Oracle後台進程,並在必要時重啟這些後台進程。另外,PMON還會為執行個體做另外一件事,這就是向Oracle TNS監聽器註冊這個執行個體。   DBWR(資料檔案寫入進程): 負責將更改的資料從資料庫緩衝區快取寫入資料檔案,是負責緩衝儲存區管理的一個ORACLE後台進程。當緩衝區中的一緩衝區被修改,它被標誌為“弄髒”,DBWR的主要任務是將“弄髒”的緩衝區寫入磁碟,使緩衝區保持“乾淨”。由於緩衝儲存區的緩衝區填入資料庫或被使用者進程弄髒,未用的緩衝區的數目減少。當未用的緩衝區下降到很少,以致使用者進程要從磁碟讀入塊到記憶體儲存區時無法找到未用的緩衝區時,DBWR將管理緩衝儲存區,使使用者進程總可得到未用的緩衝區。ORACLE採用LRU(LEAST RECENTLY USED)演算法(最近最少使用演算法)保持記憶體中的資料區塊是最近使用的,使I/O最小。 下列情況預示DBWR 要將弄髒的緩衝區寫入磁碟:
   1、當一個伺服器處理序將一緩衝區移入“髒”表,該髒表達到臨界長度 時,該服務進程將通知DBWR進行寫。該臨界長度是為參數DB-BLOCK-WRITE-BATCH 的值的一半。
    2、 當一個伺服器處理序在LRU表中尋找DB-BLOCK-MAX-SCAN-CNT緩衝區時,沒有查到未用的緩衝區,它停止尋找並通知DBWR進行寫。
    3、出現逾時(每次3秒),DBWR 將通知本身。
    4、 當出現檢查點時,LGWR將通知DBWR 
在前兩種情況下,DBWR將髒表中的塊寫入磁碟,每次可寫的塊數由初始化參數 DB-BLOCK-WRITE-BATCH所指定。如果髒表中沒有該參數指定塊數的緩衝區,DB WR從LUR表中尋找另外一個髒緩衝區。
        如果DBWR在三秒內未活動,則出現逾時。在這種情況下DBWR對LRU表尋找指定數目的緩衝區,將所找到任何髒緩衝區寫入磁碟。每當出現逾時,DBWR尋找一個新的緩衝區組。每次由DBWR尋找的緩衝區的數目是為寢化參數DB-BLOCK-WRITE-BATCH的值的二倍。如果資料庫空運轉,DBWR最終將全部緩衝區儲存區寫入磁碟。在出現檢查點時,LGWR指定修改緩衝區表必須寫入到磁碟。  
LGWR(記錄檔寫入進程):該進程將日誌緩衝區寫入磁碟上的一個記錄檔,它是負責管理日誌緩衝區的一個ORACLE後台進程。LGWR進程將自上次寫入磁碟以來的全部日誌項輸出,LGWR輸出: 1、 當使用者進程提交一事務時寫入一個提交記錄。
2、每三秒將日誌緩衝區輸出。 
3、當日誌緩衝區的1/3已滿時將日誌緩衝區輸出。 4、有大於1M 重做日誌緩衝區未被寫入磁碟 5、逾時          LGWR進程同步地寫入到活動的線上從做記錄檔組。如果組中一個檔案被刪除或不可用,LGWR 可繼續地寫入該組的其它檔案。由於日誌緩衝區是一個迴圈緩衝區。當LGWR將日誌緩衝區的日誌項寫入記錄檔後,伺服器處理序可將新的日誌項寫入到該日誌緩衝區。LGWR 通常寫得很快,可確保日誌緩衝區總有空間可寫入新的日誌項。
【注意:】有時候當需要更多的日誌緩衝區時,LWGR在一個事務提交前就將日誌項寫出,而這些日誌項僅當在以後事務提交後才永久化。ORACLE使用快速提交機制,當使用者發出COMMIT語句時,一個提交(COMMIT)記錄立即放入日誌緩衝區,但相應的資料緩衝區改變是被延遲,直到在更有效時才將它們寫入資料檔案。當一個事務提交時,被賦給一個系統修改號(SCN),它同交易記錄項一
起記錄在日誌中。由於SCN記錄在日誌中,以致在並行伺服器選項配置情況下,恢複操作可以同步。   CKPT(檢查點進程,同步資料檔案, 記錄檔,控制檔案):該進程在檢查點出現時,對全部資料檔案的標題進行修改,指示該檢查點。在通常的情況下,該任務由LGWR執行。然而,如果檢查點明顯地降低系統效能時,可使CKPT進程運行,將原來由LGWR進程執行的檢查點的工作分離出來,由CKPT進程實現。對於許多應用情況,CKPT進程是不必要的。只有當資料庫有許多資料檔案,LGWR在檢查點時明顯地降低效能才使CKPT運行。CKPT進程不將塊寫入磁碟,該工作是由DBWR完成的。初始化參數CHECKPOINT-PROCESS控制CKPT進程的使能或使不能。預設時為FALSE。   ARCH(歸檔進程):該進程將已填滿的線上記錄檔拷貝到指定的存放裝置。當日誌是為ARCHIVELOG使用方式、並可自動地歸檔時ARCH進程才存在。 LCKn(封鎖進程):是在具有並行伺服器選件環境下使用,可多至10個進程(LCK0,LCK1 ……,LCK9),用於執行個體間的封鎖。 其他還有一些不是很重要的進程: RECO 恢複
Dnnn 調度進程
Snnn 伺服器
但是每個後台進程都與ORACLE資料庫的不同部分進行互動。   服務進程Server Process 可以分為專用伺服器處理序和共用伺服器處理序。 專用服務進程(Dedicated Server Process):一個服務進程對應一個使用者進程 共用服務進程(MultiTreaded Server Process):一個服務進程對應多個使用者進程,輪流為使用者進程服務。          專用伺服器模式就是說每次在對Oracle進行訪問的時候,Oracle伺服器的Listener會得到這個訪問請求,然後會為這個訪問建立一個新的進程來進行服務。所以說,對於每一個用戶端的訪問,都會產生一個新的進程進行服務,是一種類似一對一的映射關係。這種串連模式的一個很重要的特點就是UGA(使用者全域區)是儲存在PGA(進程全域域)中的,這個特性也很好說明了目前使用者的記憶體空間是按照進程來進行分配的。          共用伺服器串連則是在資料庫的初始化的時候就會建立一批伺服器串連的進程,然後把這些串連進程放入一個串連池來進行管理。初始化的池中的進程數量在資料庫初始化建立的時候是可以手動設定的。在串連建立的時候,Listener首先接受到用戶端的建立串連的請求,然後Listener去產生一個叫做調度器(dipatcher)的進程與用戶端進行串連。 接著來說一下記憶體結構,下圖是Oracle記憶體結構。 與 Oracle 執行個體關聯的基本記憶體結構包括: 系統全域區 (SGA):由所有伺服器處理序和後台進程共用 程式全域區 (PGA):專用於每一個伺服器處理序或後台進程。每一個 進程使用一個 PGA 系統全域共用區System Global Area(SGA) SGA是一塊巨大的共用記憶體地區,是包含執行個體的資料和控制資訊的記憶體區。他被看做是Oracle 資料庫的一個大緩衝池,這裡的資料可以被ORACLE的各個進程共用。其大小可以通過如下語句查看:   SQL> select * from v$sga; NAME VALUE -------------------- ------------------------------- Fixed Size 1218992 Variable Size 96470608 Database Buffers 184549376 Redo Buffers 2973696 SQL> select * from v$sgastat; ………… POOL NAME BYTES ------------ -------------------------- ------------------------------------ large pool PX msg pool 206208 large pool free memory 3988096 java pool free memory 4194304 608 rows selected.   SGA 包含以下資料結構: 資料庫緩衝區快取(Database buffer cache):緩衝從資料庫檢索的資料區塊。這些緩衝是對應所有資料檔案中的一些被使用到的資料區塊。讓他們能夠在記憶體中進行操作。在這個層級裡沒有系統檔案,,使用者資料檔案,臨時資料檔案,復原段檔案之分。也就是任何檔案的資料區塊都有可能被緩衝。資料庫的任何修改都在該緩衝裡完成,並由DBWR進程將修改後的資料寫入磁碟。   重做日誌緩衝區(Redo log buffer):快取重做資訊(用於執行個體恢複),直到可以將其寫入磁碟中儲存的物理重做記錄檔。對資料庫的任何修改都按順序被記錄在該緩衝,然後由LGWR進程將它寫入磁碟。這些修改資訊可能是DML語句,如(Insert,Update,Delete),或DDL語句,如(Create,Alter,Drop等)。 重做日誌緩衝區的存在是因為記憶體到記憶體的操作比較記憶體到硬碟的速度快很多,所以重作日誌緩衝區可以加快資料庫的操作速度,但是考慮的資料庫的一致性與可恢複性,資料在重做日誌緩衝區中的滯留時間不會很長。所以重作日誌緩衝區一般都很小,大於3M之後的重作日誌緩衝區已經沒有太大的實際意義。 共用池(Shared pool):緩衝可在使用者間共用的各個結構。共用池是SGA中最關鍵的記憶體片段,特別是在效能和延展性上。一個太小的共用池會扼殺效能,使系統停止,太大的共用池也會有同樣的效果,將會消耗大量的CPU來管理這個共用池。不正確的使用共用池只會帶來災難。 大池(Large Pool):是一個可選地區,可為某些大型進程(如 Oracle 備份和恢複操作、I/O 伺服器處理序)提供大量記憶體配置。大池並不是因為大而得名,而是因為它用來分配較大的記憶體,處理比共用池更大的記憶體。從Oracle8i開始引用。 Java 池:用於 JAVA 虛擬機器 (JVM) 中特定會話的所有Java 代碼和資料。 Oracle 8I 以後,Oracle 在核心中加入了對Java的支援。該程式緩衝區就是為Java 程式保留的。如果不用Java程式沒有必要改變該緩衝區的預設大小。 Streams 池:由 Oracle Streams 使用通過使用 Enterprise Manager 或SQL*Plus 啟動執行個體,可以顯示為SGA 分配的記憶體量。   程式全域區 (PGA) 是包含各個伺服器處理序的資料及控制資訊的記憶體區。Oracle 伺服器處理序為客戶機的請求提供服務。每個伺服器處理序都有自己專用的PGA,這個 PGA 是在伺服器處理序啟動時建立的。由該伺服器處理序對PGA 進行獨佔訪問,只能通過對 PGA 執行操作的Oracle 代碼對 PGA 進行讀寫訪問。使用動態 SGA 基礎結構時,可以在不關閉執行個體的情況下,更改資料庫緩衝區快取、共用池、大型池和 Java 池以及Streams 池的大小。 Oracle 資料庫使用初始化參數建立並配置記憶體結構。例如,SGA_TARGET 參數可指定 SGA 的總大小。如果SGA_TARGET 設定為 0,則會禁用“自動共用記憶體管理”。

本文出自 “linux on the way” 部落格,請務必保留此出處http://linuxtro.blog.51cto.com/1239505/289197

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.