Oracle實例如何創(chuàng)建?
在知道如何創(chuàng)建Oracle實例之前,我們必須對實例的定義有一個了解。談到Oracle數(shù)據(jù)庫時,我們很可能指的是整個Oracle數(shù)據(jù)庫管理系統(tǒng)(DBMS);但是作為一個Oracle數(shù)據(jù)庫人員,我們必須認識到數(shù)據(jù)庫和實例二者之間的重大區(qū)別—一個經(jīng)常使非Oracle的系統(tǒng)管理人員混淆的區(qū)別。
為提供Oracle客戶所期望的不同程度的服務(wù)、靈活性與性能,數(shù)據(jù)庫的許多工作由實例完成,實例是一系列復雜的內(nèi)存結(jié)構(gòu)和操作系統(tǒng)進程。除非使用并行Oracle服務(wù)器選項,否則每個Oracle數(shù)據(jù)庫都有一個實例與之相關(guān),一個數(shù)據(jù)庫被唯一的一個實例裝載。實例結(jié)構(gòu)允許RDBMS同時對來自多個用戶的不同種類事務(wù)的請求提供服務(wù),與此同時提供***的性能、容錯性、數(shù)據(jù)的一致性和安全性。
值得注意的是,這里定義的術(shù)語“進程”是指在沒有用戶干預的情況下正在運行的任務(wù)。你的操作系統(tǒng)可能將之稱作“進程”,或者使用其他術(shù)語,例如任務(wù)、作業(yè)、線程和其他類似的術(shù)語。
在UNIX實現(xiàn)多任務(wù)操作系統(tǒng)后,實例是松散的結(jié)構(gòu)方式。在一起工作的離散的進程在實現(xiàn)實例的目標的RDBMS中完成指定的任務(wù)。每一個進程都有各自的一個內(nèi)存塊,該內(nèi)存塊用于保存私有變量、地址堆棧和其他運行時的信息。進程間使用公共共享區(qū)并在公共共享區(qū)內(nèi)完成它們的工作。公共共享區(qū)是能夠在同一時間內(nèi)被不同程序和不同進程讀寫的一塊內(nèi)存區(qū)。該內(nèi)存塊稱為系統(tǒng)全局區(qū)(SGA)。因為SGA駐留在一個共享內(nèi)存段中,所以它經(jīng)常被稱作共享全局區(qū)。
你可以認為后臺進程就像數(shù)據(jù)庫的手,直接處理數(shù)據(jù)庫的組件;你也可以認為SGA就像大腦,在必要時間接地調(diào)度手處理它們的信息與存儲檢索。SGA參與發(fā)生在數(shù)據(jù)庫中全部的信息和服務(wù)器的處理。單用戶的Oracle配置(例如PersonalOracleLite),不使用多進程執(zhí)行數(shù)據(jù)庫的功能。相反,所有的數(shù)據(jù)庫功能由一個Oracle進程完成。由于這個原因,單用戶也稱為單進程Oracle。
了解了實例的基本定義后,我們來看看如何創(chuàng)建實例。打開一個Oracle數(shù)據(jù)庫包括以下三步:
1)創(chuàng)建一個Oracle實例(非安裝階段)。
2)由實例安裝數(shù)據(jù)庫(安裝階段)。
3)打開數(shù)據(jù)庫(打開階段)。
Oracle實例在數(shù)據(jù)庫啟動的非安裝階段創(chuàng)建,當數(shù)據(jù)庫經(jīng)過非安裝階段,讀取init.ora參數(shù)文件,啟動后臺進程,初始化系統(tǒng)全局區(qū)(SGA)。init.ora文件定義了實例的配置,包括內(nèi)存結(jié)構(gòu)的大小和啟動后臺進程的數(shù)量和類型等。實例名根據(jù)環(huán)境變量OracleSID設(shè)置,它不一定要與打開的數(shù)據(jù)庫名稱相同(但是習慣上通常如此)。
下一階段稱為安裝階段。init.ora文件中的控制文件參數(shù)值決定數(shù)據(jù)庫的安裝實例。在安裝階段,讀取控制文件并使其成為可訪問的,可以對控制文件內(nèi)存儲的數(shù)據(jù)進行查詢和修改。
***的階段就是打開數(shù)據(jù)庫。在這一階段,其名字存儲在控制文件中的數(shù)據(jù)庫文件以排它使用方式被實例鎖定,使數(shù)據(jù)庫能夠被普通用戶訪問。打開是數(shù)據(jù)庫的正常操作狀態(tài)。在數(shù)據(jù)庫打開之前,只有DBA能訪問數(shù)據(jù)庫,且只能通過服務(wù)器管理器對其進行訪問。
為了改變數(shù)據(jù)庫的操作狀態(tài),必須作為內(nèi)部連接到數(shù)據(jù)庫,或擁有SYSDBA特權(quán)。當數(shù)據(jù)庫從關(guān)閉狀態(tài)到打開狀態(tài)時,你可以明確地單步調(diào)試數(shù)據(jù)庫的每一個操作狀態(tài),但當關(guān)閉數(shù)據(jù)庫時,只能從當前運行狀態(tài)轉(zhuǎn)到完全關(guān)閉狀態(tài)。例如,可以在服務(wù)器管理器工具中執(zhí)行STARTUP NOMOUNT命令,這將使數(shù)據(jù)庫處在非安裝階段,接下來可以運行ALTER DATABASE MOUNT或者運行ALTER DATABASE OPEN命令以單步調(diào)試到操作階段。無論是在何種操作狀態(tài)下,如果執(zhí)行SHUTDOWN命令,將完全關(guān)閉數(shù)據(jù)庫。例如,數(shù)據(jù)庫不能從打開狀態(tài)轉(zhuǎn)到安裝狀態(tài)。
沒有安裝數(shù)據(jù)庫的實例被稱為空閑的—它使用內(nèi)存,但不做任何工作。一個實例只能唯一地與一個數(shù)據(jù)庫連接,而且除非使用并行服務(wù)器,否則對一個數(shù)據(jù)庫也只分配一個實例。實例是數(shù)據(jù)管理的核心—它做所有的工作,而數(shù)據(jù)庫存儲所有的數(shù)據(jù)。
【編輯推薦】