Oracle數據庫的啓動要經歷3個階段。sql
階段一:啓動實例(Start An Instance)--nomount數據庫
階段二:裝載數據庫(Mount The Database)--mount安全
階段三:打開數據庫(Open The Database)--opensession
①讀取參數文件(Initialization Parameter File, PFILE或者Server Parameter Files, SPFILE)oracle
②Oracle根據參數文件中的參數,分配系統全局區(System Global Area,SGA)rest
③啓動後臺進程(DBWR:數據庫寫入進程,LGWR:日誌寫入進程,CKPT:檢查點進程,SMON:系統監控進程,PMON:進程監控進程,ARCH歸檔進程等)。日誌
這些內存和後臺進程組合起來組成實例(Oracle Instance)。進程
參數文件(PFILE或者SPFILE)還指定了控制文件(Control File)的位置。事務
打開控制文件(Control File),從控制文件中得到數據文件(Data File)和聯機日誌文件(Redo Log File)的名字和位置。這時候,Oracle已經把實例和數據庫關聯起來。對於普通用戶,數據庫仍是不可訪問。內存
Oracle打開數據文件(Data Files)和聯機日誌文件(Redo Log File)。這時候,數據庫可使用。普通能夠登陸數據庫,對數據庫進行操做。
STARTUP NOMOUNT;
ALTER DATABASE MOUNT;
ALTER DATABASE OPEN;
STARTUP (至關於上面三個過程依次進行)
STARTUP PFILE='C: \oracle\product\10.2.0\db_1\dbs\PFILEORCL.ORA';
在限制模式下,只有CREATE SESSION和RESTRICTED SESSION權限的用戶能夠訪問數據庫。
①若是數據庫是關閉的
STARTUP RESTRICT;
②若是數據庫是開啓的
ALTER SYSTEM enable restricted session;
①若是數據庫是關閉的
STARTUP open read only;
②若是數據庫是開啓的
ALTER DATABASE OPEN read only;
在直讀模式下,數據文件和日誌文件都禁止寫操做。整個數據庫是隻讀的。
可是容許數據庫恢復(Database Recovery)及其餘不會產生回滾的操做。
STARTUP OPEN RECOVER;
STARTUP FORCE
這個命令先調用SHUTDOWN ABORT來關閉數據庫,而後在用STARTUP命令,按照正常方式啓動數據庫。STARTUP把數據庫的關閉和啓動兩個過程合二爲一。
①若是數據庫處於NOMOUNT狀態
1) SELECT open_mode FROM v$database;
SELECT open_mode FROM v$database
*
第1行出現錯誤:
ORA-01507: ??????
2)SELECT status FROM v$instance;
STATUS
------------------------
STARTED
②若是數據庫處於MOUNT狀態
1)SELECT open_mode FROM v$database;
OPEN_MODE
----------
MOUNTED
2)SELECT status FROM v$instance;
OPEN_MODE
----------
MOUNTED
③若是數據庫處於OPEN狀態
1)SELECT open_mode FROM v$database;
OPEN_MODE
----------
READ WRITE
2)SELECT status FROM v$instance;
STATUS
------------
OPEN
Oracle的關閉也要經歷三個階段:
階段1:關閉數據庫(Close The Database)
階段2:卸載數據庫(Unmount The Database)
階段3:關閉實例(Shut Down The Instance)
Oracle首先把SGA中的數據寫到數據文件和聯機日誌文件中。而後,Oracle關閉全部的數據文件和聯機日誌文件。這時候,數據庫已經不能夠訪問。
這個階段完成後,控制文件仍然處在打開狀態。
數據庫完成以後,Oracle將分離數據庫和實例之間的聯繫,這個階段叫作「卸載數據庫」或者叫「UNMOUNT數據庫」。
這個階段僅僅是卸載數據庫,實例仍然存活在內存中。
這個階段完成後,控制文件被關閉。
這是關閉數據庫的最後一個階段,這個階段Oracle將從內存中移出SGA和終止正在進行的後臺進程(Background Processes)。至此,數據庫關閉已經完成。
使用NORMAL方式關閉數據庫時,
(1)容許新的用戶注登陸數據庫。
(2)要等全部的用戶自動退出Oracle之後,Oracle才關閉數據庫。因此,若是數據庫存在一個用戶,那麼,Oracle就一直等待,直到這個用戶退出,Oracle才關閉數據庫。
(3)SHUTDOWN NORMAL是最慢的一種數據庫關閉方式。
使用IMMEDIATE方式關閉數據庫時,
(1)新的用戶不能登陸數據庫;
(2)未提交的事務將會被回滾(ROLLED BACK)
(3)Oracle不會等待全部的用戶(鏈接)退出數據庫。
特色:
(1) 以IMMEDIATE方式關閉數據庫不須要實例恢復(Instance Recovery);
(2) SHUTDOWN IMMEDIATE是最安全的關閉方式;
注:推薦使用這種方式關閉數據庫。
以TRANSACTIONAL方式關閉數據庫時,會發生下面的事情:
(1)不容許新的用戶登陸數據庫;
(2)不容許創建新的事務(New Transactions);
(3)全部的事務(transactions)完成之後才關閉數據庫;
(4)一個用戶(會話)執行完手裏的事務(transactions)後將被強行斷開與數據庫的聯機。
特色:
(1)這種關閉方式不會使客戶端的數據丟失。
(2)這種關閉方式不須要實例恢復(Instance Recovery);
以ABORT方式關閉數據庫時,
(1)不容許啓動新的鏈接(New Connections)和新的事務(New Transactions);
(2)客戶端的SQL語句(Client SQL Statements)馬上終止;
(3)未提交的事務不被回滾(Rollback);
(4)Oracle馬上終止全部鏈接(會話)。
特色:
(1)只有數據庫出現問題時候,才使用這種方式關閉數據庫;
(2)這是一種最不安全的關閉方式,數據庫重啓時須要實例恢復(Oracle後臺進程);
(3)以ABORT方式關閉數據庫使最快的一種方式。
(1)cmd->
lsnrctl start ->
net start oracleservice%ORACLE_SID% ->
set ORACLE_SID=%ORACLE_SID%
sqlplus / as sysdba
startup
shutdown immediate
(2)cmd-> lsnrctl start
再到在 「服務」 中啓動 oracleservice%ORACLE_SID% 服務
set ORACLE_SID=%ORACLE_SID%
sqlplus / as sysdba
startup
shutdown immediate
su - oracle
lsnrctl start
export ORACLE_SID=$ORACLE_SID
sqlplus / as sysdba
startup
shutdown immediate