資料庫啟動和關閉

risingsunczl發表於2007-01-25

資料庫啟動和關閉

資料庫關閉方式的驗證

[@more@]
1、nomount狀態
此步驟只啟動instance,即建立記憶體和相應的程式
a、資料庫啟動時尋找引數檔案的順序:
spfile.ora---&gtspfile.ora---&gtinit.ora,如果這三個檔案都沒有找到,則無法啟動資料庫例項instance
b、引數檔案最少且必須要有一個引數,即db_name(RMAN情況不需要任何引數,db_name預設為DUMMY),啟動後,我們可以執行如下語句:
show parameter 引數名
此種方法也可以作為檢測各種引數的預設設定
2、mount狀態
在前面的基礎上,執行如下:
alter database mount;
此步驟需要找到控制檔案並鎖定控制檔案,同時向控制檔案中記錄mount id,啟動heartbeat(每隔一段時間改變mount id),另外需要找到口令檔案,如果找不到這兩類檔案(控制檔案有3個一樣的,如果同時都找不到,則...),則無法mount
如何驗證呢?可在mount前後執行如下語句:
select * from v$controlfile;
口令檔案的作用:在沒有啟動資料庫之前登入資料庫,進而啟動資料庫,否則內建使用者在資料庫啟動之前是無法登入的
3、open狀態
1、從上一次的啟動和關閉文章中,很容易得出如下結論:
啟動到nomount狀態需要引數檔案
啟動到mount狀態需要控制檔案和口令檔案
啟動到open狀態需要控制檔案和日誌檔案
2、sqlplus "/ as sysdba"
a、在沒有啟動任何例項之前,執行此命令
b、在nomount狀態後,執行此命令
c、在mount狀態後,執行此命令
d、在open狀態後,執行此命令
在上述四種情況下都可以連線
3、啟動命令的順序及引數
在nomount狀態下,必須執行:
alter database mount;
alter database open;
兩個步驟才行,不能直接open
同樣,在mount狀態下,只須執行:
alter database open;
或者,直接startup (open)
------------------------------
startup nomount 不帶引數
startup mount (dbname)
startup nomount (dbname)
4、深入一點的啟動過程,如何找引數檔案
首先修改了登錄檔ora_sid項的值,此時啟動到nomount狀態,提示啟動失敗。經查明原因如下:啟動到nomount狀態時,系統根據登錄檔的ora_sid的值,在ora_home/database路徑下尋找init.ora檔案,依據此檔案中的內容找到引數檔案(此路徑也就是登錄檔中ORA_sid_PFILE鍵的值),如果在上述過程中找不到任何一個檔案,啟動都會失敗
5、如何得知資料庫的啟動狀態
兩種方法:
select status from v$instance;(分別對應:started,mounted,open)
select open_mode from v$database;(分別對應:出錯,mounted,read write)
1、常見的啟動方式
(1)startup nomount
非安裝啟動,這種啟動方式下可執行:重建控制檔案、重建資料庫和啟動instance,即啟動SGA和後臺程式,這種啟動只需要init.ora檔案。
(2)startup mount dbname
安裝啟動,這種啟動方式下可執行:資料庫日誌歸檔、資料庫恢復和重新命名一些資料庫檔案。

(3)startup open dbname
先執行“nomount”,然後執行“mount”,再開啟包括Redolog檔案在內的所有資料庫檔案,這種方式下可訪問資料庫中的資料。

(4)startup等於以下三個命令
startup nomount
alter database mount
alter database open

(5)startup restrict
約束方式啟動,這種方式能夠啟動資料庫,但只允許具有一定特權的使用者訪問,非特權使用者訪問時,會出現以下提示:
ERROR:
ORA-01035: Oracle 只允許具有RESTRICTED SESSION許可權的使用者使用。

(6)startup force
強制啟動方式,當不能關閉資料庫時,可以用startup force來完成資料庫的關閉,先關閉資料庫,再執行正常啟動資料庫命令。

(7)startup pfile=引數檔名
帶初始化引數檔案的啟動方式,先讀取引數檔案,再按引數檔案中的設定啟動資料庫。
例:startup pfile=E:Oracleadminoradbpfileinit.ora

(8)startup exclusive
SQL>conect internal
作為internal連線時,connect命令不需要口令,因為其授權是由作業系統隱式提供的。Internal連線等價於sys連線,它們都是擁有Oracle資料字典的使用者。
注意:oracle9i以後不支援internal使用者
2、常見的關閉方式
(1)shutdown normal(正常關閉資料庫)
在正常關閉情況下,Oracle在關閉資料庫前,等待所有與之相連線的使用者正常結束其對話。於是在下次啟動資料庫時,就不需要恢復例項。

(2)shutdown immediate(立即方式關閉資料庫)
當選擇Immediate關閉方式時,即實現直接關閉。在SVRMGRL中執行shutdown immediate,資料庫並不立即關閉, 而是在Oracle執行某些清除工作後才關閉(終止會話、釋放會話資源),當使用shutdown不能關閉資料庫時,shutdown immediate可以完成資料庫關閉的操作。
該關閉方式主要用於下列情況:
①馬上停電;
②Oracle正在非正規的執行資料庫或一個資料庫應用。
該方式關閉資料庫過程如下:
①Oracle結束當前正在處理的SQL語句;
②回滾未提交的事務;
③Oracle不等待與之相連線的使用者退出連線,就直接中斷他們,使用這種關閉方式,下次啟動資料庫時,Oracle應自動執行例項恢復。

(3)shutdown abort(撤消例項方式關閉資料庫)
這是一種最快的關閉方式,它主要用於下列情況:
①一分鐘後就要停電;
②Oracle正在非正規的執行資料庫或一個資料庫應用,並且其它的關閉方式失效;
③啟動一個資料庫例項時碰到問題。
該方式關閉資料庫的過程如下:
①Oracle不等待呼叫完成,直接中斷正在處理的SQL語句;
②回滾未提交事物。
使用這種關閉方式,下次啟動資料庫時,Oracle應自動執行例項恢復。啟動和關閉例項和資料庫的操作需要connect internal系統特權,安裝和開啟資料庫的操作還要有alter database系統特權。直接關閉資料庫,正在訪問資料庫的會話會被突然終止,如果資料庫中有大量操作正在執行,這時執行shutdown abort後,重新啟動資料庫需要很長時間。

(4)SHUTDOWN TRANSACTIONAL
該選項僅在Oracle 8i後才可以使用。該命令常用來計劃關閉資料庫,它使當前連線到系統且正在活動的事務執行完畢,執行該命令後,任何新的連線和事務都是不允許的。在所有活動的事務完成後,資料庫將和SHUTDOWN IMMEDIATE同樣的方式關閉資料庫。
資料庫關閉方式的驗證
我們知道資料庫有4種關閉方式:
shutdown (normal)
shutdown transactional
shutdown immediate
shutdown abort
其中後面2種基本上屬於強行關閉,而前面2種是有條件限制的,我們來驗證一下 :
1、shutdown (normal)
第一步,開啟sqlplus,以一個正常的使用者進入,此時不需要作任何操作
第二步,在命令列中或者sqlplus中以sys使用者(sysdba身份)進入,然後執行:shutdown (normal),此時系統沒有了任何反應
第三步,如果我們在第一步的視窗中退出,此時資料庫會立即關閉
說明:如果有任何會話連線資料庫,則不能以shutdown (normal)關閉資料庫,直到全部會話退出
2、shutdown transactional
第一步,開啟sqlplus,以一個正常的使用者進入,此時假設我們更新一個表的一行資料,但是沒有提交
第二步,在命令列中或者sqlplus中以sys使用者(sysdba身份)進入,然後執行:shutdown transactional,此時系統沒有了任何反應
第三步,如果我們在第一步的視窗中提交或回滾,此時資料庫會立即關閉
說明:如果有任何事務沒有結束,則不能以shutdown (normal)關閉資料庫,直到所有事務結束

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/653579/viewspace-893434/,如需轉載,請註明出處,否則將追究法律責任。

相關文章