1. 程式人生 > 其它 >Oracle 資料庫啟動與關閉 各種方式詳解整理

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
不能越級,不能反方向。