對於初接觸Oracle 數據庫的人來說,很容易混淆的兩個概念便是Oracle 實例和Oracle 數據庫。這兩算法
概念不一樣於SQL sever下的實例與數據庫,固然也有些類似之處。只是在SQL server咱們根本不須要花費太sql
多的精力去搞清SQL實例和數據庫,由於它簡單易於理解。下面簡要說明一下SQL實例、數據庫,更多的是講數據庫
述Oracle下的實例及數據庫。緩存
1、SQL server中的實例與數據庫服務器
1.SQL中的實例指的是一個SQL server服務器上僅有一個缺省實例。缺省實例名即爲機器名ServerName網絡
(或IP),若是在同一臺機器上再安裝SQL server,咱們能夠對實例命名如ServerName/InstanceName。oracle
即一臺SQL server服務器上能夠存在多個不一樣的實例。一個實例下能夠存在多個不一樣的數據庫。ide
對於不一樣實例下的數據庫的訪問,使用ServerName/InstanceName:PortNo便可實現訪問,缺省實例工具
爲ServerName:PortNo。spa
2.對不一樣的實例配置IP地址,相關的訪問協議,端口等等。
3.實例的可訪問性須要啓動該實例對應的相關服務。此處須要注意的是實例名和實例的服務名並非相
同的。缺省的實例的服務名爲MSSQLSERVER,而命名實例的服務名爲MSSQL$INSTANCE_NAME。
4.實例的相關功能性的設置能夠經過外圍應用配置來實現。
5.上述完成後,便可實現對數據庫的訪問。
2、Oracle 實例
一個Oracle Server由一個Oracle實例和一個Oracle數據庫組成。
即:Oracle Server = Oracle Instance + Oracle Database
Oracle實例
包括了內存結構(SGA)和一系列後臺進程(Background Process),二者合起來稱爲一個Oracle實例
即:Oracle Instance = SGA + Background Process
Oracle內存結構
包含系統全局區(SGA)和程序全局區(PGA)
即Oracle Memory Structures = SGA + PGA
SGA由服務器和後臺進程共享
PGA包含單個服務器進程或單個後臺進程的數據和控制信息,與幾個進程共享的SGA 正相反,PGA是
只被一個進程使用的區域,PGA 在建立進程時分配在終止進程時回收。即由服務器進程產生。
1.SGA
系統全局區SGA,SGA = 數據緩衝區+ 重作日誌緩衝區+ 共享池+ 大池+ Java 池+ 流池
系統全局區是動態的,由參數SGA_MAX_SIZE決定。
查看當前系統的SGA大小:show parameter sga_max_size;
要修改:alter system set sga_max_size=1200m scope=spfile;
由於實例內存的分配是在數據庫啓動時進行的,因此要讓修改生效,要重啓數據庫。
ORACLE 10G 引入了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的備份恢復操做、IO服務器進程等
Java 池:該程序緩衝區就是爲Java 程序保留的。若是不用Java程序沒有必要改變該緩衝區的默認大小
流池(Stream pool):被Oracle流所使用
2.PGA
是爲每一個用戶進程鏈接ORACLE數據庫保留的內存
進程建立時分配,進程結束時釋放,只能被一個進程使用
PGA包括瞭如下幾個結構:
()排序區
()遊標狀態區
()會話信息區
()堆棧區
由參數:pga_aggregate_target 決定
3.幾類進程:用戶進程,服務器進程,後臺進程,其它可選進程
用戶進程
在用戶鏈接數據庫產生,請求oracle服務器鏈接,必需要先創建一個鏈接,不會直接和oracle服務器鏈接
服務器進程
當鏈接實例並創建用戶會話時產生,獨立服務器或者提供共享服務器都能產生
後臺進程
維持物理和內存之間的聯繫,用來管理數據庫的讀寫,恢復和監視等工做。
Server Process主要是經過他和user process進行聯繫和溝通,並由他和user process進行數據的交換。
在Unix機器上,Oracle後臺進程相對於操做系統進程,也就是說,一個Oracle後臺進程將啓動一個操做
系統進程。
在Windows機器上,Oracle後臺進程相對於操做系統線程,打開任務管理器,咱們只能看到一個
ORACLE.EXE的進程,可是經過另外的工具,就能夠看到包含在這裏進程中的線程。
必需要有的後臺進程
DBWn -->數據庫寫進程
PMON -->程序監控進程
SMON -->系統監控進程
LGWr -->日誌寫進程
CKPT -->檢查點進程
可選進程:
ARCN 歸檔進程
RECO
Snnn
pnnn
DBWn(數據庫寫進程)
負責將修改過的數據塊從數據庫緩衝區高速緩存寫入磁盤上的數據文件中
寫入條件:
發生檢查點
髒緩存達到限制
沒有自由的緩存
超時發生
表空間離線
表空間只讀
表被刪除或者截斷
開始備份表空間
能夠修改數據寫進程的數量
alter system set db_writer_processes=3 scope=spfile;
PMON(程序監控進程)
清除失效的用戶進程,釋放用戶進程所用的資源。
如PMON將回滾未提交的工做,釋放鎖,釋放分配給失敗進程的SGA資源。
清除失敗的進程
回滾事務
釋放鎖
釋放其餘資源
SMON(系統監控進程)
檢查數據庫的一致性,當啓動失敗時完成災難恢復等
實列恢復時,前滾全部重作日誌中的文件,打開數據庫爲了用戶能訪問,回滾未提交的事務,釋放臨時表空間
清除臨時空間,聚結空閒空間,從不可用的文件中恢復事務的活動,OPS中失敗節點的實例恢復
清除OBJ$表
縮減回滾段
使回滾段脫機
LGWr(日誌寫進程)
將重作日誌緩衝區中的更改寫入在線重作日誌文件
條件:
提交的時候(commit)
達到/滿
每隔秒
有大於M 重作日誌緩衝區未被寫入磁盤
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進程試圖創建與遠程服務器的通訊,當故障消除後,RECO進程自動解決全部懸而未決的會話。
Server Process(服務進程)
分爲專用服務進程(Dedicated Server Process)和共享服務進程(MultiTreaded Server Process)
專用服務進程:一個服務進程對應多個用戶進程,輪流爲用戶進程服務。
用戶進程(User Process)、服務進程(Server Process)、後臺進程(Background Processes)的啓動
用戶進程: 數據庫用戶請求Oralce server會話時被啓動
服務進程:當用戶會話啓動後,鏈接到Oracle實例時該進程被啓動
後臺進程:當Oracle實例被啓動時,啓動相關的後臺進程
3、Oracle 數據庫
一系列物理文件的集合
包括控制文件、數據文件、聯機日誌文件、參數文件、密碼文件等
即:Oracle Database = Controlfile + datafile + logfiel + spfile +..
1.控制文件(controlfile)
數據庫的名字,檢查點信息,數據庫建立的時間戳
全部的數據文件,聯機日誌文件,歸檔日誌文件信息
備份信息等
2.數據文件(datafile)
包含了用戶和應用程序的全部數據
--查看數據文件信息
3.聯機日誌文件
記錄了用戶對數據庫的全部操做,一個數據庫中至少要有兩個日誌組文件,每一個日誌組中至少有一個日誌成員
日誌組中的多個日誌成員是互爲鏡相關係
4.歸檔日誌文件
Oracle能夠運行在兩種模式之中,歸檔模式和非歸檔模式。在歸檔模式中,爲了保存用戶的全部修改,
在聯機日誌文件切換後和被覆蓋之間系統將他們另外保存成一組連續的文件系列,該文件系列就是歸檔日誌文件。
用戶恢復意外狀況出現的數據丟失、異常等。
5.參數文件(pfile和spfile)
initSID.ora或init.ora文件,一般位於:$ORACLE_BASE/admin/<SID>/pfile
初始化文件記載了許多數據庫的啓動參數,如內存,控制文件,進程數等,在數據庫啓動的時候加載(Nomount時加載)
6.其餘文件
密碼文件:用於Oracle 的具備sysdba權限用戶的認證.
告警日誌文件:報警日誌文件(alert.log或alrt.ora),記錄數據庫啓動,關閉和一些重要的出錯信息
查看路徑:select value from v$PARAMETER where name =‘background_dump_dest’;
7.數據庫邏輯組織結構
表空間、段、區、塊
一個數據庫由一個或多個表空間組成,一個表空間只能屬於一個數據庫
一個表空間由一個或多個多個數據文件組成,一個數據文件只能屬於一個表空間
一個數據文件由一個或多個操做系統塊組成,每個操做系統塊只能數以一個數據文件
一個表空間能夠包含一個或多個段,一個段只能屬於一個表空間
一個段由一個或多個區組成,每個區只能屬於一個段
一個區由一個或多個Oracle 塊組成,每個Oracle塊只能屬於一個區
一個區只能屬於一個數據文件,數據文件的空間能夠分配到一個或多個區
一個Oracle 塊由一個或多個操做系統塊組成,一個操做系統塊是一個Oracle塊的一部分
4、Oracle實例和Oracle數據庫的關係
1.一個實例可以裝載及打開僅僅一個數據庫
2.一個數據庫可以被多個實例裝載並打開
3.實例與數據庫的對應關係是一對一或多對一的關係