歡迎光臨
每天分享高質量文章

萬字詳解Oracle架構、原理、行程,學會世間再無複雜架構

學習是一個循序漸進的過程,從面到點、從宏觀到微觀,逐步滲透,各個擊破,對於Oracle, 怎麼樣從宏觀上來理解呢?先來看一個圖,這個圖取自於教材,這個圖對於從整體上理解ORACLE 的體系結構組件,非常關鍵。

 

首先看張圖:

 

對於一個資料庫系統來說,假設這個系統沒有運行,我們所能看到的和這個資料庫相關的無非就是幾個基於操作系統的物理檔案,這是從靜態的角度來看,如果從動態的角度來看呢,也就是說這個資料庫系統運行起來了,能夠對外提供服務了,那就意外著資料庫系統啟動了自己的一個實體,綜合以上2個角度,Oracle如何定義上述描述呢?

我們來引入第一個概念,Oracle服務器,所謂Oracle服務器是一個資料庫管理系統,它包括一個Oracle實體(動態)和一個Oracle資料庫(靜態)。Oracle實體是一個運行的概念(如操作系統的行程),提供了一種訪問,Oracle資料庫的方式,始終打開一個,並且只能打開一個Oracle資料庫,Oracle實體有SGA和一些後臺服務行程組成,在後臺服務行程當中,DBWn PMON CKPT LGWR SMON是必備的後臺行程,而ad queue、rac、shared server、ad replication則是可選的,之所以可選,要們是因為離開它Oracle也能正常運行,要麼是一些高級的功能才可以用得到。

Oracle資料庫是一個被統一處理的的資料的集合,從物理角度來看包括三類檔案資料檔案,控制檔案,重做日誌檔案。從邏輯角度來看,Oracle資料庫至少包含一個表空間,表空間至少包含一個段,段由區做成,區有塊組成。需要註意的是表空間可以包含若干個資料檔案,段可以跨同一個表空間的多個資料檔案,區只能在同一個資料檔案內。

 

Oracle還設計了其他的關鍵檔案用來為整個系統服務,如配置檔案、密碼檔案、歸檔日誌檔案,還有還有用戶行程和服務行程,現在可以簡單理解下執行SQL陳述句就要用到這2個行程。

 

SGA

SHARE POOL

(共享池)

用如下命令可以調整

ALTER SYSTEM SET

SHARED_POOL_SIZE=64M

LIBRARY CACHE

(庫高速快取)

1儲存最近使用的SQLPL/SQL陳述句信息

2包括SHARED SQLSHARED PL/SQL

3LRU演算法管理

4大小由SHARE POOL大小決定

DATA DICTIONARY CACHE

(資料字典高速快取)

1資料庫中最近使用的定義的集合

2包含資料庫檔案,表,索引,列,用戶,權限和其他的資料庫物件相關信息

3在語法分析階段,服務器行程會在資料字典中查找用於物件解析和驗證訪問的信息

4將資料字典信息高速快取到記憶體中,可縮短查詢和DML的響應時間

5大小由共享池的大小決定

DATABASE BUFFER CACHE

(資料緩衝區高速快取)

1儲存已從資料檔案檢索到的資料的複本

2大幅提高讀取和更新資料的性能

3使用LRU演算法管理

4主塊的大小由DB_BLOCK_SIZE確定

REDO LOG BUFFER

(重做日誌緩衝區)

1記錄對資料庫資料塊作的全部更改

2主要用來恢復

3其中記錄的更改被稱作重做條目

4重做條目包含用於重新構建或重做更改的信息

5大小由LOG_BUFFER定義

LARGE POOL

(大型池)

1 SGA可選的記憶體區

2分擔了共享池的一部分工作

3用於共享服務器的UGA

4用於I/O服務器行程

5備份和恢復操作或RMAN

6並行執行訊息緩衝區(前提PARALLEL_POOL_SIZE=TRUE

7不使用LRU串列

8大小由LARGE_POOL_SIZE確定

JAVA POOL

JAVA池)

1儲存JAVA命令服務分析要求

2安裝和使用JAVA時必須的

3大小有JAVA_POOL_SIZE確定

PGA

PRIVATE SQL AREA

(專用SQL區)

 

專用SQL 區的位置取決於為會話建立的連接型別。在專用服務器環境中,專用SQL 區位於各自服務器行程的PGA中。在共享服務器環境中,專用SQL 區位於SGA 中。

管理專用SQL 區是用戶行程的職責。用戶行程可以分配的專用SQL 區的數目始終由

初始化引數OPEN_CURSORS 來限制。該引數的預設值是50

PERSISTEN AREA

(永久區)

包含系結信息,並且只在關閉游標時釋放

RUNTIME AREA

(運行時區)

在執行請求時的第一步創建。對於INSERTUPDATE DELETE命令,該區在執行陳述句後釋放,對於查詢操作,該區只在提取所有行或取消查詢後釋放。

SESSION MEMORY

(會話記憶體)

包含為保留會話變數以及與該會話相關的其它信息而分配的記憶體。對於共享服務器環境,該會話是共享的而不是專用的。

SQL WORK AREAS

SQL工作區)

用於大量占用記憶體的操作,如排序、散列聯接、位圖合併和位圖創建。

工作區的大小可進行控制和調整

 

下表是後臺行程總結

DBWn

DBWn 延遲寫入資料檔案,直到發生下列事件之一:

 增量或正常檢查點

 灰資料緩衝區的數量達到閾值

 行程掃描指定數量的塊而無法找到任何空閑緩衝區時

 出現超時

 實時應用集群(Real Application Clusters, RAC) 環境中出現ping 請求

 使一般表空間或臨時表空間處於脫機狀態

 使表空間處於只讀樣式

 刪除或截斷表

 執行ALTER TABLESPACE 表空間名BEGIN BACKUP 操作

LGWR

LGWR 在下列情況下執行從重做日誌緩衝區到重做日誌檔案的連續寫入:

 當提交事務時

 當重做日誌緩衝區的三分之一填滿時

 當重做日誌緩衝區中記錄了超過1 MB 的更改時

 DBWn 將資料庫緩衝區高速快取中修改的塊寫入資料檔案以前

 每隔三秒

SMON

例程恢復

 前滾重做日誌中的更改

 打開資料庫供用戶訪問

 回退未提交的事務處理

 合併空閑空間

 回收臨時段

PMON

行程失敗後,後臺行程PMON 通過下麵的方法進行清理:

 回退用戶的當前事務處理

 釋放當前保留的所有表鎖或行鎖

 釋放用戶當前保留的其它資源

 重新啟動已失效的調度程式

CKPT

 在檢查點發信號給DBWn

 使用檢查點信息更新資料檔案的標頭

 使用檢查點信息更新控制

啟動檢查點的原因如下:

 確保定期向磁盤寫入記憶體中發生修改的資料塊,以便在系統或資料庫失敗時不會丟失資料

 縮短例程恢復所需的時間。只需處理最後一個檢查點後面的重做日誌條目以啟動恢復操作

 確保提交的所有資料在關閉期間均已寫入資料檔案

CKPT 寫入的檢查點信息包括檢查點位置、系統更改號、重做日誌中恢復操作的起始位置以及有關日誌的信息等等。

註:CKPT 並不將資料塊寫入磁盤,或將重做塊寫入聯機重做日誌。

ARCn

 可選的後臺行程

 設置ARCHIVELOG 樣式時自動歸檔聯機重做日誌

 保留資料庫的全部更改記錄

 

最後,舉一個用戶提交SQL陳述句的的例子來結束本文,如果用戶想提交SQL陳述句,那麼首先你必須要連接到Oracle實體,連接到Oracle實體有三種途徑:如果用戶登陸到運行Oracle實體的操作系統上,則通過行程間通信進行訪問2C/S結構訪問3三層結構。發起連接的應用程式或工具通常稱為用戶行程,連接發起後,Oracle服務器就會創建一個行程來接受連接,這個行程就成為服務行程,服務器行程代表用戶行程與Oracle實體進行通信,在專用服務器連接樣式下,用戶行程和服務行程是1對1的關係,在共享服務器樣式下,多個用戶行程可能共享一個服務行程。當服務器行程開始和Oracle實體進行通信時,一個會話就被創建了。顯然處理一個查詢要經過語法分析、系結、執行、提取等階段。

Oracle的基礎架構知識

筆者在學習Oracle之前,特地先去瞭解了OracleDB的框架。這樣對Oracle資料庫有一個整體的認知,有由高屋建領地的作用。磨刀不誤砍菜功吧。Oracle資料庫主要由一下5部分組成:

1. 物理結構

 

Oracle物理結構由控制檔案、資料檔案、重做日誌檔案、引數檔案、歸檔檔案、口令檔案組成

 

一個資料庫中的資料儲存在磁盤上物理檔案,被使用時,調入記憶體。其中控制檔案、資料檔案、重做日誌檔案、跟蹤檔案及警告日誌(trace files、alert files)屬於資料庫檔案;引數檔案(parameter file)口令檔案(password file)是非資料庫檔案。

  • 資料檔案:儲存資料的檔案.資料檔案典型地代表了根據他們使用的磁盤空間和數量所決定的一個Oracle資料庫的容積。

        於此我們需要知道的是,一個資料庫中的資料是儲存在磁盤上的物理檔案,被使用時才被調入記憶體中的。其中控制檔案、資料檔案、重做日誌檔案、跟蹤檔案、警告檔案屬於資料庫檔案。引數檔案、口令檔案屬於非資料庫檔案。

 

  • 控制檔案:包含維護和驗證資料庫完整性的必要信息、例如,控制檔案用於識別資料檔案和重做日誌檔案,一個資料庫至少需要一個控制檔案。控制檔案內容有:

    • 資料庫名

    • 表空間信息

    • 所有資料檔案的名字和位置

    • 所有redo日誌檔案的名字和位置

    • 當前的日誌序列號

    • 檢查點信息

    • 關於redo日誌和歸檔的當前狀態信息

        控制檔案的使用過程是控制檔案把Oracle引導到資料庫檔案的其它部分。啟動一個實體時,Oracle從引數檔案中讀取控制檔案的名字和位置。安裝資料庫時,Oracle打開控制檔案。最終打開資料庫時,Oracle從控制檔案中讀取資料檔案的串列並打開其中的每個檔案。

  • 重做日誌檔案,含對資料庫所做的更改記錄,這樣萬一齣現故障可以啟用資料恢復。一個資料庫至少需要兩個重做日誌檔案。

  • 跟蹤檔案及警告日誌(Trace Files and Alert Files),

    • 跟蹤檔案是在instance 中運行的每一個後臺行程都有一個跟蹤檔案(trace file)與之相連。Trace file記載後臺行程所遇到的重大事件的信息。

    • 警告日誌( Alert Log)是一種特殊的跟蹤檔案,每個資料庫都有一個跟蹤檔案,同步記載資料庫的訊息和錯誤。

  • 引數檔案:包括大量影響Oracle資料庫實體功能的設定,如以下設定:

    • 資料庫控制檔案的定位

    • Oracle用來快取從磁盤上讀取的資料的記憶體數量

    • 預設的優化程式的選擇

        和資料庫檔案相關,執行兩個重要的功能,為資料庫指出控制檔案和為資料庫指出歸檔日誌的標的。

  • 歸檔檔案:是重做日誌檔案的脫機副本,這些副本可能對於從介質失敗中進行恢復很必要。

  • 口令檔案:認證哪些用戶有權限啟動和關閉Oracle例程.

2. 邏輯結構(表空間、段、區、塊)

  • 表空間:是資料庫中的基本邏輯結構,一系列資料檔案的集合。

  • 段:是物件在資料庫中占用的空間.

  • 區:是為資料一次性預留的一個較大的儲存空間.

  • 塊:ORACLE最基本的儲存單位,在建立資料庫的時候指定.

3. 記憶體分配(SGA和PGA)

  • SGA:是用於儲存資料庫信息的記憶體區,該信息為資料庫行程所共享。它包含Oracle服務器的資料和控制信息,它是在Oracle服務器所駐留的計算機的實際記憶體中得以分配,如果實際記憶體不夠再往虛擬記憶體中寫。

  • PGA:包含單個服務器行程或單個後臺行程的資料和控制信息,與幾個行程共享的SGA正相反,PGA 是只被一個行程使用的區域,PGA在創建行程時分配,在終止行程時回收.

4. 後臺行程

包括資料寫行程(Database Writer,DBWR)、日誌寫行程(Log Writer,LGWR)、系統監控(System Monitor、SMON)、行程監控(Process Monitor、PMON)、檢查點行程(Checkpoint  Process、CKPT)、歸檔行程、服務行程、用戶行程。

  • 資料寫行程:負責將更改的資料從資料庫緩衝區高速快取寫入資料檔案

  • 日誌寫行程:將重做日誌緩衝區中的更改寫入在線重做日誌檔案

  • 系統監控:檢查資料庫的一致性如有必要還會在資料庫打開時啟動資料庫的恢復

  • 行程監控:負責在一個Oracle 行程失敗時清理資源

  • 檢查點行程:負責在每當緩衝區高速快取中的更改永久地記錄在資料庫中時,更新控制檔案和資料檔案中的資料庫狀態信息。該行程在檢查點出現時,對全部資料檔案的標題進行修改,指示該檢查點。在通常的情況下,該任務由LGWR執行。然而,如果檢查點明顯地降低系統性能時,可使CKPT行程運行,將原來由LGWR行程執行的檢查點的工作分離出來,由CKPT行程實現。對於許多應用情況,CKPT行程是不必要的。只有當資料庫有許多資料檔案,LGWR在檢查點時明顯地降低性能才使CKPT運行。CKPT行程不將塊寫入磁盤,該工作是由DBWR完成的。
    init.ora檔案中CHECKPOINT_PROCESS引數控制CKPT行程的使能或使不能。預設時為FALSE,即為使不能。

  • 歸檔行程:在每次日誌切換時把已滿的日誌組進行備份或歸檔

  • 服務行程:用戶行程服務。

  • 用戶行程:在客戶端,負責將用戶的SQL陳述句傳遞給服務行程,並從服務器段拿回查詢資料。

5. SCN(System ChangeNumber):

 

  • 系統改變號,一個由系統內部維護的序列號。當系統需要更新的時候自動增加,他是系統中維持資料的一致性和順序恢復的重要標誌。

 

Oracle架構實現原理、含五大行程解析

Oracle架構,講述了Oracle RDBMS的底層實現原理,是Oracle DBA性能調優和排錯的基礎理論。深入理解Oracle架構,能夠讓我們在Oracle的路上走的更遠。本章節主要是在對RDBMS的底層組件功能和實現原理有一定的瞭解的情況下,結合自身的工作經驗提出了對Oracle調優和排錯的思路。當然,對Oracle體系結構的理解是一個深遠的過程,需要不斷的更新修改。

 

Oracle RDBMS架構圖

 

一般我們所說的Oracle指的是Oracle RDBMS(Relational databases Management system),一套Oracle資料庫管理系統,也稱之為Oracle Server。而Oracle Server主要有兩大部分:Oracle Server = 實體 + 資料庫(Instance和Database是相互獨立的)。

  • 資料庫 = 資料檔案 + 控制檔案 +日誌檔案

  • 實體 = 記憶體池 + 後臺行程

 

所以可以細分為:Oracle Server = 記憶體池 + 後臺行程 + 資料檔案 + 控制檔案 + 日誌檔案

 

一臺Oracle
Server支持創建多個Database,而且每個Datacase是互相隔離而獨立的。不同的Database擁有屬於自己的全套相關檔案,例如:有各自的密碼檔案,引數檔案,資料檔案,控制檔案和日誌檔案。

Database由一些物理檔案(如:存放在儲存設備中的二維表檔案)組成。二維表儲存在Database中,但Database的內容不能被用戶直接讀取,用戶必須通過Oracle instance才能夠訪問Database,一個Instance只能連接一個Database,但是一個Database可以被多個Instance連接。

將上面的Oracle RDBMS架構圖進行抽象分類,可以將Oracle架構抽象為:Oracle體系 = 記憶體結構 + 行程結構 + 儲存結構


 

記憶體結構

Oracle Instance是Oracle RDBMS的核心之一,負責RDBMS的管理功能。Oracle Instance主要由記憶體池SGA和後臺行程組成。

 

系統全域性區SGA

Oracle的架構不是很難也不是很容易,認真學肯定能學會。

記憶體池SGA的預設Size,會在安裝Oracle的時候會根據LinuxOS的sysctl.conf引數檔案來決定:

kernel.shmall = 2097152kernel.shmmax = 2147483648kernel.shmmni = 4096kernel.sem = 250 32000 100 128net.ipv4.ip_local_port_range = 1024 65000net.core.rmem_default = 1048576net.core.rmem_max = 1048576net.core.wmem_default = 262144net.core.wmem_max = 262144

 

查看SGA的Size:

SQL> conn /as sysdbaConnected.SQL> show user;USER is "SYS"SQL> select * from v$sga;NAME              VALUE-------------------- ----------Fixed Size      2022144Variable Size         503317760Database Buffers     1627389952Redo Buffers           14753792
SQL> show sgaTotal System Global Area 2147483648 bytes     #對應kernel.shmmax = 2147483648Fixed Size          2022144 bytesVariable Size         503317760 bytesDatabase Buffers     1627389952 bytesRedo Buffers           14753792 bytes

SGA(System Global Area)是與Oracle性能關係最大的核心部分,也是對Oracle進行調優的主要考量。SGA記憶體池會在Instance啟動時被分配,在Instance關閉時被釋放。在一定範圍內,SGA可以在Instance運行時通過自動方式響應DBA的指令。如果想對SGA進行調優還必須理解SGA所包含如下幾種資料結構:

高速快取緩衝區(資料庫緩衝區)——oracle執行SQL陳述句的區域。

例如在更新資料時,用戶執行的SQL陳述句不會直接對磁盤上的資料檔案進行更改操作,而是首先將資料檔案複製到資料庫緩衝區快取(就是說資料庫緩衝區里會存放著SQL相關資料檔案副本),再更改應用於資料庫緩衝區快取中這些資料塊的副本。而且資料塊副本將在快取中保留一段時間,直至其占用的緩衝區被另一個資料庫改寫為止(緩衝區Size有限)。

在查詢資料時,為了提高執行效率,查詢的資料也要經過快取。建立的Session會計算出那些資料塊包含關鍵的行,並將它們複製到資料庫緩衝區中進行快取。此後,相關關鍵行會傳輸到Session的PGA作進一步處理。這些資料塊也會在資料庫快取區快取中保留一段時間。

一般情況下,被頻繁訪問的資料塊會存在於資料庫緩衝區快取中,從而最大程度地減少對磁盤I/O的需要。

那什麼時候會將被更新的資料塊副本寫入到磁盤中的資料檔案呢?

答案:如果在緩衝區快取中儲存的資料塊與磁盤上的資料塊不同時,那麼這樣的緩衝區常稱為”臟緩衝區”,臟緩衝區中的資料塊副本就必須寫回到磁盤的資料檔案中。

調優:資料庫緩衝區快取的大小會對性能產生至關重要的影響,具體需要多大的Size才能成為最佳配比還要結合實際的生產環境而言。總體而言可以依據以下兩點基本要求來判斷:

1. 快取應足夠大,以便能快取所有被頻繁訪問的資料塊。如果快取過小,那麼將導致磁盤I/0活動過多,因為頻繁訪問的資料塊持續從磁盤讀取,並由其他資料塊使用和重寫,然後再從磁盤讀取。
2. 但也不能太大,以至於它會將極少被訪問的塊也一併加入到快取中,這樣會增長在快取中搜索的時間。

資料庫緩衝區快取在Instance啟動時被分配。從資料庫9i開始,可以隨時將其調大或調小。可以採用手動方式重調,也可以根據工作負荷自動重調大小(事務)。
修改緩衝區DB_CACHE_SIZE地方法:

#Step1. 查看SGA的大小:因為DB_CACHE_SIZE的size受SGA的影響SQL> show parameter sga_max_size;NAME                     TYPE    VALUE------------------------------------ ----------- ------------------------------sga_max_size                 big integer 2G
#Step2. 查看show parameter shared_pool_size的大小SQL> show parameter shared_pool_size;                   NAME                     TYPE    VALUE------------------------------------ ----------- ------------------------------shared_pool_size             big integer 0
#Step3. 計算DB_CACHE_SIZE的大小:shared_pool_size + db_cache_size = SGA_MAX_SIZE * 70%
#Step4. 修改DB_CACHE_SIZE的大小SQL> alter system set db_cache_size=1433M scope=spfile sid='demo';
System altered.
SQL> conn sys /as sysdbaEnter password: ********Connected.SQL> shutdown immediateDatabase closed.Database dismounted.ORACLE instance shut down.SQL> startupORACLE instance started.
Total System Global Area 2147483648 bytesFixed Size          2022144 bytesVariable Size         503317760 bytesDatabase Buffers     1627389952 bytesRedo Buffers           14753792 bytesDatabase mounted.Database opened.
SQL> show parameter db_cache_size

日誌緩衝區

日誌緩衝區是小型的、用於短期儲存將寫入到磁盤上的重做日誌的變更向量的臨時區域。主要作用是提供更加快的日誌處理效率。

共享池

共享池的大小也對性能產生重要影響:

1. 它應該足夠大,以便快取所有頻繁執行的代碼和頻繁訪問的物件定義。如果共享池過小,則性能下降,因為服務器會話將反覆搶奪其中的空間來分析陳述句,此後,這些陳述句會被其他陳述句重寫,在重新執行時,將不得不再次分析。如果共享池小於最優容量,則性能將下降。但有一個最小容量,如果低於此限度,則陳述句將失敗。
2. 但也不能過大,以至於連僅執行一次的陳述句也要快取。過大的共享池也會對性能產生不良影響,因為搜索需要的時間過長。

確定最優容量是一個性能調整問題,大多數資料庫都需要一個數百MB的共享池。有些應用程式需要1GB以上的共享池,但很少有應用程式能夠在共享池小於100MB時充分運行。共享池內有下列三種資料結構:

 

  • 庫緩衝:儲存最近執行的代碼

  • 資料字典快取:儲存最近使用的物件定義

  • PL/SQL緩衝區:儲存的PL/SQL物件是過程、函式、打包的過程、打包的函式、物件型別定義和觸發器。

手動的調整共享池的大小:

select COMPONENT,CURRENT_SIZE,MIN_SIZE,MAX_SIZE from v$sga_dynamic_components;   //顯示可以動態重設大小的SGA組件的當前最大和最小容量
ALTER SYSTEM SET SHARED_POOL_SIZE = 110M;

其他結構

大型池——主要用途是供共享的服務器行程使用。
JAVA池——只有當應用程式需要在資料庫中運行java儲存程式時,才需要java池。

行程結構

行程結構主要有後臺行程和用戶連接行程兩大類。

用戶連接行程

用戶連接行程是連接用戶和Oracle Instance的橋梁。只有在User與Instance建立了連接以後,User才能夠對Oracle Server進行操作。

用戶連接行程 = 用戶行程 + 服務行程 + PGA

用戶行程User Process

當一個Database User請求連接到Oracle Server時,Oracle Server會創建User Process。

User Process的作用:

  • 為Database User與Server Process建立連接

  • 並不會直接與Oracle Server交互

connect連接:是User和Server Process之間的通信通道。

 

 

Server Process服務行程

用於處理Database User和Oracle Server之間的連接。

當一個User與User Process建立了一個connect後,Oracle Server會創建一個Server Process。然後再由User Process與Server Process建立了連接之後,Server Process會通過用戶提交的請求信息來確定與oracle instance建立一個會話。

Server Process的作用:

 

  • 與Oracle Server直接交互

  • 複製執行和傳回結果

Session會話:一個用戶通過User Process(本質是通過Server Process)與Oracle Instance建立連接後稱之為一個會話,一個用戶可以建立多個會話,即同時使用同一個用戶可以多次的連接到同一個實體,也就是說多個session可以使用同一個connect。

程式全域性區PGA


PGA:Oracle Server Process分配來專門用於當前User Session的記憶體區。該區域是私有的,不同的用戶擁有不同的PGA。

PGA包含了Server Process資料和控制信息的記憶體區域。,由下列3個部分組成:

1. 棧空間:儲存Session的變數、陣列等的記憶體空間。
2. Session Info:如果運行的不是多執行緒服務器,會話信息將儲存在PGA中,如果是多執行緒服務器,則儲存在SGA中。
3. 私有SQL區:用來儲存系結變數(binding variables)和運行時緩衝區(runtime buffers)等信息。

Oracle的connect連接和session會話與User Process緊密相關

註意:在RDBMS中由db\_name和instance\_name共同確定一個Database,所以Instance_name被用於Oracle與OS之間的聯繫同時也被用於Oracle Server與外部連接時使用。

所以在User提交連接請求的時候,User Process首先會與Server Process建立Connect,然後Server Process會通過請求中所包含的db\_name和Instance\_name來確定需要且可以被連接的資料庫(RDBMS可以存在多個資料庫),這樣就確保了RDBMS在擁有多個資料庫的情況下,還能夠保證每一個Database的獨立性。而且同一個Database可以被多個屬於這個Databse的不同用戶發起的Instance連接。這一個功能是非常有必要的,因為每一個不同的資料庫中都包含有同名的sys、system等系統用戶。

後臺行程

後臺行程主要是完成資料庫管理任務 ,後臺行程是Oracle Instance和Oracle Database的聯繫紐帶,分為核心行程和非核心行程。

1. 核心行程:核心行程,必須存在,有一個終止,所有資料庫行程全部終止,實體崩潰!其中五大行程全都是核心行程。
2. 非核心行程:完成資料庫的額外功能,非核心行程死亡資料庫不會崩潰!

常用的核心行程:

 

在用戶訪問資料庫時,首先會提交請求,再分配SGA記憶體,創建並啟動後臺行程和實體,最後建立連接和會話。Oracle Server運行過程中必須啟動上面的前五個行程。否則實體無法創建。

查看後臺行程:

SQL> select name,description from v$bgprocess where paddr<>'00';
NAME  DESCRIPTION----- ----------------------------------------------------------------PMON  process cleanupPSP0  process spawner 0MMAN  Memory ManagerDBW0  db writer process 0LGWR  Redo etc.CKPT  checkpointSMON  System Monitor ProcessRECO  distributed recoveryCJQ0  Job Queue CoordinatorQMNC  AQ CoordinatorMMON  Manageability Monitor Process
NAME  DESCRIPTION----- ----------------------------------------------------------------MMNL  Manageability Monitor Process 2

資料庫寫入行程(DBWn)

Server process連接Oracle後,通過資料庫寫行程(DBWn)將資料緩衝區中的“臟緩衝區”的資料塊寫入到儲存結構(資料檔案、磁盤檔案)

Database writer (DBWn)資料庫寫行程:

 

  • 只做一件事,將資料寫到磁盤。就是將資料庫的變化寫入到資料檔案。

  • 該行程最多20 個,即使你有36 個CPU 也只能最多有20 個資料庫寫行程。
    行程名稱DBW0-DBW9 DBWa-DBWj

  • 註意:資料庫寫行程越多,寫資料的效率越高。該行程的個數應該和cpu的個數對應,如果設置的資料庫寫行程數大於CPU 的個數也不會有太明顯的效果,因為CPU 是分時的。

檢查點(CKPT)

Checkpoint (CKPT)檢查點行程:

  • 主要用戶更新資料檔案頭,更新控制檔案和觸發DBWn資料庫寫行程。

  • Ckpt 行程會降低資料庫性能,但是提高資料庫崩潰時,自我恢復的性能。我們可以理解為階段性的儲存資料,一定的條件滿足就觸發,執行DBWn存盤操作。

行程監視行程(PMON)

Process monitor(PMON)行程監測行程:

PMON在後臺行程執行失敗後負責清理資料庫快取和閑置資源,是Oracle的自動維護機制。

 

  • 清除死行程

  • 重新啟動部分行程(如調度行程)

  • 監聽的自動註冊

  • 回滾事務

  • 釋放鎖

  • 釋放其他資

系統監視行程(SMON)

System monitor (SMON)系統監測行程:

  • SMON啟動後會自動的用於在實體崩潰時進行資料庫實體自動恢復。

  • 清除作廢的排序臨時段,回收整理碎片,合併空閑空間,釋放臨時段,維護閃回的時間點。

  • 在老資料庫版本中,當我們大量刪除表的時候,會觀測到SMON行程很忙,直到把所有的碎片空間都整理完畢。

重做日誌檔案和日誌寫入行程

主要用於記錄資料庫的改變和記錄資料庫被改變之前的原始狀態,所以應當對其作多重備份,用於恢復和排錯。

激活LGWR的情況:

 

  • 提交指令

  • 日誌緩衝區超過1/3

  • 每三秒

  • 每次DBWn執行之前

歸檔行程(ARCn)——是非核心行程。


儲存結構

Oracle RDBMS儲存結構主要由Database組成。

又能夠將Database分為物理結構和邏輯結構來理解。

物理結構

Database物理結構:是Database在操作系統中的檔案集合,即:磁盤上的物理檔案,主要由資料檔案、控制檔案、重做日誌檔案、歸檔日誌檔案、引數檔案、口令檔案組成。

Data Files

資料檔案是資料的儲存倉庫:

• 包括所有的資料庫資料
• 只能屬於一個資料庫
• 來自於被稱為”表空間”的資料庫儲存邏輯單元
• 可以直接被讀進記憶體,在執行SQL陳述句的時候,會將相關的資料檔案副本加載如資料緩衝區。
• 通過備份策略可以使資料檔案得到保護

Redo Log Files

重做日誌檔案包含對資料庫所做的更改操作記錄,在Oracle發生故障時能夠恢復資料。
能夠恢復資料的原理:重做日誌檔案會按時間的順序,將應用於資料庫的一連串的變更向量(做了什麼操作)儲存起來(即將變更的地方標記起來)。其中包含了所有已經完成操作的信息和完成操作之前的資料庫狀態。如果資料檔案受損,就可以將這些變更向量應用於資料檔案備份來進行重做(重建)工作,將它恢復到發生故障的那一刻前的狀態。重做日誌檔案又分為下麵兩種型別:

 

  • 聯機重做日誌檔案:記錄連續的資料庫操作

  • 歸檔日誌檔案Archived Log Files:用於時間點恢復,當RedoLogFiles存滿時,會對這些日誌進行歸檔備份,以便以後還原資料時使用。

    • 查看redo log info:

SQL> select member from v$logfile;    # v$logfile資料字典,記錄了redolog檔案的串列 MEMBER-------------------------------------------------------------------------------- /u01/oradata/demo/redo03.log /u01/oradata/demo/redo02.log /u01/oradata/demo/redo01.log

Control Files

 

控制檔案包含維護和驗證資料庫完整性的必要的信息。

它記錄了聯機重做日誌檔案、資料檔案的位置、更新的歸檔日誌檔案的位置。它還儲存著維護資料庫完整性所需的信息,如資料庫名。控制檔案是以二進制型式儲存的,用戶無法修改控制檔案的內容。控制檔案不過數MB,卻起著至關重要的作用。

Parameter File

實體引數檔案,當啟動oracle實體時,SGA結構會根據此引數檔案的設置記憶體,後臺行程會據此啟動。

Password File

用戶通過提交username/password來建立會話,Oracle根據儲存在資料字典的用戶定義對用戶名和口令進行驗證。

邏輯結構

表空間就是典型的Oracle邏輯結構型別 —— 裡面存放著若干的資料檔案。

表空間:用於儲存資料庫物件的邏輯空間,表空間是在資料庫中開闢的一個空間,用於存放資料庫的物件,它是信息儲存的最大邏輯單位,是存放資料庫檔案的地方,其中資料又被存放在表空間中的資料檔案中。一個資料庫可以由多個表空間組成,Oracle的調優就是通過表空間來實現的。(Oracle資料庫獨特的高級應用)

表空間的作用:分類管理、批量處理; 將瑣碎的磁盤檔案整合、抽象處理成為邏輯結構。這樣更加便於我們去管理資料庫。

邏輯空間到物理空間的映射

段、區和塊:


 

執行一條寫入的SQL陳述句時在RDBMS中都發生了什麼

1. 將SQL陳述句加載入資料庫緩衝區
2. 將SQL陳述句要操作的資料檔案副本加載入資料庫緩衝區
3. 執行SQL陳述句,修改資料檔案副本,形成“臟緩衝區”
4. CKPT檢測到“臟緩衝區”,呼叫DBWn
5. 在DBWn運行之前,先運行了LGWR,將資料檔案的原始狀態和資料庫的改變記錄到Redo Log Files
6. 運行DBWn,將“臟緩衝區的內容寫入到資料檔案”
7. 同時CKPT修改控制檔案和資料檔案頭
8. SMON回收不必要的空閑資源

最後

最後我們舉個例子來看看Oracle RDBMS是怎麼運作的



  • User訪問Oracle Server之前提交一個請求(包含了db_name、instance_name、username、password等信息),Oracle Server接收到請求並通過Password File的驗證後,分配SGA記憶體池,啟動後臺行程同時創建並啟動實體。

  • 在啟動實體之後User Process與Server Process建立Connect。

  • 再通過Server process和Oracle Instance完成建立Sesscion。

  • 用戶執行SQL陳述句,由server process接收到並直接與Oracle交互。

  • SQL陳述句通過Server Process到達Oracle Instance,再將SQL載入資料庫緩衝區。

  • Server Process通知Oracle Database將與SQL陳述句相關的資料塊副本加載到緩衝區中。

  • 在資料庫快取區執行SQL陳述句,並產生”臟緩衝區”。

  • 由CKPT檢查點行程檢查到”臟緩衝區”,並呼叫DBWn資料庫寫行程,但在DBWn執行之前,應該由LGWR先將資料檔案的原始狀態、資料庫的改變等信息記錄到Redo Log Files。

  • 將更新的內容寫入到磁盤中的資料檔案。

  • 傳回結果給用戶

    已同步到看一看
    赞(0)

    分享創造快樂