Oracle實例和數據庫

--==================================
--Oracle實例和數據庫(Oracle體系結構)
--==================================

一、Oracle實例

Oracle Server:
一個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 池+ 流池
       ORACLE 10G 引入了ASMM(自動共享內存管理),DBA只需設置SGA_TARGET,ORACLE就會自動的對共享池、JAVA池、大池、數據緩衝區、流池進行自動調配。取消自動調配就是sga_target設爲。
          
       數據緩衝區(Database buffer cache):存儲從數據文件中獲得的數據塊的鏡像

       重做日誌緩衝區(Redo log buffer):對數據庫的任何修改都按順序被記錄在該緩衝,然後由LGWR進程將它寫入磁盤,大小由LOG_BUFFER決定

       共享池(Shared pool):是SGA中最關鍵的內存片段,共享池主要由庫緩存(共享SQL區和PL/SQL區)和數據
           字典緩存組成,它的作用是存放頻繁使用的sql,在有限的容量下,數據庫系統根據一定的算法決
           定何時釋放共享池中的sql。        

           數據字典緩存:
              存儲數據庫中數據文件、表、索引、列、用戶和其它數據對象的定義和權限信息
              大小由shared_pool_size 決定,不能單獨指定

       大池(Large pool):是一個可選的區域,用於一些大型的進程如Oracle的備份恢復操作、IO服務器進程等

       Java 池:該程序緩衝區就是爲Java 程序保留的。如果不用Java程序沒有必要改變該緩衝區的默認大小

       流池(Stream pool):被Oracle流所使用

                    
    2.PGA

       是爲每個用戶進程連接ORACLE數據庫保留的內存
       進程創建時分配,進程結束時釋放,只能被一個進程使用
       PGA包括了以下幾個結構:
       ()排序區
       ()遊標狀態區
       ()會話信息區
       ()堆棧區

       由參數:pga_aggregate_target 決定

      
    3.Processes:用戶進程,服務器進程,後臺進程,其它可選進程

       用戶進程
           在用戶連接數據庫產生,請求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(數據庫寫進程)
           負責將修改過的數據塊從數據庫緩衝區高速緩存寫入磁盤上的數據文件中

       寫入條件:
       發生檢查點
       髒緩存達到限制
       沒有自由的緩存
       超時發生
       表空間離線
       表空間只讀
       表被刪除或者截斷
       開始備份表空間


       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進程自動解決所有懸而未決的會話。


       Server Process(服務進程)

           分爲專用服務進程(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/<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塊的一部分
      

四、Oracle實例和Oracle數據庫的關係

    1.一個實例能夠裝載及打開僅僅一個數據庫      
    2.一個數據庫能夠被多個實例裝載並打開
    3.實例與數據庫的對應關係是一對一或多對一的關係



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章