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