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