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

版權聲明:本文爲博主原創文章,未經博主贊成不得轉載。

https://blog.csdn.net/cH3RUF0tErmB3yH/article/details/79124391 css

0?wx_fmt=gif&wxfrom=5&wx_lazy=1

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

--==========================================html

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

--==========================================sql

/*數據庫

    對於初接觸Oracle 數據庫的人來說。很是easy混淆的兩個概念便是Oracle 實例和Oracle 數據庫。緩存

這兩概念不一樣於SQL sever下的實例與數據庫,固然也有些相似之處。網絡

僅僅是在SQL server咱們根本不需要花費太oracle

多的精力去搞清SQL實例和數據庫,因爲它簡單易於理解。工具

如下簡要說明一下SQL實例、數據庫,不少其它的是講post

述Oracle下的實例及數據庫。

 

1、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.上述完畢後,就能夠實現對數據庫的訪問。

2、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實例被啓動時,啓動相關的後臺進程

          

3、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塊的一部分

      

      

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

    1.一個實例可以裝載及打開僅僅一個數據庫      

    2.一個數據庫可以被多個實例裝載並打開

    3.實例與數據庫的相應關係是一對一或多對一的關係

最後說一下,我堅持原創,若我寫的對你們有幫助,麻煩你們轉發或者關注一下,也是對個人一點鼓舞和動力。

0?wx_fmt=jpeg

相關文章
相關標籤/搜索