2012年1月22日 星期日

oracle數據庫的啟動與關閉過程詳解

http://taven.chinaorg.net/1034635

命令行啟動數據庫
在發布startup命令啟動數據庫時,oracle將在默認位置$ORACLE_HOME/dbs(UNIX/Linux)中查找初始化參數文件。Oracle將以下面的順序在其中尋找合適的初始化文件
Ø        Spfile$ORACLE_SID.ora
Ø        Spfile.ora
Ø        Init$ORACLE_SID.ora
可以用幾種方式啟動oracle數據庫。
a)        STARTUP NOMOUNT命令
可以在SQL*Plus會話中使用STARTUP NOMOUNT命令啟動實例,這樣啟動僅有實例運行。如果以這種方式啟動,將不讀控制文件,而且數據文件也不打開。操作系統啟動Oracle後台進程,並且給oracle分配SGA。事實上,只有實例本身在運行。
SQL> startup nomount;
ORACLE例程已經啟動。

Total System Global Area 167772160 bytes
Fixed Size                 1247900 bytes
Variable Size             75498852 bytes
Database Buffers          88080384 bytes
Redo Buffers               2945024 bytes
SQL>
有時在某些維護操作和恢復過程中,不能打開數據庫讓大家訪問。在此情形下可以以這種方式啟動。在數據庫創建過程中且必須重建控制文件時,也需要使用nomount啟動模式。
b)       STARTUP MOUNT命令
在啟動過程中,實例啟動後的下一步是安裝數據庫。在安裝步驟中,oracle把實例與數據庫關聯。Oracle打開並讀取控制文件,獲取數據文件和重做日誌文件的名稱和位置。
如果已經以以非安裝模式啟動了數據庫,應該使用一下命令:
SQL> alter database mount;
數據庫已更改。
SQL>
為了以安裝模式直接啟動,可使用如下命令:
SQL> startup mount;
ORACLE例程已經啟動。

Total System Global Area 167772160 bytes
Fixed Size                 1247900 bytes
Variable Size             75498852 bytes
Database Buffers          88080384 bytes
Redo Buffers               2945024 bytes
數據庫裝載完畢。
SQL>
在進行諸如全數據庫恢復、更改數據庫的歸檔日誌模式或重命名數據文件這一類的活動時,通常需要以安裝模式啟動數據庫。請注意,這三種操作都要求oracle訪問數據文件,但不提供對文件的用戶操作。
c)       STARTUP OPEN命令
啟動過程的最後一步是打開數據庫。當數據庫以打開模式啟動時,所有有效用戶可以連接到數據庫,執行數據庫操作。在此步驟之前,一般用戶根本就不能連接到數據庫。通過發布下面的命令讓數據庫出於打開模式:
   SQL>
alter database open;
數據庫已更改。
SQL>
更常見的是使用STARTUP命令同時安裝和打開數據庫:
SQL> startup;
ORACLE例程已經啟動。

Total System Global Area 167772160 bytes
Fixed Size                 1247900 bytes
Variable Size             75498852 bytes
Database Buffers          88080384 bytes
Redo Buffers               2945024 bytes
數據庫裝載完畢。
數據庫已經打開。
SQL>
為了打開數據庫,oracle服務器首先打開所有數據文件和聯機重做日誌文件,並確認數據庫是一致的。如果數據庫不一致,例如,如果控制文件中的SCN與數據文件頭中的某些SCN不匹配,則後台進程將自動在打開數據庫前進行一個實例恢復。如果需要介質恢復而不是實例恢復,oracle將指出需要數據庫恢復,並且在你完成恢復前不能打開數據庫。
2、 命令行關閉數據庫
為進行某種類型的備份或者軟件的升級等活動,可能需要關閉一個正在運行的數據庫,關閉數據庫有幾種方式。所選擇的方式將影響關閉數據庫所花費的時間,並且在重啟數據庫時可能需要進行數據庫實例恢復。下面是關閉數據庫的4種可用方式。
a)        SHUTDOWN NORMAL命令
如下發布此命令:
SQL>shutdown
normal;
以下是SHUTDOWN NORMAL命令的詳細說明:
Ø        一旦發布此命令,不允許任何用戶進行新的連接;
Ø        在關閉數據庫之前,oracle等待所有的用戶退出會話;
Ø        重啟數據庫時不需要實例恢復,因為oracle會在關閉以前把所有重做日誌緩衝區和數據塊緩衝區內容寫入磁盤,從而使數據庫關閉時是一致的;
Ø        Oracle關閉數據文件並終止後台進程,釋放內存。
b)       SHUTDOWN TRANSACTIONAL命令
如果不想等待某用戶退出而花費很長時間,可以使用SHUTDOWN
TRANSACTIONAL命令,如下發布此命令:
SQL>shutdown
transactional;
以下是SHUTDOWN TRANSACTIONAL命令的詳細說明:
Ø        一旦發布此命令,不允許任何用戶進行新的連接;
Ø        現有用戶不能啟動新事務,並且將斷開連接;
Ø        如果某用戶有一個正在執行的事務,在斷開該用戶的連接前,oracle將等待直到該事務完成;
Ø        重啟數據庫時不需要實例恢復,因為oracle會在關閉以前把所有重做日誌緩衝區和數據塊緩衝區內容寫入磁盤,從而使數據庫關閉時是一致的;
Ø        在所有現有事務完成後,oracle關閉實例並釋放內存;
c)       SHUTDOWN IMMEDIATE命令
有時,在決定關閉數據庫時,某用戶可能正在執行非常長得事務。在這樣的情形下,前面介紹的兩種方式都不適用。可以使用SHUTDOWN IMMEDIATE命令關閉數據庫。如下發布此命令:
SQL>shutdown
immediate;
以下是SHUTDOWN IMMEDIATE命令的詳細說明:
Ø        一旦發布此命令,不允許任何用戶進行新的連接;
Ø        立即斷開所有用戶的連接;
Ø        終止所有當前正在執行的事務;
Ø        對於所有半途終止的事務,oracle將進行回退,使數據庫保持一致。隨後終止後台進程並釋放內存。
Ø        重啟數據庫時不需要實例恢復,因為它在關閉時是一致的。
d)       SHUTDOWN ABORT命令
就oracle而言,使用這個選項相當於斷電。如下發布此命令:
SQL>shutdown abort;
下面是SHUTDOWN ABORT命令的詳細說明:
Ø        一旦發布此命令,不允許任何用戶進行新的連接;
Ø        現有會話被終止,不管它們是否有活動的事務;
Ø        不回退被終止的事務;
Ø        不將重做日誌緩衝區和數據緩衝區寫到磁盤;
Ø        終止後台進程、立即釋放內存並關閉數據庫;
Ø        在重啟時,oracle將執行自動實例恢復,因為不能保證數據庫在關閉時是一致的。

沒有留言:

張貼留言