Oracle例項和Oracle資料庫(Oracle體系結構)
--==========================================
--Oracle例項和Oracle資料庫(Oracle體系結構)
--==========================================
/*
對於初接觸Oracle 資料庫的人來講。非常easy混淆的兩個概念即是Oracle 例項和Oracle 資料庫。
這兩概念不同於SQL sever下的例項與資料庫,當然也有些類似之處。
僅僅是在SQL server我們根本不須要花費太
多的精力去搞清SQL例項和資料庫,由於它簡單易於理解。
以下簡要說明一下SQL例項、資料庫,很多其它的是講
述Oracle下的例項及資料庫。
一、SQL server中的例項與資料庫
1.SQL中的例項指的是一個SQL serverserver上僅有一個預設例項。預設例項名即為機器名ServerName(或IP)。假設在同一臺機器上再安裝SQL server,我們能夠對例項命名如ServerName/InstanceName。
即一臺SQL serverserver上能夠存在多個不同的例項。一個例項下能夠存在多個不同的資料庫。
對於不同例項下的資料庫的訪問。使用ServerName/InstanceName:PortNo就可以實現訪問,預設例項
為ServerName:PortNo。
2.對不同的例項配置IP地址。相關的訪問協議。埠等等。
3.例項的可訪問性須要啟動該例項相應的相關服務。此處須要注意的是例項名和例項的服務名並非同樣的。預設的例項的服務名為MSSQLSERVER,而命名例項的服務名為MSSQL$INSTANCE_NAME。
4.例項的相關功能性的設定能夠通過外圍應用配置來實現。
5.上述完畢後,就可以實現對資料庫的訪問。
二、Oracle 例項
一個Oracle Server由一個Oracle例項和一個Oracle資料庫組成。
即:Oracle Server = Oracle Instance + Oracle Database
Oracle例項
包括了記憶體結構(SGA)和一系列後臺程序(BackgroundProcess),兩者合起來稱為一個Oracle例項
即:Oracle Instance = SGA + Background Process
Oracle記憶體結構
包括系統全域性區(SGA)和程式全域性區(PGA)
即Oracle Memory Structures = SGA + PGA
SGA由server和後臺程序共享
PGA包括單個server程序或單個後臺程序的資料和控制資訊,與幾個程序共享的SGA 正相反,PGA是僅僅被一個程序使用的區域,PGA 在建立程序時分配在終止程序時回收。
即由server程序產生。
1.SGA
系統全域性區SGA,SGA = 資料緩衝區+ 重做日誌緩衝區+ 共享池+ 大池+ Java 池+ 流池
系統全域性區是動態的,由引數SGA_MAX_SIZE決定。
檢視當前系統的SGA大小:show parametersga_max_size;
要改動:alter system set sga_max_size=1200m scope=spfile;
由於例項記憶體的分配是在資料庫啟動時進行的。所以要讓改動生效。要重新啟動資料庫。
ORACLE10G 引入了ASMM(自己主動共享記憶體管理),DBA僅僅需設定SGA_TARGET,ORACLE就會自己主動的對共享池、JAVA池、大池、資料緩衝區、流池進行自己主動調配。取消自己主動調配就是 sga_target設為。
資料緩衝區(Database buffer cache):儲存從資料檔案裡獲得的資料塊的映象大小由db_cache_size 決定
檢視:show parameter db_cache_size;
設定:alter system set db_cache_size=800M;
重做日誌緩衝區(Redo log buffer):對資料庫的不論什麼改動都按順序被記錄在該緩衝,然後由LGWR程序將
它寫入磁碟,大小由LOG_BUFFER決定
共享池(Shared pool):是SGA中最關鍵的記憶體片段,共享池主要由庫快取(共享SQL區和PL/SQL區)和資料字典快取組成。它的作用是存放頻繁使用的sql,在有限的容量下。資料庫系統依據一定的演算法決定何時釋放共享池中的sql。
庫快取大小由shared_pool_size 決定
檢視:show parameter shared_pool_size
改動:alter system set shared_pool_size=120m;
資料字典快取:
儲存資料庫中資料檔案、表、索引、列、使用者和其它資料物件的定義和許可權資訊,大小由shared_pool_size 決定。不能單獨指定
大池(Large pool):是一個可選的區域。用於一些大型的程序如Oracle的備份恢復操作、IOserver程序等
Java 池:該程式緩衝區就是為Java 程式保留的。
假設不用Java程式沒有必要改變該緩衝區的預設大小
流池(Stream pool):被Oracle流所使用
2.PGA
是為每個使用者程序連線ORACLE資料庫保留的記憶體
程序建立時分配,程序結束時釋放,僅僅能被一個程序使用
PGA包括了以下幾個結構:
()排序區
()遊標狀態區
()會話資訊區
()堆疊區
由引數:pga_aggregate_target 決定
3.幾類程序:使用者程序。server程序,後臺程序,其它可選程序
使用者程序
在使用者連線資料庫產生,請求oracleserver連線,必須要先建立一個連線。不會直接和oracleserver連線
server程序
當連線例項並建立使用者會話時產生。獨立server或者提供共享server都能產生
後臺程序
維持物理和記憶體之間的聯絡,用來管理資料庫的讀寫,恢復和監視等工作。
ServerProcess主要是通過他和user process進行聯絡和溝通。並由他和user process進行資料的交換。
在Unix機器上。Oracle後臺程序相對於作業系統程序。也就是說。一個Oracle後臺程序將啟動一個操作
系統程序。
在Windows機器上,Oracle後臺程序相對於作業系統執行緒。開啟工作管理員。我們僅僅能看到一個
ORACLE.EXE的程序。可是通過另外的工具。就能夠看到包括在這裡程序中的執行緒。
必須要有的後臺程序
DBWn -->資料庫寫程序
PMON -->程式監控程序
SMON -->系統監控程序
LGWr -->日誌寫程序
CKPT -->檢查點程序
可選程序:
ARCN 歸檔程序
RECO
Snnn
pnnn
DBWn(資料庫寫程序)
負責將改動過的資料塊從資料庫緩衝區快速快取寫入磁碟上的資料檔案裡
寫入條件:
發生檢查點
髒快取達到限制
沒有自由的快取
超時發生
表空間離線
表空間僅僅讀
表被刪除或者截斷
開始備份表空間
能夠改動資料寫程序的數量
altersystem set db_writer_processes=3 scope=spfile;
PMON(程式監控程序)
清除失效的使用者程序,釋放使用者程序所用的資源。
如PMON將回滾未提交的工作,釋放鎖。釋放分配給失敗程序的SGA資源。
清除失敗的程序
回滾事務
釋放鎖
釋放其它資源
SMON(系統監控程序)
檢查資料庫的一致性,當啟動失敗時完畢災難恢復等
實列恢復時,前滾全部重做日誌中的檔案,開啟資料庫為了使用者能訪問,回滾未提交的事務,釋放暫時表空間
清除暫時空間,聚結空暇空間,從不可用的檔案裡恢復事務的活動,OPS中失敗節點的例項恢復
清除OBJ$表
縮減回滾段
使回滾段離線
LGWr(日誌寫程序)
將重做日誌緩衝區中的更改寫入線上重做日誌檔案
條件:
提交的時候(commit)
redo log buffer達到1/3滿
每隔3秒
有大於1MB 重做日誌緩衝區未被寫入磁碟
DBWR須要寫入的資料的SCN號大於LGWR 記錄的SCN號,DBWR 觸發LGWR寫入
超時
在dbwr程序些之前寫日誌
CKPT(檢查點程序)
DBWR/LGWR的工作原理。造成了資料檔案,日誌檔案,控制檔案的不一致,CKPT程序負責同步資料檔案。
日誌檔案和控制檔案
CKPT會更新資料檔案/控制檔案的頭資訊
條件:
在日誌切換的時候
資料庫用immediate ,transaction ,normal選項shutdown資料庫的時候
依據初始話檔案LOG_CHECKPOINT_INTERVAL、LOG_CHECKPOINT_TIMEOUT、FAST_START_IO_TARGET 的設定的數值來確定
使用者觸發
ARCN(歸檔程序)
在每次日誌切換時把已滿的日誌組進行備份或歸檔
條件:
資料庫以歸檔方式執行的時候
RECO
負責解決分佈事物中的故障。Oracle能夠連線遠端的多個數據庫,當由於網路問題,有些事物處於懸而未決的狀態。
RECO程序試圖建立與遠端server的通訊,當故障消除後,RECO程序自己主動解決全部懸而未決的會話。
ServerProcess(服務程序)
分為專用服務程序(Dedicated Server Process)和共享服務程序(MultiTreaded Server Process)
專用服務程序:一個服務程序相應多個使用者程序。輪流為使用者程序服務。
使用者程序(User Process)、服務程序(Server Process)、後臺程序(Background Processes)的啟動
使用者程序: 資料庫使用者請求Oralce server會話時被啟動
服務程序:當用戶會話啟動後,連線到Oracle例項時該程序被啟動
後臺程序:當Oracle例項被啟動時,啟動相關的後臺程序
三、Oracle 資料庫
一系列物理檔案的集合
包括控制檔案、資料檔案、聯機日誌檔案、引數檔案、password檔案等
即:Oracle Database = Controlfile + datafile + logfiel +spfile +..
1.控制檔案(controlfile)
資料庫的名字,檢查點資訊,資料庫建立的時間戳
全部的資料檔案,聯機日誌檔案,歸檔日誌檔案資訊
備份資訊等
2.資料檔案(datafile)
包括了使用者和應用程式的全部資料
--檢視資料檔案資訊
3.聯機日誌檔案
記錄了使用者對資料庫的全部操作,一個數據庫中至少要有兩個日誌組檔案,每個日誌組中至少有一個日誌成員
日誌組中的多個日誌成員是互為鏡相關係
4.歸檔日誌檔案
Oracle能夠執行在兩種模式之中。歸檔模式和非歸檔模式。在歸檔模式中。為了儲存使用者的全部改動,
在聯機日誌檔案切換後和被覆蓋之間系統將他們另外儲存成一組連續的檔案系列,該檔案系列就是歸檔日誌檔案。
使用者恢復意外情況出現的資料丟失、異常等。
5.引數檔案(pfile和spfile)
initSID.ora或init.ora檔案,通常位於:$ORACLE_BASE/admin//pfile
初始化檔案記載了很多資料庫的啟動引數。如記憶體。控制檔案。程序數等,在資料庫啟動的時候載入(Nomount時載入)
6.其它檔案
password檔案:用於Oracle 的具有sysdba許可權使用者的認證.
告警日誌檔案:報警日誌檔案(alert.log或alrt.ora)。記錄資料庫啟動,關閉和一些重要的出錯資訊
檢視路徑:select value from v$PARAMETER where name=‘background_dump_dest’;
7.資料庫邏輯組織結構
表空間、段、區、塊
一個數據庫由一個或多個表空間組成,一個表空間僅僅能屬於一個數據庫
一個表空間由一個或多個多個數據檔案組成,一個數據檔案僅僅能屬於一個表空間
一個數據檔案由一個或多個作業系統塊組成,每個作業系統塊僅僅能數以一個數據檔案
一個表空間能夠包括一個或多個段,一個段僅僅能屬於一個表空間
一個段由一個或多個區組成,每個區僅僅能屬於一個段
一個區由一個或多個Oracle 塊組成,每個Oracle塊僅僅能屬於一個區
一個區僅僅能屬於一個數據檔案,資料檔案的空間能夠分配到一個或多個區
一個Oracle 塊由一個或多個作業系統塊組成,一個作業系統塊是一個Oracle塊的一部分
四、Oracle例項和Oracle資料庫的關係
1.一個例項能夠裝載及開啟僅僅一個數據庫
2.一個數據庫能夠被多個例項裝載並開啟
3.例項與資料庫的相應關係是一對一或多對一的關係
最後說一下,我堅持原創,若我寫的對大家有幫助,麻煩大家轉發或者關注一下,也是對我的一點鼓舞和動力。