Oracle實例和Oracle資料庫
--==========================================
--Oracle實例和Oracle資料庫(Oracle體系結構)
--==========================================
/*
對於初接觸Oracle 資料庫的人來講,很容易混淆的兩個概念即是Oracle 實例和Oracle 資料庫。這兩概念不同於SQL sever下的實例與資料庫,當然也有些相似之處。只是在SQL server我們根本不需要花費太
多的精力去搞清SQL實例和資料庫,因為它簡單易於理解。下面簡要說明一下SQL實例、資料庫,更多的是講
述Oracle下的實例及資料庫。
一、SQL server中的實例與資料庫
1.SQL中的實例指的是一個SQL server伺服器上僅有一個預設實例。預設實例名即為機器名ServerName(或IP),如果在同一台機器上再安裝SQL server,我們可以對實例命名如ServerName/InstanceName。
即一台SQL server伺服器上可以存在多個不同的實例。一個實例下可以存在多個不同的資料庫。
對於不同實例下的資料庫的訪問,使用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由伺服器和後台進程共享
PGA包含單個伺服器進程或單個後台進程的數據和控制信息,與幾個進程共享的SGA 正相反,PGA是只被一個進程使用的區域,PGA 在創建進程時分配在終止進程時回收。即由伺服器進程產生。
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的備份恢復操作、IO伺服器進程等
Java 池:該程序緩衝區就是為Java 程序保留的。如果不用Java程序沒有必要改變該緩衝區的默認大小
流池(Stream pool):被Oracle流所使用
2.PGA
是為每個用戶進程連接ORACLE資料庫保留的內存
進程創建時分配,進程結束時釋放,只能被一個進程使用
PGA包括了以下幾個結構:
()排序區
()游標狀態區
()會話信息區
()堆棧區
由參數:pga_aggregate_target 決定
3.幾類進程:用戶進程,伺服器進程,後台進程,其它可選進程
用戶進程
在用戶連接資料庫產生,請求oracle伺服器連接,必須要先建立一個連接,不會直接和oracle伺服器連接
伺服器進程
當連接實例並建立用戶會話時產生,獨立伺服器或者提供共享伺服器都能產生
後台進程
維持物理和內存之間的聯繫,用來管理資料庫的讀寫,恢復和監視等工作。
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進程試圖建立與遠程伺服器的通信,當故障消除後,RECO進程自動解決所有懸而未決的會話。
ServerProcess(服務進程)
分為專用服務進程(Dedicated Server Process)和共享服務進程(MultiTreaded Server Process)
專用服務進程:一個服務進程對應多個用戶進程,輪流為用戶進程服務。
用戶進程(User Process)、服務進程(Server Process)、後台進程(Background Processes)的啟動
用戶進程: 資料庫用戶請求Oralce server會話時被啟動
服務進程:當用戶會話啟動後,連接到Oracle實例時該進程被啟動
後台進程:當Oracle實例被啟動時,啟動相關的後台進程
三、Oracle 資料庫
一系列物理文件的集合
包括控制文件、數據文件、聯機日誌文件、參數文件、密碼文件等
即: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.其他文件
密碼文件:用於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.實例與資料庫的對應關係是一對一或多對一的關係
最後說一下,我堅持原創,若我寫的對大家有幫助,麻煩大家轉發或者關注一下,也是對我的一點鼓勵和動力。
TAG:菜鳥學Python |