1. 程式人生 > >oracle的體系結構(物理結構、記憶體結構、邏輯結構)

oracle的體系結構(物理結構、記憶體結構、邏輯結構)

一、oracle例項: 
    oracle例項是由一組後臺程序和記憶體結構組成,可以看成是使用者與資料庫之間的橋樑; 
    oracle資料庫是一系列物理資料檔案的集合(如控制檔案,資料檔案,引數檔案,日誌檔案,臨時檔案等)。 
    它們的關係:例項可以在沒有資料檔案的情況下單獨啟動,(startup nomount)通常沒有意義;一個例項在生成期內只能裝載(alter database mount)和開啟(alter database open)資料庫;一個例項只能裝載和開啟一個數據庫;一個數據庫可以同時被多個例項裝載和開啟(即RAC) 
二、物理結構: 
    物理結構指一系列Oracle檔案系統,主要包括資料檔案,控制檔案,日誌檔案,引數檔案等;首先是通過引數檔案找控制檔案,再通過控制檔案找資料檔案和日誌檔案。可以在一下檢視中查詢 v$controlfile控制檔案;v$datafile資料檔案;v$logfile日誌檔案; 

    引數檔案(pfile和spfile):init.ora或initSID.ora,通常位於:$ORACLE_BASE/admin/<SID>/pfile;在oracle資料庫啟動的時候載入(Nomount時載入),初始化檔案記載了資料啟動引數,記憶體,控制檔案,程序數等。 
    控制檔案:是個二進位制檔案,主要記錄了資料庫名,資料庫建立的時間戳,資料檔案和日誌檔案的名字和位置,資料庫恢復所需要的同步資訊;一個數據庫只有一個控制檔案,但有時候為了防止控制檔案損壞導致資料庫無法啟動,可以對控制檔案做映象。   所有修改資料庫結構的命令都會引起控制檔案的修改,並在跟蹤檔案中做記錄。 
    資料檔案:主要是儲存使用者和應用程式的所有資料,一個數據庫至少包含多個或一個數據檔案,一個表空間由一個或多個數據檔案組成。使用者請求的資訊在記憶體中不存在則從資料檔案中讀取出來儲存在記憶體中,如果使用者修改了某些資訊並不是立馬更新到資料庫中,先儲存在記憶體中,而是 

由後臺讀寫程序決定何時更新到資料檔案中,這樣是位了減少磁碟IO。 
    日誌檔案:(也叫重做日誌檔案redo log),是oracle記錄資料庫中資料的變化,每一條資料進行了修改,重做日誌都會有記錄;日誌檔案是oracle物理結構中最複雜的一類檔案,也是資料庫系統安全的重要保證,如果某些異常操作可以通過日誌來恢復。日誌檔案組和日誌成員:一個oracle資料庫至少包含兩個日誌檔案組,每個日誌檔案組至少包含一個和多個日誌成員,成員之間是映象關係。如果要將日誌檔案永久的儲存下來,就形成了歸檔日誌了(歸檔日誌archive log是當資料庫執行在歸檔模式下時,一個redo log file(group)寫滿後,由ARCn程序將重做日誌的內容備份到歸檔日誌檔案下,然後這個redo log file(group)才能被下一次使用),歸檔日誌必須在歸檔模式下,(重做日誌是迴圈寫的)。 

    控制檔案,資料檔案,日誌檔案的位置:E:\app\hongzhong\oradata\orcl; 

三、記憶體結構: 
oracle的記憶體結構有:系統全域性區(SGA),程式全域性區(PGA); 
   1、系統全域性區下的所有資料被當前例項下所有的後臺所共享,當資料庫被啟動時,系統全域性區的記憶體被自動分配; 
      高速緩衝區:是oracle讀取資料的時候先從資料檔案中把資料讀取到該區域,對資料進行更新操作先儲存在此區域,然後再由讀寫程序寫入資料檔案;主要有保持緩衝池,預設緩衝池和再生緩衝池;保持緩衝池主要是儲存類似於程式碼表常用的不便的資料,再生緩衝池主要儲存類似於大表的資料。 
      共享池: 

      日誌緩衝區:主要是用於緩衝事務日誌,存放需要寫入檔案的日誌,是一種先進先出的方式快取的。 
      大共享區:(可選的)主要是一些大的程序和資料備份操作的時候用到的。 
      固定SGA: 是由oracle自動設定的大小。 
      檢視當前系統的SGA大小:show parameter sga_max_size; 要修改:alter system set sga_max_size=1200m scope=spfile; 
   2、程式全域性區(PGA) 
      是每個使用者程序連線Oracle使用者保留的記憶體,程序建立時分配,程序結束時釋放。PGA包括了以下幾個結構:
      排序區,遊標狀態區,會話資訊區,堆疊區 

四、邏輯結構: 
    oracle邏輯結構主要是:資料塊(block),資料擴充套件(extent),段(segment)和表空間(tablespace)之間的關係,資料塊是oracle儲存的最小單位,表空間是資料庫儲存的基本邏輯單位;連續的資料塊形成一個數據擴充套件,多個數據擴充套件形成一個段,資料段和表空間是多對一的關係;一個表空間可以對應多個數據檔案,一個數據檔案只能對應一個表空間,但是資料檔案和段之間不存在對應關係。 

【我們分析一個Update 語句的完成 】 
①. 使用者提交一個Update 語句 
②. Server Process 檢查記憶體緩衝. 
如果沒有該資料塊的緩衝,則從磁碟讀入 
i. 如果沒有記憶體的有效空間,DBWR被啟動將未寫入磁碟的髒緩衝寫入磁碟 
ii. 如果有有效空間,則讀入 
③. 在緩衝內更新資料 
i. 申請一個回滾段入口,將舊資料寫如回滾段 
ii. 加鎖並更新資料 
iii. 並在同時將修改記錄在Redo log buffer中 
④. 使用者提交一個Commit 語句 
i. SCN增加 
ii. 將Redo log buffer 寫入Redo log file 
iii. 返回使用者Commit 完成 

  段: 
段是物件在資料庫中佔用的空間,雖然段和資料庫物件是一一對應的,但段是從資料庫儲存的角度來看的。一個段只能屬於一個表空間,當然一個表空間可以有多個段。 表空間和資料檔案是物理儲存上的一對多的關係,表空間和段是邏輯儲存上的一對多的關係,段不直接和資料檔案發生關係。一個段可以屬於多個數據檔案,關於段可以指定擴充套件到哪個資料檔案上面。 資料庫的段可以分為四類:資料段、索引段、回退段、臨時段。 
1.資料段 
  資料段是用於儲存資料的段,他儲存在資料表空間中。每一個表都有一個數據段(聚簇除外),表的資料儲存在資料段中,預設情況下段名與表名相同。以下語句查詢段的資訊: 
SQL>SELECT SEGMENTNAME,TABLESPACE,NAME,BYTES,BLOCKS FROM USER_EXTENTS; 
2.索引段 
  索引段用於儲存索引,以下語句查詢索引資訊: 
SQL>SELECT * FROM ALL_INDEXS 
SQL>SELECT * FROM USER_INDEXS 
3.回退段 
  回退段用於儲存使用者資料修改之前的值,因而可以在特定條件下回退資料。回退段與事務是一對多的關係,一個事務只能使用一個回退段,而一個回退段可存放一個或多個事務的回退資料。 
4.臨時段 
  臨時段用於order by語句的排序以及一些彙總。 

  資料塊:oracle儲存的最小的單位,一個塊的大小預設為8KB,