Oracle數據庫的體系結構包括四個方面
數據庫的物理結構
邏輯結構
內存結構及進程
物理結構
物理數據庫結構是由構成數據庫的操作系統文件所決定
Oracle數據庫文件包括
數據文件(Data File)
數據文件用來存儲數據庫中的全部數據
例如數據庫表中的數據和索引數據
通常以為*
dbf格式
例如:userCIMS
dbf
日志文件(Redo Log File)
日志文件用於記錄數據庫所做的全部變更(如增加
刪除
修改)
以便在系統發生故障時
用它對數據庫進行恢復
名字通常為Log*
dbf格式
如
Log
CIMS
dbf
Log
CIMS
dbf
控制文件(Control File)
每個Oracle數據庫都有相應的控制文件
它們是較小的二進制文件
用於記錄數據庫的物理結構
如
數據庫名
數據庫的數據文件和日志文件的名字和位置等信息
用於打開
存取數據庫
名字通常為Ctrl*ctl 格式
如Ctrl
CIMS
ctl
配置文件
配置文件記錄Oracle數據庫運行時的一些重要參數
如
數據塊的大小
內存結構的配置等
名字通常為init*
ora 格式
如
initCIMS
ora
邏輯結構
Oracle數據庫的邏輯結構描述了數據庫從邏輯上如何來存儲數據庫中的數據
邏輯結構包括表空間
段
區
數據塊和模式對象
數據庫的邏輯結構將支配一個數據庫如何使用系統的物理空間
模式對象及其之間的聯系則描述了關系數據庫之間的設計
一個數據庫從邏輯上說是由一個或多個表空間所組成
表空間是數據庫中物理編組的數據倉庫
每一個表空間是由段(segment)組成
一個段是由一組區(extent)所組成
一個區是由一組連續的數據庫塊(database block)組成
而一個數據庫塊對應硬盤上的一個或多個物理塊
一個表空間存放一個或多個數據庫的物理文件(即數據文件)
一個數據庫中的數據被邏輯地存儲在表空間上
表空間(tablespace)
Oracle數據庫被劃分為一個或多個稱為表空間的邏輯結構
它包括兩類表空間
System表空間和非System表空間
其中
System表空間是安裝數據庫時自動建立的
它包含數據庫的全部數據字典
存儲過程
包
函數和觸發器的定義以及系統回滾段
除此之外
還能包含用戶數據
一個表空間包含許多段
每個段有一些可以不連續的區組成
每個區由一組連續的數據塊組成
數據塊是數據庫進行操作的最小單位
每個表空間對應一個或多個數據文件
每個數據文件只能屬於一個表空間
數據庫塊(database block)
數據庫塊也稱邏輯塊或ORACLE塊
它對應磁盤上一個或多個物理塊
它的大小由初始化參數db
block
size(在文件init
ora中)決定
典型的大小是
k
Pckfree 和pctused 兩個參數用來優化數據塊空間的使用
區(extent)
區是由一組連續的數據塊所組成的數據庫存儲空間分配的邏輯單位
段(segment)
段是一個或多個不連續的區的集合
它包括一個表空間內特定邏輯結構的所有數據
段不能跨表空間存放
Oracle數據庫包括數據段
索引段
臨時段
回滾段等
模式對象(schema object)
Oracle數據庫的模式對象包括表
視圖
序列
同意詞
索引
觸發器
存儲
過程等
關於它們將重點在後面章節介紹
.Oracle Server系統進程與內存結構
當在計算機服務器上啟動Oracle數據庫後
稱服務器上啟動了一個Oracle實例(Instance)
ORACLE 實例(Instance)是存取和控制數據庫的軟件機制
它包含系統全局區(SGA)和ORACLE進程兩部分
SGA是系統為實例分配的一組共享內存緩沖區
用於存放數據庫實例和控制信息
以實現對數據庫中數據的管理和操作
進程是操作系統中一個極為重要的概念
一個進程執行一組操作
完成一個特定的任務
對ORACLE數據庫管理系統來說
進程由用戶進程
服務器進程和後台進程所組成
當用戶運行一個應用程序時
系統就為它建立一個用戶進程
服務器進程處理與之相連的用戶進程的請求
它與用戶進程相通訊
為相連的用戶進程的ORACLE請求服務
為了提高系統性能
更好地實現多用戶功能
ORACLE還在系統後台啟動一些後台進程
用於數據庫數據操作
系統進程的後台進程主要包括
SMON 系統監控進程
(system monitor)負責完成自動實例恢復和回收分類(sort)表空間
PMON 進程監控進程
(process monitor)實現用戶進程故障恢復
清理內存區和釋放該進程所需資源等
DBWR 數據庫寫進程
數據庫緩沖區的管理進程
在它的管理下
數據庫緩沖區中總保持有一定數量的自由緩沖塊
以確保用戶進程總能找到供其使用的自由緩沖塊
LGWR 日志文件寫進程
是日志緩沖區的管理進程
負責把日志緩沖區中的日志項寫入磁盤中的日志文件上
每個實例只有一個LGWR進程
ARCH 歸檔進程
(archiver process)把已經填滿的在線日志文件拷貝到一個指定的存儲設備上
僅當日志文件組開關(switch)出現時
才進行ARCH操作
ARCH不是必須的
而只有當自動歸檔可使用或者當手工歸檔請求時才發出
RECO 恢復進程
是在具有分布式選項時使用的一個進程
主要用於解決引用分布式事務時所出現的故障
它只能在允許分布式事務的系統中出現
LCKn 封鎖進程
用於並行服務器系統
主要完成實例之間的封鎖
內存結構(SGA)
SGA是Oracle為一個實例分配的一組共享內存緩沖區
它包含該實例的數據和控制信息
SGA在實例啟動時被自動分配
當實例關閉時被收回
數據庫的所有數據操作都要通過SGA來進行
SGA中內存根據存放信息的不同
可以分為如下幾個區域
Buffer Cache
存放數據庫中數據庫塊的拷貝
它是由一組緩沖塊所組成
這些緩沖塊為所有與該實例相鏈接的用戶進程所共享
緩沖塊的數目由初始化參數DB_BLOCK_BUFFERS確定
緩沖塊的大小由初始化參數DB_BLOCK_SIZE確定
大的數據塊可提高查詢速度
它由DBWR操作
b
日志緩沖區Redo Log Buffer
存放數據操作的更改信息
它們以日志項(redo entry)的形式存放在日志緩沖區中
當需要進行數據庫恢復時
日志項用於重構或回滾對數據庫所做的變更
日志緩沖區的大小由初始化參數LOG_BUFFER確定
大的日志緩沖區可減少日志文件I/O的次數
後台進程LGWR將日志緩沖區中的信息寫入磁盤的日志文件中
可啟動ARCH後台進程進行日志信息歸檔
c
共享池Shared Pool
包含用來處理的SQL語句信息
它包含共享SQL區和數據字典存儲區
共享SQL區包含執行特定的SQL語句所用的信息
數據字典區用於存放數據字典
它為所有用戶進程所共享
Cursors
一些內存指針
執行待處理的SQL語句
其他信息區
除了上述幾個信息區外
還包括一些進程之間的通訊信息(如封鎖信息)
在多線索服務器配置下
還有一些程序全局區的信息
請求隊列和響應隊列等
From:http://tw.wingwit.com/Article/program/Oracle/201311/18784.html