Oracle 數據庫啟動與關閉 各種方式詳解整理


概述概述

只有具備sysdba和sysoper系統特權的用戶才能啟動和關閉數據庫。
在啟動數據庫之前應該啟動監聽程序,否則就不能利用命令方式來管理數據庫,包括啟動和關閉數據庫。
雖然數據庫正常運行,但如果沒有啟動監聽程序,客戶端就不能連接到數據庫。

在oracle用戶下:
啟動監聽程序 lsnrctl start
關閉監聽程序lsnrctl stop
查詢監聽程序狀態lsnrctl status

startup支持參數

STARTUP options | upgrade_options

options為:[FORCE] [RESTRICT] [PFILE=filename] [QUIET] [ MOUNT [dbname]

| [ OPEN [open_options] [dbname] ] | NOMOUNT ],

NOMOUNT、MOUNT、OPEN為startup的三個階段,不能在命令中同時存在。其中,open_options為:READ {ONLY

| WRITE [RECOVER]} | RECOVER。

upgrade_options為:[PFILE=filename] {UPGRADE | DOWNGRADE} [QUIET]

Oracle數據庫的完整啟動過程包含以下3個步驟:

簡單地說,就是:啟動實例-->加載數據庫-->打開數據庫.


1.創建並啟動與數據庫對應的實例。

在啟動實例時,將為實例創建一系列后台進程和服務進程,並且在內存中創建SGA區等內存結構。在實例啟動的過程中只會使用到初始化參數文件,數據庫是否存在對實例的啟動沒有影響。如果初化參數設置有誤,實例將無法啟動。

2.為實例加載數據庫。

加載數據庫時實例將打開數據庫的控制文件,從控制文件中獲取數據庫名稱、數據文件的位置和名稱等有關數據庫物理結構的信息,為打開數據庫做好准備。如果控制文件損壞,則實例將無法加載數據庫。在加載數據庫階段,實例並不會打開數據庫的物理文件----數據文件和重做日志文件。

3.將數據庫設置為打開狀態。

打開數據庫時,實例將打開所有處於聯機狀態的數據文件和重做日志文件。控制文件中的任何一個數據文件或重做日志文件無法正常打開,數據庫都將返回錯誤信息,這時需要進行數據庫恢復。

只有將數據庫設置為打開狀態后,數據庫才處於正常狀態,這時普通用戶才能夠訪問數據庫。在很多情況下,啟動數據庫時並不是直接完成上述3個步驟,而是逐步完成的,然后執行必要的管理操作,最后才使數據庫進入正常運行狀態。所以,才有了各種不同的啟動模式用於不同的數據庫維護操作。

因為Oracle數據庫啟動過程中不同的階段可以對數據庫進行不同的維護操作,對應我們不同的需求,所以就需不同的模式啟動數據庫。

小白:在啟動實例之前,需要先啟動SQL*Plus,並以一個用戶身份連接到Oracle。

啟動模式詳解

1.NoMount 模式(啟動實例不加載數據庫)

命令:startup nomount
講解:這種啟動模式只會創建實例,並不加載數據庫,Oracle僅為實例創建各種內存結構和服務進程,不會打開任何數據文件。在NoMount模式下,只能訪問那些與SGA區相關的數據字典視圖,包括V$PARAMETERV$SGAV$PROCESSV$SESSION等,這些視圖中的信息都是從SGA區中獲取的,與數據庫無關。非安裝啟動,這種方式啟動下可執行:重建控制文件、重建數據庫、讀取init.ora文件,啟動instance,即啟動SGA和后台進程,這種啟動只需要init.ora文件。

模式用途:
(1)創建新數據庫;
(2)重建控制文件。

2.Mount模式(加載數據庫但不打開數據庫)

命令:startup mount
講解:這種啟動模式將為實例加載數據庫,但保持數據庫為關閉狀態。因為加載數據庫時需要打開數據庫控制文件,但數據文件和重做日志文件都都無法進行讀寫,所以用戶還無法對數據庫進行操作。 在Mount模式下,只能訪問那些與控制文件相關的數據字典視圖,包括V$THREADV$CONTROLFILEV$DATABASEV$DATAFILEV$LOGFILE等,這些視圖都是從控制文件中獲取的。

模式用途:
(1)重命名數據文件;
(2)添加、刪除或重命名重做日志文件;
(3)執行數據庫完全恢復操作;
(4)改變數據庫的歸檔模式。

3.Open模式(正常打開數據庫)

命令:startup [open]
講解:正常按3個步驟啟動數據庫。

模式用途:
平時不對數據庫做什么維護,像只做應用開發,用這個模式就好了。

4.強制啟動模式

命令:startup force
用途&講解:在某些情況下,使用前面的各種模式都無法成功啟動數據庫時,可以嘗試強制啟動模式。
使用Alter Database語句,還可以在各啟動模式間切換。並且,還可以對數據庫設置不同的狀態用於不同的操作,如受/非受限抽狀態、只讀。

使用Alter Database語句,在各啟動模式間切換。
(1)從NoMount模式切換到Mount模式(沒有從mount切換到nomount的):
命令:ALTER DATABASE MOUNT;
(2)當數據庫狀態為關閉時,切換到Open模式
命令:ALTER DATABASE OPEN;
(3)在Open模式下,還可以選擇將數據庫設置為非受限狀態和受限狀態。
命令:
在啟動Open模式時,添加restrict關鍵字:startup restrict
設置或取消受限狀態:alter system enable\disable restricted session;

講解:
非受限狀態,就是我們平時應用程序開發用到的狀態。
受限狀態,當打開的數據庫被設置為受限狀態時,只有Create SessionRestricted Session系統權限 或者 具有SYSDBASYSPORE 系統權限的用戶才能連接到數據庫。但進入受限狀態后,系統中仍然可能會存在活動的普通用戶會話。

受限狀態用途:
(1)執行數據導入或導出操作;
(2)暫時拒絕普通用戶訪問數據庫;
(3)進行數據庫移植或升級操作。
(4) 只讀狀態

設置只讀命令:alter database open read only;
取消只讀命令:alter database open read write;
用途&講解:當一個正常打開的數據庫被設置為只讀狀態時,用戶只能查詢數據,但不能以任何方式對數據庫對象進行修改。處於只讀狀態,可能保證數據文件和重做日志文件中的內容不被修改,但是並不限制那些不會寫入數據文件與重做日志文件的操作。

關閉數據庫與實例

與數據庫啟動一樣,關閉數據庫與實例也分為3步:關閉數據庫-->實例卸載數據庫--->終止實例。

(1)關閉數據庫,oracle將重做日志高速緩存中的內容寫入重做日志文件,並且將數據庫高速緩存中被改動過的數據寫入數據文件,然后再關閉所有的數據文件和重做日志文件,這時數據庫的控制文件仍然處於打開狀態,但是由於數據庫處於關閉狀態,所以用戶無法訪問數據庫。
(2)卸載數據庫,關閉數據庫后,例程才能被卸載,控制文件再這個時候被關閉,但例程仍然存在 。
(3)終止例程,進程終止,分配給例程的內存sga區被回收。

1.Nomal(正常關閉方式)

命令:shutdown nomal
講解:正常方式關閉數據時,Oracle執行如下操作:
(1)阻止任何用戶建立新的連接。
(2)等待當前所有正在連接的用戶主動斷開連接(此方式下Oracle不會立即斷掉當前用戶的連接,這些用戶仍然操作相關的操作)
(3)一旦所有的用戶都斷開連接,則立即關閉、卸載數據庫,並終止實例。(所以,一般以正常方式關閉數據庫時,應該通知所有在線的用戶盡快斷開連接)

2.Immediate(立即關閉方式)

命令:shutdown immediate
講解:
(1)阻止任何用戶建立新的連接,同時阻止當前連接的用戶開始任何新的事務。
(2)Oracle不等待在線用戶主動斷開連接,強制終止用戶的當前事務,將任何未提交的事務回退。(如果存在太多未提交的事務,此方式將會耗費很長時間終止和回退事務)
(3)直接關閉、卸載數據庫,並終止實例。

3.Transactional(事務關閉方式)

命令:shutdown transactional
講解:這種方式介於正常關閉方式跟立即關閉方式之間,響應時間會比較快,處理也將比較得當。執行過程如下:
(1)阻止任何用戶建立新的連接,同時阻止當前連接的用戶開始任何新的事務。
(2)等待所有未提交的活動事務提交完畢,然后立即斷開用戶的連接。
(3)直接關閉、卸載數據庫,並終止實例。

4.Abort(終止關閉方式)

命令:shutdown abort
講解:這是比較粗暴的一種關閉方式,當前面3種方式都無法關閉時,可以嘗試使用終止方式來關閉數據庫。但是以這種方式關閉數據庫將會丟失一部份數據信息,當重新啟動實例並打開數據庫時,后台進程SMON會執行實例恢復操作。一般情況下,應當盡量避免使用這種方式來關閉數據庫。執行過程如下:

(1)阻止任何用戶建立新的連接,同時阻止當前連接的用戶開始任何新的事務。
(2)立即終止當前正在執行的SQL語句。
(3)任何未提交的事務均不被退名。
(4)直接斷開所有用戶的連接,關閉、卸載數據庫,並終止實例。

附加說明:

shutdown

完全關閉狀態 關閉命令是shutdown immediate(立即關閉)

nomount

在這個狀態下,oracle會打開參數文件,分配SGA並打開后台進程
這種狀態下,可以查詢后台進程和實例信息。如:

select * from v$bgporcess;
select * from v$instance;
v$parameter、v$sga、v$process、v$session、v$instance

等等

mount

在mount狀態下,oralce會在nomount的基礎上,根據control_files的設置來打開控制文件。在nomount的基礎上,進入此狀態的命令是:alter database mount
在此狀態下:可以執行的命令有:

select * from v$tablespace;命名空間
select * from v$datafile;數據文件
select * from v$database;數據庫信息 
v$controlfile、v$database、v$datafile、v$logfile

open

這個狀態表示數據庫完全打開,在mount的基礎上,使用命令alter database open,在mount的基礎上根據控制文件的記錄打開所有的數據文件和重做日志。
此狀態下,就是完全打開的狀態,可以進行權限范圍內的所有操作
1,在 shutdown 狀態,可以通過使用startup nomount|mount|open|force|restrict 直接跳到某個狀態。force是強制進入open狀態(無論當前什么狀態),restrict是指進入open狀態但只有具備了restricted session 權限的用戶才可以登錄。如果使用startup不加參數,那么直接就是進入open狀態。
2,如果使用alter database ****啟動oracle ,必須按照順序啟動
即:nomount-->mount-->open
不能越級,不能反方向。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM