Oracle數據庫的啟動
Oracle數據庫的啟動要經歷3個階段。
階段一:啟動實例(Start An Instance)--nomount
階段二:裝載數據庫(Mount The Database)--mount
階段三:打開數據庫(Open The Database)--open
1.啟動實例
①讀取參數文件(Initialization Parameter File, PFILE或者Server Parameter Files, SPFILE)
②Oracle根據參數文件中的參數,分配系統全局區(System Global Area,SGA)
③啟動后台進程(DBWR:數據庫寫入進程,LGWR:日志寫入進程,CKPT:檢查點進程,SMON:系統監控進程,PMON:進程監控進程,ARCH歸檔進程等)。
這些內存和后台進程組合起來組成實例(Oracle Instance)。
參數文件(PFILE或者SPFILE)還指定了控制文件(Control File)的位置。
2.裝載數據庫
打開控制文件(Control File),從控制文件中獲得數據文件(Data File)和聯機日志文件(Redo Log File)的名字和位置。這時候,Oracle已經把實例和數據庫關聯起來。對於普通用戶,數據庫還是不可訪問。
3.打開數據庫
Oracle打開數據文件(Data Files)和聯機日志文件(Redo Log File)。這時候,數據庫可以使用。普通可以登錄數據庫,對數據庫進行操作。
4.分步啟動Oracle
STARTUP NOMOUNT;
ALTER DATABASE MOUNT;
ALTER DATABASE OPEN;
5.直接啟動Oracle
STARTUP (相當於上面三個過程依次進行)
6.使用特定初始化參數文件(Initialization Parameter File, FILE)啟動數據庫
STARTUP PFILE='C: \oracle\product\10.2.0\db_1\dbs\PFILEORCL.ORA';
7.把數據庫啟動到限制模式(RESTRICT)
在限制模式下,只有CREATE SESSION和RESTRICTED SESSION權限的用戶可以訪問數據庫。
①如果數據庫是關閉的
STARTUP RESTRICT;
②如果數據庫是開啟的
ALTER SYSTEM enable restricted session;
8.以只讀模式(Read Only)打開數據庫
①如果數據庫是關閉的
STARTUP open read only;
②如果數據庫是開啟的
ALTER DATABASE OPEN read only;
在直讀模式下,數據文件和日志文件都禁止寫操作。整個數據庫是只讀的。
但是允許數據庫恢復(Database Recovery)及其他不會產生回滾的操作。
9.把數據庫啟動到回復模式(RECOVER)
STARTUP OPEN RECOVER;
10.重啟數據庫(RESET)
STARTUP FORCE
這個命令先調用SHUTDOWN ABORT來關閉數據庫,然后在用STARTUP命令,按照正常方式啟動數據庫。STARTUP把數據庫的關閉和啟動兩個過程合二為一。
11.如何知道數據庫處於何種狀態
①如果數據庫處於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)
1.關閉數據庫
Oracle首先把SGA中的數據寫到數據文件和聯機日志文件中。然后,Oracle關閉所有的數據文件和聯機日志文件。這時候,數據庫已經不可以訪問。
這個階段完成后,控制文件仍然處在打開狀態。
2.UNMOUNT數據庫
數據庫完成之后,Oracle將分離數據庫和實例之間的聯系,這個階段叫做“卸載數據庫”或者叫“UNMOUNT數據庫”。
這個階段僅僅是卸載數據庫,實例仍然存活在內存中。
這個階段完成后,控制文件被關閉。
3.關閉實例
這是關閉數據庫的最后一個階段,這個階段Oracle將從內存中移出SGA和終止正在進行的后台進程(Background Processes)。至此,數據庫關閉已經完成。
4. SHUTDOWN NORMAL
使用NORMAL方式關閉數據庫時,
(1)允許新的用戶注登錄數據庫。
(2)要等所有的用戶自動退出Oracle以后,Oracle才關閉數據庫。所以,如果數據庫存在一個用戶,那么,Oracle就一直等待,直到這個用戶退出,Oracle才關閉數據庫。
(3)SHUTDOWN NORMAL是最慢的一種數據庫關閉方式。
5.SHUTDOWN IMMEDIATE
使用IMMEDIATE方式關閉數據庫時,
(1)新的用戶不能登錄數據庫;
(2)未提交的事務將會被回滾(ROLLED BACK)
(3)Oracle不會等待所有的用戶(連接)退出數據庫。
特點:
(1) 以IMMEDIATE方式關閉數據庫不需要實例恢復(Instance Recovery);
(2) SHUTDOWN IMMEDIATE是最安全的關閉方式;
注:推薦使用這種方式關閉數據庫。
6. SHUTDOWN TRANSACTIONAL
以TRANSACTIONAL方式關閉數據庫時,會發生下面的事情:
(1)不允許新的用戶登錄數據庫;
(2)不允許建立新的事務(New Transactions);
(3)所有的事務(transactions)完成以后才關閉數據庫;
(4)一個用戶(會話)執行完手里的事務(transactions)后將被強行斷開與數據庫的聯機。
特點:
(1)這種關閉方式不會使客戶端的數據丟失。
(2)這種關閉方式不需要實例恢復(Instance Recovery);
7. SHUTDOWN ABORT
以ABORT方式關閉數據庫時,
(1)不允許啟動新的連接(New Connections)和新的事務(New Transactions);
(2)客戶端的SQL語句(Client SQL Statements)立刻終止;
(3)未提交的事務不被回滾(Rollback);
(4)Oracle立刻終止所有連接(會話)。
特點:
(1)只有數據庫出現問題時候,才使用這種方式關閉數據庫;
(2)這是一種最不安全的關閉方式,數據庫重啟時需要實例恢復(Oracle后台進程);
(3)以ABORT方式關閉數據庫使最快的一種方式。
一般操作
Windows:
(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
Linux:
su - oracle
lsnrctl start
export ORACLE_SID=$ORACLE_SID
sqlplus / as sysdba
startup
shutdown immediate