要啟動和關閉數據庫,必須要以具有Oracle 管理員權限的用戶登陸,通常也就是以具有SYSDBA權限的用戶登陸。一般我們常用SYS用戶以SYSDBA連接來啟動和關閉數據庫。下面介紹Oracle數據庫幾種不同的數據庫啟動和關閉方式之間的區別以及它們各自不同的功能。
1 數據庫的啟動(STARTUP)
在Startup命令中,可以通過不同的選項來控制數據庫的不同啟動步驟。
1、STARTUP NOMOUNT
NONOUNT選項僅僅創建一個Oracle實例。讀取init.ora初始化參數文件、啟動后台進程、初始化系統全局區(SGA)。Init.ora文件定義了實例的配置,包括內存結構的大小和啟動后台進程的數量和類型等。實例名根據Oracle_SID設置,不一定要與打開的數據庫名稱相同。當實例打開后,系統將顯示一個SGA內存結構和大小的列表,如下所示:
SQL> startup nomount
ORACLE instance started.
Total System Global Area 35431692 bytes
Fixed Size 70924 bytes
Variable Size 18505728 bytes
Database Buffers 16777216 bytes
Redo Buffers 77824 bytes
2、STARTUP MOUNT
該命令創建實例並且安裝數據庫,但沒有打開數據庫。Oracle系統讀取控制文件中關於數據文件和redo log文件的內容,但並不打開這些文件。這種打開方式常在數據庫維護操作時使用,如對數據文件的更名、改變redo log以及打開歸檔方式、執行數據庫的full database recovery。在這種打開方式下,除了可以看到SGA系統列表以外,系統還會給出" Database mounted. "的提示。
3、STARTUP
該命令完成創建實例、安裝實例和打開數據庫的所有三個步驟。此時數據庫使數據文件和redo log文件在線,通常還會請求一個或者是多個回滾段。這時系統除了可以看到前面Startup Mount方式下的所有提示外,還會給出一個" Database opened. "的提示。此時,數據庫系統處於正常工作狀態,可以接受用戶請求。
如果采用STARTUP NOMOUNT或者是STARTUP MOUNT的數據庫打開命令方式,必須采用ALTER DATABASE命令來執行打開數據庫的操作。例如,如果你以STARTUP NOMOUNT方式打開數據庫,也就是說實例已經創建,但是數據庫沒有安裝和打開。這時必須運行下面的兩條命令,數據庫才能正確啟動。
ALTER DATABASE MOUNT;
ALTER DATABASE OPEN;
而如果以STARTUP MOUNT方式啟動數據庫,則只需要運行下面一條命令即可以打開數據庫:
ALTER DATABASE OPEN;
4、其他打開方式
除了前面介紹的三種數據庫打開方式選項外,還有另外其他的一些選項。
(1) STARTUP RESTRICT
這種方式下,數據庫將被成功打開,但僅僅允許一些特權用戶(具有DBA角色的用戶)才可以使用數據庫。這種方式常用來對數據庫進行維護,如數據的導入/導出操作時不希望有其他用戶連接到數據庫操作數據、數據裝載、特定的遷移或者升級操作等。
(2) STARTUP FORCE
該命令其實是強行關閉數據庫(shutdown abort)和啟動數據庫(startup)兩條命令的一個綜合。該命令僅在關閉數據庫遇到問題不能關閉數據庫時采用。
(3) ALTER DATABASE OPEN READ ONLY;
該命令在創建實例以及安裝數據庫后,以只讀方式打開數據庫。對於那些僅僅提供查詢功能的產品數據庫可以采用這種方式打開。
2 數據庫的關閉(SHUTDOWN)
對於數據庫的關閉,有四種不同的關閉選項。
1、SHUTDOWN NORMAL
這是數據庫關閉SHUTDOWN命令的確省選項。也就是說如果輸入SHUTDOWN這樣的命令,也就是執行SHUTDOWN NORNAL命令。
發出該命令后,任何新的連接都將再不允許連接到數據庫。在數據庫關閉之前,Oracle將等待目前連接的所有用戶都從數據庫中退出后才開始關閉數據庫。采用這種方式關閉數據庫,在下一次啟動時不需要進行任何的實例恢復。但需要注意的是,采用這種方式,也許關閉一個數據庫需要幾天時間,或者更長。
2、SHUTDOWN IMMEDIATE
這是常用的一種關閉數據庫的方式,想很快地關閉數據庫,但又想讓數據庫干凈的關閉,常采用這種方式。
當前正在被Oracle處理的SQL語句立即中斷,系統中任何沒有提交的事務全部回滾。如果系統中存在一個很長的未提交的事務,采用這種方式關閉數據庫也需要一段時間(該事務回滾時間)。系統不等待連接到數據庫的所有用戶退出系統,強行回滾當前所有的活動事務,然后斷開所有的連接用戶。
3、SHUTDOWN TRANSACTIONAL
該選項僅在Oracle 8i后才可以使用。該命令常用來計划關閉數據庫,它使當前連接到系統且正在活動的事務執行完畢,運行該命令后,任何新的連接和事務都是不允許的。在所有活動的事務完成后,數據庫將和SHUTDOWN IMMEDIATE同樣的方式關閉數據庫。
4、SHUTDOWN ABORT
這是關閉數據庫的最后一招,也是在沒有任何辦法關閉數據庫的情況下才不得不采用的方式,一般不要采用。如果下列情況出現時可以考慮采用這種方式關閉數據庫。
1、 數據庫處於一種非正常工作狀態,不能用shutdown normal或者shutdown immediate這樣的命令關閉數據庫;
2、 需要立即關閉數據庫;
3、 在啟動數據庫實例時遇到問題;
所有正在運行的SQL語句都將立即中止。所有未提交的事務將不回滾。Oracle也不等待目前連接到數據庫的用戶退出系統。下一次啟動數據庫時需要進行實例恢復,因此,下一次啟動可能比平時需要更多的時間。
下表為上述四種不同關閉數據庫的區別和聯系。
關閉方式 Abort Immediate Transaction Nornal
允許新的連接 × × × ×
等待直到當前會話中止 × × × √
等待直到當前事務中止 × × √ √
強制CheckPoint,關閉所有文件 × √ √ √

兩個都可以加上 as sysdba 就是最高權限。但是sys一定要加上。system可加可不加
