Oracle 概念(Oracle 10.2) 第十二章 數(shù)據(jù)庫(kù)和實(shí)例啟動(dòng)和關(guān)閉12、數(shù)據(jù)庫(kù)和實(shí)例啟動(dòng)和關(guān)閉 這一章解釋了啟動(dòng)和關(guān)閉Oracle實(shí)例和數(shù)據(jù)庫(kù)的過程。 這一章包含下列主題: u Oracle實(shí)例介紹 u 實(shí)例和數(shù)據(jù)庫(kù)啟動(dòng)概述 u 數(shù)據(jù)庫(kù)和實(shí)例管理概述 Oracle實(shí)例介紹每個(gè)運(yùn)行著的Oracle數(shù)據(jù)庫(kù)和一個(gè)Oracle實(shí)例關(guān)聯(lián)。當(dāng)一個(gè)數(shù)據(jù)庫(kù)在數(shù)據(jù)庫(kù)服務(wù)器(不論計(jì)算機(jī)類型如何)上啟動(dòng)時(shí),Oracle分配一個(gè)叫系統(tǒng)全局區(qū)(SGA)的內(nèi)存區(qū)域和啟動(dòng)一個(gè)或多個(gè)Oracle進(jìn)程。SGA和Oracle進(jìn)程的合集叫做一個(gè)Oracle實(shí)例。實(shí)例的內(nèi)存和進(jìn)程高效的管理相關(guān)的數(shù)據(jù)庫(kù)數(shù)據(jù),為數(shù)據(jù)庫(kù)的一個(gè)或多個(gè)用戶服務(wù)。 圖12-1顯示一個(gè)Oracle實(shí)例 圖12-1 一個(gè)Oracle實(shí)例 ![]() 實(shí)例和數(shù)據(jù)庫(kù) 啟動(dòng)一個(gè)實(shí)例之后,Oracle將一個(gè)實(shí)例和特定數(shù)據(jù)庫(kù)關(guān)聯(lián)。這是一個(gè)掛接(mounted)數(shù)據(jù)庫(kù)。數(shù)據(jù)庫(kù)然后準(zhǔn)備被打開,這樣就可以允許認(rèn)證客戶訪問。 多個(gè)實(shí)例可以同時(shí)運(yùn)行在一臺(tái)機(jī)器上,每個(gè)訪問它們自己的物理數(shù)據(jù)庫(kù)。在大規(guī)模的集群系統(tǒng)中,真正應(yīng)用集群(RAC)可以讓多個(gè)實(shí)例訪問單個(gè)數(shù)據(jù)庫(kù)。 只有數(shù)據(jù)庫(kù)管理員可以啟動(dòng)一個(gè)實(shí)例和打開數(shù)據(jù)庫(kù)。如果數(shù)據(jù)是開放狀態(tài),那么數(shù)據(jù)庫(kù)管理員可以關(guān)閉數(shù)據(jù)庫(kù),所以數(shù)據(jù)庫(kù)就處于關(guān)閉狀態(tài)。當(dāng)一個(gè)數(shù)據(jù)庫(kù)被關(guān)閉,用戶不能訪問它包含的任何信息。 使用管理員權(quán)限連接Oracle能啟動(dòng)和關(guān)閉數(shù)據(jù)庫(kù)。通常用戶不能控制當(dāng)前數(shù)據(jù)庫(kù)的狀態(tài)。 使用管理員權(quán)限連接數(shù)據(jù)庫(kù)啟動(dòng)和關(guān)閉是權(quán)力很大的管理員選項(xiàng),只能由使用管理權(quán)限連接Oracle的用戶操作。依賴于操作系統(tǒng)的不同,一個(gè)用戶可以在下列情況之一構(gòu)建管理員權(quán)限: u 用戶的操作系統(tǒng)權(quán)限允許他或者她使用管理權(quán)限連接(操作系統(tǒng)驗(yàn)證) u 被賦予SYSDBA或者SYSOPER權(quán)限的用戶和數(shù)據(jù)庫(kù)密碼文件確認(rèn)擁有數(shù)據(jù)庫(kù)管理員權(quán)限的用戶 當(dāng)你以SYSDBA權(quán)限連接,你處于SYS用戶的模式下。當(dāng)你以SYSOPER權(quán)限連接,你處于公共模式下。SYSOPER權(quán)限是SYSDBA權(quán)限的子集。 初始化參數(shù)文件和服務(wù)器參數(shù)文件想要啟動(dòng)一個(gè)實(shí)例,Oracle必須讀取初始化參數(shù)文件或者服務(wù)器參數(shù)文件。這些文件包含實(shí)例和數(shù)據(jù)庫(kù)的配置信息列表。傳統(tǒng)上Oracle在一個(gè)文本初始化參數(shù)文件保存初始化參數(shù)。你可以選擇在二進(jìn)制服務(wù)器參數(shù)文件(SPFILE)維護(hù)初始化參數(shù)。 服務(wù)器參數(shù)文件中保存的初始化參數(shù)是持久的,這樣實(shí)例運(yùn)行時(shí)參數(shù)的任何改變都可以在實(shí)例關(guān)閉、重啟時(shí)保持。 初始化參數(shù)分為兩類:基本和高級(jí)。在大多數(shù)情況下,只需要設(shè)置和調(diào)整基本參數(shù)就可以獲得合理的性能。在少數(shù)情況下,必須調(diào)整高級(jí)參數(shù)來獲得更好的性能。 大部分初始化參數(shù)屬于下列情況之一: u 給事物命名的參數(shù),比如文件 u 設(shè)置限制的參數(shù),比如最大值 u 影響容量的參數(shù),比如SGA的大小,這些叫做可變參數(shù)。 其他的初始化參數(shù)告訴Oracle: u 啟動(dòng)實(shí)例的數(shù)據(jù)庫(kù)的名字 u SGA內(nèi)存結(jié)構(gòu)使用的內(nèi)存多少 u 充滿的重做日志文件如何處理 u 數(shù)據(jù)庫(kù)控制文件的名字和位置 u 數(shù)據(jù)庫(kù)中undo表空間的名字 參數(shù)值如何改變數(shù)據(jù)庫(kù)管理員可以調(diào)整可變參數(shù)來提高數(shù)據(jù)庫(kù)系統(tǒng)的性能。參數(shù)如何精確的影響一個(gè)系統(tǒng)依賴于大量的數(shù)據(jù)庫(kù)特性變量。 某些參數(shù)在實(shí)例運(yùn)行時(shí)可以通過ALTER SESSION或ALTER SYSTEM來動(dòng)態(tài)修改。除非你使用服務(wù)器參數(shù)文件(SPFILE),使用ALTER SYSTEM語句產(chǎn)生的改變只在當(dāng)前實(shí)例起作用(重啟后消失)。你必須手工修改文本初始化參數(shù)文件,這樣下次實(shí)例啟動(dòng)時(shí)可以知道參數(shù)改變了。當(dāng)你使用SPFILE,你可以在磁盤上更新參數(shù)文件,所以修改在數(shù)據(jù)庫(kù)重啟和關(guān)閉之后都不會(huì)消失。 Oracle在你的數(shù)據(jù)庫(kù)軟件中提供初始的初始化參數(shù)文件,或者由數(shù)據(jù)庫(kù)配置助手創(chuàng)建。你可以根據(jù)你的配置、選項(xiàng)和你調(diào)整數(shù)據(jù)庫(kù)的計(jì)劃來編輯這些Oracle支持的初始化參數(shù)和增加其他參數(shù)。對(duì)于沒有在初始化參數(shù)文件中明確指定的相關(guān)初始化參數(shù),Oracle使用默認(rèn)值。如果你第一次創(chuàng)建一個(gè)Oracle數(shù)據(jù)庫(kù),建議你盡量少修改初始化參數(shù)值。 實(shí)例和數(shù)據(jù)庫(kù)啟動(dòng)概述啟動(dòng)一個(gè)數(shù)據(jù)庫(kù)并對(duì)系統(tǒng)范圍的用戶可用需要3個(gè)步驟: 1、啟動(dòng)實(shí)例 2、掛接數(shù)據(jù)庫(kù) 3、打開數(shù)據(jù)庫(kù) 數(shù)據(jù)庫(kù)管理員可以在SQL *Plus中使用STARTUP命令或者企業(yè)管理器來執(zhí)行這些步驟。 實(shí)例如何啟動(dòng)當(dāng)Oracle啟動(dòng)一個(gè)實(shí)例時(shí),它讀取服務(wù)器參數(shù)文件(SPFILE)或者初始化參數(shù)文件來確定初始化參數(shù)的值。然后,它分配SGA(數(shù)據(jù)庫(kù)信息使用的共享內(nèi)存區(qū)域)和創(chuàng)建后臺(tái)進(jìn)程。在這時(shí)候,沒有數(shù)據(jù)庫(kù)與這些內(nèi)存結(jié)構(gòu)和進(jìn)程關(guān)聯(lián)。 實(shí)例啟動(dòng)的限制模式你可以以限制模式啟動(dòng)一個(gè)實(shí)例(或者以后將一個(gè)現(xiàn)存實(shí)例修改為限制模式)。這個(gè)會(huì)限制擁有RESTRICTED SESSION的系統(tǒng)權(quán)限的用戶才能連接數(shù)據(jù)庫(kù)。 異常情況的強(qiáng)制啟動(dòng)在特殊情況下,前一個(gè)實(shí)例可能沒有完全關(guān)閉。例如,實(shí)例的一個(gè)進(jìn)程可能沒有正常結(jié)束。在這種情況下,在通常的實(shí)例啟動(dòng)中數(shù)據(jù)庫(kù)會(huì)返回一個(gè)錯(cuò)誤。為解決這個(gè)問題,你必須在啟動(dòng)新實(shí)例之前結(jié)束前個(gè)實(shí)例的所有剩余的進(jìn)程。 數(shù)據(jù)庫(kù)如何掛接(Mount)實(shí)例掛接一個(gè)數(shù)據(jù)庫(kù)來將數(shù)據(jù)庫(kù)和這個(gè)實(shí)例聯(lián)系起來。為掛接數(shù)據(jù)庫(kù),實(shí)例需要找到數(shù)據(jù)庫(kù)的控制文件并打開它們??刂莆募谟脕韱?dòng)實(shí)例的參數(shù)文件中的CONTROL_FILE初始化參數(shù)指定。Oracle然后讀取控制文件來獲得數(shù)據(jù)庫(kù)數(shù)據(jù)文件和重做日志文件的名字。 這時(shí)候,數(shù)據(jù)仍然是關(guān)閉的,只能由數(shù)據(jù)庫(kù)管理員訪問。數(shù)據(jù)庫(kù)管理可以在數(shù)據(jù)庫(kù)關(guān)閉時(shí)完成特定的維護(hù)操作。但是,數(shù)據(jù)庫(kù)還不能由普通用戶訪問。 真正應(yīng)用集群時(shí)如何掛接數(shù)據(jù)庫(kù)如果Oracle允許多個(gè)實(shí)例同時(shí)掛接同一個(gè)數(shù)據(jù)庫(kù),那么數(shù)據(jù)庫(kù)管理員可以使用初始化參數(shù)CLUSTER_DATABASE來使得數(shù)據(jù)庫(kù)對(duì)多個(gè)實(shí)例可用。CLUSTER_DATABASE參數(shù)的默認(rèn)值為false。不支持真正應(yīng)用集群的Oracle版本只允許CLUSTER_DATABASE值為false。 如果掛接數(shù)據(jù)庫(kù)的第一個(gè)實(shí)例的CLUSTER_DATABASE為false,那么只有這個(gè)實(shí)例可以掛接這個(gè)數(shù)據(jù)庫(kù)。如果第一個(gè)實(shí)例的CLUSTER_DATABASE參數(shù)為true,那么其他參數(shù)CLUSTER_DATABASE值為true的實(shí)例也可以掛接這個(gè)數(shù)據(jù)庫(kù)。可以掛接數(shù)據(jù)庫(kù)的實(shí)例數(shù)量是有一個(gè)預(yù)先定義的最大值,是在你創(chuàng)建數(shù)據(jù)庫(kù)時(shí)指定的。 如果掛接一個(gè)Standby數(shù)據(jù)庫(kù)一個(gè)standby數(shù)據(jù)庫(kù)維護(hù)了你的主數(shù)據(jù)庫(kù)的復(fù)本,在災(zāi)難情況下提供持續(xù)的可用性。 Standby數(shù)據(jù)庫(kù)時(shí)常處于恢復(fù)模式。為維護(hù)你的standby數(shù)據(jù)庫(kù),你必須使用ALTER DATABASE語句來以standby模式掛接,并且應(yīng)用主數(shù)據(jù)庫(kù)的歸檔重做日志。 你可以以只讀模式打開一個(gè)standby數(shù)據(jù)庫(kù),把它作為一個(gè)臨時(shí)報(bào)表數(shù)據(jù)庫(kù)。你不能以讀/寫模式打開一個(gè)standby數(shù)據(jù)庫(kù)。 如何掛接一個(gè)克隆數(shù)據(jù)庫(kù)克隆數(shù)據(jù)庫(kù)是一個(gè)數(shù)據(jù)庫(kù)的專業(yè)拷貝,可以用來對(duì)表空間時(shí)間點(diǎn)恢復(fù)。當(dāng)你執(zhí)行表空間時(shí)間點(diǎn)恢復(fù)時(shí),你掛接一個(gè)克隆數(shù)據(jù)庫(kù),將表空間恢復(fù)到特定時(shí)間點(diǎn),然后從克隆數(shù)據(jù)庫(kù)導(dǎo)出元數(shù)據(jù)到主數(shù)據(jù)庫(kù)和從恢復(fù)表空間拷貝數(shù)據(jù)文件。 當(dāng)你打開數(shù)據(jù)庫(kù)時(shí)發(fā)生了什么打開一個(gè)掛接數(shù)據(jù)庫(kù)使得它可以執(zhí)行通常的數(shù)據(jù)庫(kù)操作。任何有效用戶可以連接這個(gè)打開的數(shù)據(jù)庫(kù)并訪問它自己的信息。通常有一個(gè)數(shù)據(jù)庫(kù)管理員可以打開一個(gè)數(shù)據(jù)庫(kù)來對(duì)通常操作可用。 當(dāng)你打開一個(gè)數(shù)據(jù)庫(kù),Oracle打開在線數(shù)據(jù)文件和重做日志文件。如果數(shù)據(jù)庫(kù)前次關(guān)閉時(shí)一個(gè)表空間離線,當(dāng)你重新打開數(shù)據(jù)庫(kù)時(shí),表空間和對(duì)應(yīng)的數(shù)據(jù)文件仍然離線。 如果任何數(shù)據(jù)文件和重做日志文件不存在,在你試圖打開數(shù)據(jù)庫(kù)時(shí),Oracle會(huì)返回一個(gè)錯(cuò)誤。你必須在打開數(shù)據(jù)庫(kù)之前從一個(gè)備份恢復(fù)任何損壞的或丟失的文件。 實(shí)例恢復(fù)如果數(shù)據(jù)庫(kù)上次不正常的關(guān)閉,可能是數(shù)據(jù)庫(kù)管理員結(jié)束了這個(gè)實(shí)例,也可能是斷電,那么數(shù)據(jù)庫(kù)重新打開時(shí)自動(dòng)執(zhí)行恢復(fù)。 Undo表空間獲得和管理當(dāng)你打開一個(gè)數(shù)據(jù)庫(kù)時(shí),實(shí)例試圖獲得一個(gè)或多個(gè)undo表空間。你在實(shí)例啟動(dòng)時(shí)使用初始化參數(shù)UNDO_MANAGEMENT來確定在自動(dòng)undo管理模式還是在手動(dòng)undo管理模式下工作。支持的參數(shù)值為AUTO或者M(jìn)ANUAL,如果是AUTO,實(shí)例在自動(dòng)undo管理模式下啟動(dòng)。默認(rèn)值為MANUAL。 u 如果你使用undo表空間方式,你使用自動(dòng)undo管理模式,這是推薦方式。 u 如果你使用回滾段方式管理undo空間,那么你使用手動(dòng)undo管理模式。 解決存疑分布式事務(wù)偶爾數(shù)據(jù)庫(kù)異常關(guān)閉會(huì)導(dǎo)致一個(gè)或多個(gè)分布式事務(wù)處于存疑狀態(tài)(既不是提交也不是回滾狀態(tài))。當(dāng)你重新打開數(shù)據(jù)庫(kù)并且完成恢復(fù)后,RECO后臺(tái)進(jìn)程自動(dòng)立刻一致性的解決存疑分布式進(jìn)程。 以只讀模式打開數(shù)據(jù)庫(kù)你可以以只讀模式打開任何數(shù)據(jù)庫(kù),以阻止用戶進(jìn)程修改數(shù)據(jù)。只讀模式限制數(shù)據(jù)庫(kù)訪問只能為只讀事務(wù),不能寫入數(shù)據(jù)文件或重做日志文件。 在只讀模式下,其他文件(如控制文件、操作系統(tǒng)審計(jì)跟蹤、跟蹤文件和警告日志)的磁盤寫入可以持續(xù)。臨時(shí)表空間的排序操作也不受影響。但是你不能將持久表空間離線,也不能使用任務(wù)隊(duì)列。 只讀模式并不限制數(shù)據(jù)庫(kù)恢復(fù)或不修改數(shù)據(jù)庫(kù)狀態(tài)、不產(chǎn)生重做數(shù)據(jù)的操作。例如,在只讀模式下: u 數(shù)據(jù)文件保持離線和在線 u 離線文件和表空間可以恢復(fù) u 控制文件對(duì)修改數(shù)據(jù)庫(kù)狀態(tài)的更新可用 一個(gè)很有用的只讀模式的應(yīng)用程序是standby數(shù)據(jù)庫(kù)可以作為臨時(shí)報(bào)表數(shù)據(jù)庫(kù)使用。 數(shù)據(jù)庫(kù)和實(shí)例的關(guān)閉概述數(shù)據(jù)庫(kù)和相關(guān)實(shí)例關(guān)閉的三個(gè)步驟: 1、關(guān)閉數(shù)據(jù)庫(kù) 2、卸載數(shù)據(jù)庫(kù) 3、關(guān)閉實(shí)例 數(shù)據(jù)庫(kù)管理員可以使用企業(yè)管理器執(zhí)行這些步驟。Oracle在實(shí)例關(guān)閉時(shí)自動(dòng)執(zhí)行這3個(gè)步驟。 關(guān)閉蘇據(jù)庫(kù)當(dāng)你關(guān)閉一個(gè)數(shù)據(jù)庫(kù),Oracle各自將SGA中的所有數(shù)據(jù)庫(kù)數(shù)據(jù)和恢復(fù)數(shù)據(jù)寫入數(shù)據(jù)文件和重做日志文件。下一步,Oracle關(guān)閉所有在線數(shù)據(jù)文件和重做日志文件。(任何離線表空間的離線數(shù)據(jù)文件都已經(jīng)關(guān)閉。如果你以后重新打開數(shù)據(jù)庫(kù),任何離線狀態(tài)的表空間和數(shù)據(jù)文件各自保持離線和關(guān)閉。)在這時(shí)候,數(shù)據(jù)庫(kù)關(guān)閉,并對(duì)通常操作不可用??刂莆募跀?shù)據(jù)庫(kù)關(guān)閉但仍然掛接時(shí)仍然打開。 通過結(jié)束一個(gè)實(shí)例來關(guān)閉數(shù)據(jù)庫(kù)在少數(shù)緊急情況下,你可以結(jié)束一個(gè)打開數(shù)據(jù)庫(kù)的實(shí)例采取即刻完全關(guān)閉數(shù)據(jù)庫(kù)。這個(gè)過程非???,因?yàn)樘^了將SGA中的緩存中的所有數(shù)據(jù)寫入數(shù)據(jù)文件和重做日志文件這個(gè)動(dòng)作。隨后重新打開數(shù)據(jù)庫(kù)需要恢復(fù),Oracle自動(dòng)執(zhí)行這個(gè)過程。 注意:如果當(dāng)數(shù)據(jù)庫(kù)打開時(shí)發(fā)生系統(tǒng)錯(cuò)誤或斷電錯(cuò)誤,然后實(shí)例實(shí)際上結(jié)束,當(dāng)數(shù)據(jù)庫(kù)重新打開時(shí)會(huì)執(zhí)行恢復(fù)。 卸載數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)關(guān)閉之后,Oracle卸載數(shù)據(jù)庫(kù)并將它和實(shí)例分離。這時(shí),實(shí)例還在你的計(jì)算機(jī)上保持內(nèi)存。 數(shù)據(jù)庫(kù)卸載之后,Oracle關(guān)閉數(shù)據(jù)庫(kù)的控制文件。 關(guān)閉實(shí)例數(shù)據(jù)庫(kù)關(guān)閉的最后步驟是關(guān)閉實(shí)例。當(dāng)你關(guān)閉一個(gè)實(shí)例時(shí),SGA從內(nèi)存中移除,后臺(tái)進(jìn)程被結(jié)束。 異常實(shí)例關(guān)閉在少數(shù)情況下,實(shí)例可能沒有完全關(guān)閉;內(nèi)存中的所有內(nèi)存結(jié)構(gòu)可能沒有移除或者一個(gè)后臺(tái)進(jìn)程沒有結(jié)束。當(dāng)前一個(gè)實(shí)例還剩余一部分,后續(xù)的實(shí)例啟動(dòng)大部分情況下會(huì)失敗。在這種情況下,數(shù)據(jù)庫(kù)管理員可以強(qiáng)制啟動(dòng)新的實(shí)例,即首先清除上個(gè)實(shí)例的剩余部分,然后啟動(dòng)新的實(shí)例,或者在SQL *Plus中或使用企業(yè)管理器發(fā)布SHUTDOWN ABORT語句。
|
|