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