1. 程式人生 > 其它 >Oracle資料庫簡介2

Oracle資料庫簡介2

Oracle資料庫簡介

一、介紹

Oracle資料庫系統是美國Oracle(甲骨文)公司提供的以分散式資料庫為核心的一組軟體產品,是目前最流行的客戶/伺服器(Client/Server,C/S)或瀏覽器/伺服器(Browser/Server,B/S)體系結構的資料庫之一。

Oracle資料庫是目前世界上使用最為廣泛的資料庫管理系統,作為一個通用的資料庫系統,它具有完整的資料管理功能;作為一個關係資料庫,它是一個完備關係的產品;作為分散式資料庫它實現了分散式處理功能。

截止至2015年06月,Oracle資料庫最新版本為Oracle Database 12c。

二、特點

1、完整的資料管理功能:

  • 資料的大量性
  • 資料的儲存的永續性
  • 資料的共享性
  • 資料的可靠性

2、完備關係的產品:

  • 資訊準則—關係型DBMS的所有資訊都應在邏輯上用一種方法,即表中的值顯式地表示
  • 保證訪問的準則
  • 檢視更新準則—只要形成檢視的表中的資料變化了,相應的檢視中的資料同時變化
  • 資料物理性和邏輯性獨立準則

3、分散式處理功能:

Oracle資料庫自第5版起就提供了分散式處理能力,到第7版就有比較完善的分散式資料庫功能了,一個Oracle分散式資料庫由Oracler DBMS、sql*Net、SQL*CONNECT和其他非Oracle的關係型產品構成。

4、用ORACLE能輕鬆的實現資料倉庫的操作。

優點:

  • 可用性強
  • 可擴充套件性強
  • 資料安全性強
  • 穩定性強

三、Oracle體系架構

Oracle體系結構包括很多基本元件,下面簡要介紹一下幾個常見元件。

1、Oracle Server(伺服器)

Oracle伺服器是最大的概念,包含多種檔案結構、程序結構和記憶體結構;但是,處理SQL語句時,並非所有這些結構都會用到。某些結構用於提高資料庫的效能,確保該資料庫在遇到軟體或硬體錯誤時可以恢復,或者執行維護該資料庫所需的其它任務。Oracle伺服器包含兩部分:Oracle Instance(例項)和Oracle Database(資料庫)。

2、Oracle Instance(例項)

Oracle Instance(例項)的定義:訪問Oracle Database的一個手段;一個instance對應一個且也只能對應一個database,而一個database可以有多個instance來訪問它,也就是說instance和database的多對一的關係,在典型的情況下,一臺機器上裝的oracle,他們倆是一對一的關係,對應叢集方式(簡稱RAK)是多對一;instance也是由兩個部分組成:記憶體(memory)和後臺程序(background process)。

memory由兩部分構成:SGA(system global area,系統全域性區)和PGA(program global area,程式全域性區);一個例項就一個SGA,SGA是例項的基本組成部分;一個server process啟動的時候,就有一個PGA;oracle是一個狂吃記憶體的軟體,記憶體主要消耗在SGA上。

說明:instance是活的東西,易於消失,oracle沒有啟動的話,也就沒有instance。

2.1 SGA結構

SGA是動態的結構,其大小由SGA_MAX_SIZE指定。

2.1.1 共享池shared pool

用於儲存最近使用過的SQL語句和資料字典。它包括兩個部分,即庫快取(library cache)和資料字典快取(dictionary cache)兩部分組成。

下面是改變共享池的命令:

Alter system set SHARED_POOL_SIZE=64M;

庫快取用於儲存使用的SQL語句,而資料字典快取用於儲存最近使用過的資料字典。它們的大小都需要使用共享池來確定而不能自己設定。

2.1.2 database buffer cache資料快取記憶體區

它用於儲存最近訪問的資料塊,由多個小緩衝區組成。DB_BLOCK_SIZE則確定了資料塊的大小。

Alter system set DB_CACHE_SIZE=96M;

在執行SELECT或DML時,資料都是從資料檔案讀取到快取記憶體區執行的,即資料的訪問和操作是在記憶體中完成的。

2.1.3 redo log buffer日誌緩衝區

用於記錄例程的變化,其尺寸由LOG_BUFFER來定義。當執行DDL或DML時,伺服器程序首先會將變化記錄到日誌緩衝區,然後才會修改資料的快取記憶體。

2.1.4 large pool大池和JAVA池(可選)

如果安裝或使用JAVA的話就需要使用JAVA池。

2.2 後臺程序結構

Oracle中process(程序)分為三類:background process(後臺程序)、server process(伺服器程序)和user process(使用者程序)。其實server process也屬於後臺程序,oracle中對程序進行了細化,這裡說的background process主要是專注於資料庫核心的程序,而server process主要是用於處理客戶端和伺服器連線的程序。

Oracle有許多必須的後臺程序,它是執行Oracle服務時必須的。

2.2.1 DBWR

用於將資料快取記憶體中的髒資料寫入到資料檔案中。所謂髒資料就是發生改變的資料。

2.2.2 PMON

用於監視伺服器程序的執行,並在其失敗時清除這個程序。

2.2.3 CKPT

用於發出檢查點,用於同步資料庫的資料檔案、控制檔案和重做檔案。

2.2.4 LGWR

用於將日誌緩衝區的內容寫入到重做日誌中去。

2.2.5 SMON

系統監控程序。用於自動恢復例項,合併空閒空間和釋放臨時段。

2.2.6 其它程序

用於執行Oracle服務時的其它後臺程序。

3、Oracle Database(資料庫)

我們先看兩個概念:connection(連結)和session(會話)。一個connection主要是指oracle客戶端與後臺伺服器建立的連結,即客戶端與伺服器之間的通道。只有當連結建立起來以後,才建立session會話。

從物理結構分析,Oracle Database主要包括三種檔案型別:Data files(資料檔案)、Control files(控制檔案)和Redo Log files(重做日誌檔案),它們是oracle的核心檔案,除此之外還有Parameter file(引數檔案)、Archived Log files(歸檔日誌檔案)以及Password file(口令檔案)等。

3.1 Data files(資料檔案)

用於儲存資料庫資料,它包括資料字典,使用者資料,UNDO資料,臨時資料等。資料庫邏輯上由一個或多個表空間Tablespace組成,而表空間在物理上由一個或多個數據檔案組成。

3.2 Control files(控制檔案)

用於記錄和維護資料庫的物理結構。

3.3 Redo Log files(重做日誌檔案)

用於記錄資料庫的變化,當例程出現失敗或介質失敗時可以使用它進行恢復資料庫。當DDL或DML時,事務會寫到日誌緩衝區,在特定時刻會由LGWR將這些日誌寫入重做日誌檔案。資料庫中至少有兩個日誌檔案,它們是迴圈使用的。

3.4 Archived Log files(歸檔日誌檔案)

它是重做日誌的備份,它會儲存全部的重做歷史記錄。

3.5 Password file(口令檔案)和Parameter file(引數檔案)

口令檔案主要用於存放超級使用者的口令及其他特權使用者的使用者名稱和口令。兩個檔案都儲存在<安裝路徑>/database資料夾中。

四、Oracle資料庫的輯邏結構

Oracle資料庫在邏輯上是由許多表空間構成,主要分為系統表空間和非系統表空間。非系統表空間記憶體儲著各項應用的資料、索引、程式等相關資訊。

邏輯儲存結構主要包括資料塊(datablocks),資料區(extents),資料段(segments),表空間(tablespace),這些邏輯結構使Oracle可以精細地控制磁碟空間的使用。

1、表空間

一個數據庫被分割為數個被稱作表空間(tablespace)的邏輯儲存單位,每個表空間內儲存的是一組相關的邏輯物件。

每個資料庫都在邏輯上被劃分為一個或多個表空間。使用者需要為每個表空間建立一個或多個數據檔案來物理地儲存屬於此表空間的邏輯物件。一個表空間所有資料檔案的大小就是此表空間的可用資料儲存量。資料庫的資料實際儲存在構成各個表空間的資料檔案中。

我們準備上線一個較大的Oracle應用系統時,應該建立它所獨佔的表空間,同時定義物理檔案的存放路徑和所佔硬碟的大小。

資料檔案與表空間的關係:

2、段

段是為一個特定邏輯結構分配的一組資料區(extents)。

按照段所儲存資料的特徵,將段分為四種類型,即資料段、索引段、回退段和臨時段。

當一個段內已有的資料區裝滿之後,Oracle動態地分配新空間。換句話說,段內已有的資料區裝滿之後,Oracle為這個段分配新的資料區。因為資料區是隨需分配的,因此一個段內的資料區在物理上未必是連續的。

段中的資料可以跨多個數據檔案,但不能跨多個表空間。

3、資料區

資料區是由一次儲存空間分配而獲得的數個連續資料塊的集合,用於儲存資訊。

當用戶建立資料表時,Oracle為此表的資料段分配一個包含若干資料塊的初始資料區。雖然此時資料表中還沒有資料,但是在此初始資料區中的資料塊已經為插入新資料做好了準備。

如果一個段的初始資料區中的資料塊都已裝滿,且有新資料插入需要空間時,Oracle自動為這個段分配一個增量資料區。增量資料區是一個段中繼已有資料區之後分配的後續資料區,它的容量大於或等於之前的資料區。

對於本地管理的表空間,Oracle在為新的資料區尋找可用空間時,首先選擇一個屬於此表空間的資料檔案,再搜尋此資料檔案的點陣圖查詢連續的資料塊。如果此資料塊中沒有足夠的連續可用空間,Oracle將查詢其他資料檔案。

4、資料塊

在Oracle資料庫中,最精細的資料儲存粒度是資料塊,一個數據塊相當於磁碟上一段連續的物理儲存空間。

與資料塊對應的,所有資料在作業系統級的最小物理儲存單位是位元組(byte)。每種作業系統都有一個被稱為塊容量(block size)的引數。Oracle每次獲取資料時,總是訪問整數個(Oracle)資料塊,而不是按照作業系統塊的容量訪問資料。

資料塊分配的預設容量由初始化引數DB_BLOCK_SIZE決定。除了這個引數,管理員還可以額外設定5個數據塊容量引數。Oracle資料庫在資料塊中分配、利用儲存空間。資料塊容量應該設為作業系統塊容量的整數倍(同時小於資料塊容量的最大限制),以便減少不必要的I/O操作。Oracle資料塊是Oracle可以使用和分配的最小儲存單位。

在Oracle中,不論資料塊中儲存的是表(table)、索引(index)或簇表(clustered data),其內部結構都是類似的。

段,資料區,資料塊之間的關係: