Oracle實例和Oracle數據庫(Oracle體系結構)
https://blog.csdn.net/cH3RUF0tErmB3yH/article/details/79124391
--==========================================
--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.實例與數據庫的相應關系是一對一或多對一的關系
最後說一下,我堅持原創,若我寫的對大家有幫助,麻煩大家轉發或者關註一下,也是對我的一點鼓舞和動力。
Oracle實例和Oracle數據庫(Oracle體系結構)