資料庫啟動和關閉
資料庫關閉方式的驗證
1、nomount狀态 此步驟隻啟動instance,即建立記憶體和相應的程序 a、資料庫啟動時尋找參數檔案的順序: spfile<sid>.ora--->spfile.ora--->init<sid>.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_sid>.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)關閉資料庫,直到所有事務結束