oracle 資料庫例項

aidway發表於2014-10-22
注:翻譯自concept,每天翻譯一點點~

oracle 資料庫例項簡介(Introduction to the Oracle Database Instance

    資料庫例項是管理資料檔案的一組記憶體結構。資料庫是由CREATE DATABASE建立的一組存放在磁碟上的物理檔案。例項管理相關的資料,為資料庫的使用者提供服務。
    每個執行中的資料庫至少與一個資料庫例項關聯。因為例項存在於記憶體,資料庫存放在磁碟上,例項或資料庫都可以單獨存在。

資料庫例項體系(Database Instance Structure)
    當例項啟動,Oracle分配一個記憶體區域稱作SGA(system global area),啟動一組後臺程式。SGA有很多用途,如下所示:
      * 管理被許多程式和執行緒併發訪問的內部資料結構
       * 快取從磁碟讀取的資料塊
      * 在寫入線上日誌前快取redo資料
      * 儲存sql執行計劃
    SGA被執行在一臺機器上的Oracle程式共享,包括服務程式和後臺程式。Oracle程式和SGA關聯的方式因作業系統而異。
    資料庫例項包含後臺程式。服務程式以及為這些程式分配的記憶體同樣存在於例項中。服務程式終止後例項也能繼續工作。
    下圖展示了Oracle資料庫例項的主要元件:
    Database Instance
    
資料庫例項配置(Database Instance Configurations
    你能在以下任意環境中執行oracle資料庫:
        * 單例項配置
           資料庫和例項是一對一的關係
        * RAC環境
           資料庫和例項是多對多的關係
shows possible database instance configurations

    不管是在單例項還是在RAC配置中,一個例項同一時間只能與一個資料庫關聯。你能啟動一個例項並掛載一個資料庫,但是同一時間一個例項不能掛載兩個資料庫。
    不同的例項可以並行地執行在同一機器上,每一個訪問它自己的的資料庫。例如,一臺機器可以有兩個資料庫:prod1和prod2。一個例項管理prod1,另一個不同的例項管理prod2。

例項的生命週期(Duration of an Instance
    一個例項由STARTUP命令開始,被終止時結束。在這個過程中,一個例項只能跟一個資料庫關聯。而且,一個例項只能掛載一次資料庫,只能關閉一次資料庫,只能開啟一次資料庫。一個資料庫關閉後,你必須啟動一個不同的例項去掛載、開啟這個資料庫。

Duration of an Instance



SID(Oracle System Identifier
    SID是oracle在一臺特定主機上的唯一名。在unix和linux上,oracle使用SID和Oracle home生成一個指向共享記憶體的值。同時,預設情況下SID被用來定位引數檔案,引數檔案是用來定位相關檔案的,比如控制檔案。
    在大多數平臺上,ORACLE_SID用來設定SID,ORACLE_HOME用來設定Oracle home。當連線到例項,客戶端可以在oracle連線串中確定SID,或是使用網路服務名(net service name)。oracle將服務名轉換為ORACLE_HOME和ORACLE_SID。

例項啟停概覽(Overview of Instance Startup and Shutdown)
使用者通過例項訪問資料庫。本節介紹例項和資料庫的可能狀態。

Instance and Database Startup Sequence




資料庫從關閉到啟動經歷了以下步驟:
1.例項啟動,未掛載資料庫
   例項已啟動,未關聯資料庫。
2.資料庫掛載
   例項已啟動,通過讀取控制檔案與一個資料庫相關聯。資料庫對使用者來講是關閉的。
3.資料庫開啟
   例項已開啟,與一個開啟的資料庫相關聯。已授權使用者可以訪問資料檔案中的內容。

以管理員許可權連線(Connection with Administrator Privileges
    資料庫的啟動和關閉是級別很高的管理功能,只有管理員才能做。普通使用者不能管理資料庫的狀態。
    根據不同的作業系統,符合以下條件之一,使用者可以具有管理員許可權:
        *具有作業系統許可權的使用者可以使用管理員許可權
        *使用者被授予SYSDBA或SYSOPER許可權,資料庫使用密碼檔案對通過網路訪問的使用者進行管理員認證
    SYSDBA和SYSOPER是很特殊的系統許可權,在資料庫沒有開啟的情況下使用者也能連線。這些許可權控制在資料庫本身以外。當使用SYSDBA許可權連線,進入的是SYS方案,當使用SYSOPER連線,進入的事public方案。SYSOPER的許可權是SYSDBA許可權的一個子集。

如何啟動資料庫(How an Instance Is Started)
當oracle啟動例項,執行以下基本步驟:
1.在平臺預設的位置查詢spfile,如果沒找到,查詢文字引數檔案pfile(在STARTUP啟動的時候可以用SPFILE或PFILE指定引數檔案)
2.讀取引數檔案,確定初始化引數大小
3.根據引數設定分配SGA
4.啟動oracle後臺程式
5.開啟alert日誌和trace檔案,將顯式引數寫入alert日誌
在這個階段,沒有資料庫和例項關聯。有些場景需要啟動到nomount階段,比如說建立資料庫和一些特定的備份恢復操作。


如何掛載資料庫(How a Database Is Mounted)
    例項掛載資料庫用來和此資料庫相關聯。為了掛載資料庫,例項從CONTROL_FILES引數指定的控制檔案中獲得資料庫的名稱,並開啟控制檔案。oracle通過讀取控制檔案找到資料檔案和線上日誌檔案的名稱,這些檔案在開啟資料庫後可以進行訪問。在一個已掛載的資料庫(mounted database)中,資料庫是關閉的,只有資料庫管理員可以訪問。管理員可以在完成特定維護操作的時候保持資料庫的關閉狀態。然而,對一些常規運算元據庫是不可訪問的。
    如果oracle允許多個例項同時掛載同一個資料庫,那麼初始化引數CLUSTER_DATABASE能使資料庫對多個例項是可訪問的。資料庫行為依賴於以下設定:
        *如果CLUSTER_DATABASE對第一個掛載資料庫的例項是false(預設),那麼只有這個例項可以掛載這個資料庫。
        *如果CLUSTER_DATABASE對第一個例項是true,那麼如果別的例項CLUSTER_DATABASE引數是true的話也可以掛載資料庫。能夠掛載資料的最大例項數目在建立資料庫的時候由預先定義的最大值決定。

如何開啟資料庫(How a Database Is Opened)
    將一個已掛載的資料庫開啟後可以進行一些常規操作。任何有效的使用者都可以連線到開啟的資料庫並訪問它的資料。通常情況下,資料庫管理員將資料庫開啟,開啟後資料庫對普通使用者就是可用的了。
    開啟資料庫要執行以下步驟:
        * 開啟表空間的線上資料檔案,除了undo表空間
           如果資料庫關閉前表空間是offline的,那麼資料庫重新開啟後表空間和對應的資料檔案將是offline的。
        * 獲得undo表空間
           如果存在多個undo表空間,由UNDO_TABLESPACE引數指定要使用的undo表空間。如果這個引數沒設定,選擇第一個可用的undo表空間。
        * 開啟線上日誌檔案

只讀模式(Read-Only Mode)
    預設情況下,資料庫以讀寫模式開啟。在這種模式下,使用者可以修改資料,生成redo日誌到線上日誌檔案。另外,你也可以用只讀模式開啟資料庫防止資料被使用者事務修改。
    只讀模式只允許只讀事務訪問資料庫,不能寫入資料檔案或線上日誌檔案。然而,資料庫可以執行恢復操作,或者不生成redo日誌的改變資料庫狀態的操作。例如,在只讀模式下:
        * 資料檔案可以被置為online或offline。然而,不能將永久表空間置為offline。
        * 可以恢復處於offline狀態的資料檔案和表空間。
        * 對於更改資料庫的狀態,控制檔案一直是可用的。
        * 用CREATE TEMPORARY TABLESPACE建立的臨時表空間是可讀寫的。
        * 可以繼續寫作業系統審計檔案,跟蹤檔案(trace files)和alert日誌。

資料檔案檢查(Database File Checks)
    當例項試圖開啟資料庫的時候,如果任何一個資料檔案或redo檔案不存在,或者存在但一致性檢查失敗,那麼資料庫將會返回一個錯誤。需要介質恢復。

資料庫和例項關閉簡介(Overview of Database and Instance Shutdown)
    典型的使用情況,手動關閉資料庫,當執行維護或其他管理操作時使資料庫對使用者不可訪問。你可以使用sql*plus的shutdown命令或是使用EM(Enterprise Manager)去執行這些步驟。
   下圖介紹了將開啟的資料庫進行一致性關閉的步驟:

     Instance and Database Shutdown Sequence


    資料庫一致性關閉的時候會自動執行以下步驟:
    1.資料庫關閉
       資料庫是掛載的(mounted),但是線上資料檔案和線上重做日誌檔案是關閉的。
    2.資料庫解除安裝
       例項是啟動的(started),但是不在和資料庫中的控制檔案相關聯。
    3.例項關閉
       資料庫例項關閉。
     oralce資料庫在遇到例項故障或是shutdown abort的時候會直接結束例項,不再按之前的步驟關閉。

關閉模式(Shutdown Modes)
    擁有sysdba或sysoper許可權的管理員能使用sql*plus中的shutdown命令或是EM關閉資料庫。shutdown命令有不同的選項決定關閉的方式。
    下圖總結了不同關閉模式的行為:
    Shutdown Modes
   
    可選的shutdown語句:
    * shutdown abort
        這種模式適用於緊急情況,比如當別的關閉方式都不能將資料庫關閉。這種關閉方式是最快的。然而,隨後開啟資料庫可能要花費很長的時間,
        因為必須進行例項恢復使資料檔案一致。
        注意:因為shutdown abort沒有對開啟的資料檔案觸發檢查點,再次開啟資料庫的時候必須進行例項恢復。其它的關閉模式再重新開啟資料庫的時候不需要例項恢復。
    * shutdown immediate
        這種模式的速度僅次於shutdown abort。oracle將結束所有正在執行的sql,斷開使用者連線。終止活躍事務,回滾未提交的更改。
    * shutdown transactional
        這種模式阻止使用者開始新的事務,但關閉前會等待當前事務完成。根據當前事務的特性這種模式可能會花費很長時間。
    * shutdown normal
        這是預設的關閉模式。關閉前資料庫會等待所有已連線使用者斷開連線。

怎樣關閉資料庫(How a Database Is Closed)
    關閉的特性取決於資料庫是正常關閉還是非正常關閉。
資料庫怎樣以normal方式關閉(How a Database Is Closed During Normal Shutdown)
    當用shutdown關閉資料庫時,除了abort方式,oracle都會將SGA中的資料寫到資料檔案和線上重做日誌檔案。然後,資料庫關閉線上資料檔案和線上重做日誌檔案。表空間裡已經離線的資料檔案已經被關閉了。當資料庫重新開啟的時候,所有離線的表空間仍然保持離線。
    在這個階段,資料庫是關閉的,普通操作不可訪問。資料庫關閉後控制檔案仍然是開啟的。

資料庫怎樣非正常關閉(How a Database Is Closed During Abnormal Shutdown)
    如果使用shutdown abort或是非正常關閉,那麼例項和資料庫將瞬間關閉。oracle不會將SGA中的資料寫到資料檔案和線上重做日誌檔案。重新開啟資料庫的時候oracle會自動進行例項恢復。

資料庫如何解除安裝(How a Database Is Unmounted)
    資料庫關閉後,oralce解除安裝資料庫,和例項斷開聯絡。資料庫解除安裝後,oracle關閉資料庫的控制檔案。

例項如何關閉(How an Instance Is Shut Down)
    資料庫關閉的最後一步是關閉例項。例項關閉後,從記憶體中移除SGA,後臺程式被關閉。特殊情況下,例項可能不能夠完全關閉。記憶體結構可能沒有從記憶體中移除,有的後臺程式可能未終止。如果之前的例項有殘餘,例項再次開啟可能會失敗。在這種情況下,你可以強制移除之前例項的殘餘部分,重新開始一個新的例項,或者在sql*plus或EM中執行一下shutdown abort。

檢查點概覽(Overview of Checkpoints)
    檢查點在一致性關閉資料庫、例項恢復、資料庫常規操作是非常重要的機制。“檢查點”這個詞有以下相關含義:
        * 一個指明檢查點位置的資料結構,例項恢復開始的SCN號
    檢查點位置由buffer cache中最舊的資料髒塊決定。檢查點位置作為指標指向redo流,儲存在控制檔案和每個資料檔案的檔案頭。
        * 將資料庫buffer cache中已修改的內容寫到磁碟


檢查點的目的(Purpose of Checkpoints)
    oracle使用檢查點完成以下目的:
    * 減少例項恢復或介質恢復的時間
    * 保證buffer cache中的髒塊定期寫到磁碟
    * 保證已提交資料在一致性關閉的時候寫到磁碟

oracle何時觸發檢查點(When Oracle Database Initiates Checkpoints)
    CKPT程式負責將檢查點資訊寫到資料檔案頭和控制檔案。檢查點在不同的場景下都會發生。例如,oracle會使用以下型別的檢查點:
    * 程式檢查點
        資料庫在一個確定的目標之前將redo程式修改的快取資料寫到磁碟。資料庫中所有例項的程式檢查點的集合是一個資料庫檢查點(database checkpoint)。
        執行緒檢查點在以下情況出現:
        @ 一致性關閉資料庫
        @ alter system checkpoint
        @ 線上日誌切換
        @ alter database begin backup
    * 表空間和資料檔案檢查點
        在一個特定目標之前資料庫將被redo修改的快取寫到磁碟。表空間檢查點是資料檔案檢查點的集合,表空間的每個資料檔案都觸發一次檢查點。這些檢查點會在很多情況下發生,包括將表空間置為read-only或offline,或對資料檔案進行shrink,或執行alter tablespace begin backup。
    * 增量檢查點
        增量檢查點是程式檢查點的一部分,目的是避免在日誌切換的時候寫大量的資料塊。DBWn程式至少每三秒判斷一下是否要寫資料。當DBWn寫髒塊的時候,它將觸發一次檢查點,使CKPT程式將檢查點位置寫到控制檔案,但是不寫到資料檔案頭。
    其它型別的檢查點包括例項或介質恢復檢查點,drop或truncate物件時候的檢查點。

例項恢復簡介(Overview of Instance Recovery)
    例項恢復是對資料檔案應用線上重做日誌來重建最近一次檢查點所做修改的過程。如果上一次資料庫未一致性關閉,當管理員開啟資料庫的時候會自動進行例項恢復。

例項恢復的目的(Purpose of Instance Recovery)
    例項恢復保證在例項崩潰後資料庫也是一致的。因為資料庫管理資料檔案的變化,資料檔案可能存在不一致的狀態。一個redo執行緒是例項生成的所有變化的集合。單例項有一個redo執行緒,RAC有多個redo執行緒,每個例項有一個。
    當事務提交的時候,LGWR將內村中剩餘的redo條目事務SCN寫到線上重做日誌。然而,DBWn程式會在合適的時候將修改過的資料寫到資料檔案。因為這個原因,未提交的資料可能暫時寫入資料檔案,而已提交的資料可能未寫入資料檔案。
    如果已開啟資料庫的例項出故障了,可能因為shutdown abort或者別的非正常關閉,那麼就會導致:
    * 已提交的事務沒寫入資料檔案,僅寫入線上重做日誌。這些變化必須對資料庫重做一遍。
    * 資料檔案包含當例項故障時未提交的資料。這時這些變化必須回滾以保證事務的一致性。
    例項恢復僅使用線上重做日誌和當前線上的資料檔案來同步資料檔案以保證他們的一致性。

檢查點對例項恢復的重要性(Importance of Checkpoints for Instance Recovery)
    例項恢復使用檢查點來確定哪些變化要對資料檔案進行應用。檢查點位置保證每一個提交的變更,如果它的SCN低於檢查點的SCN,那麼這個變化肯定記錄到資料檔案。

Checkpoint Position in Online Redo Log



例項恢復期間,資料庫必須應用位於檢查點位置和redo程式之間的變更(重做)。如上圖所示,有些變更可能已經寫入資料檔案了。然而,只有SCN比檢查點位置低的變更保證寫入磁碟。




來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28675539/viewspace-1307603/,如需轉載,請註明出處,否則將追究法律責任。

相關文章