Oracle資料庫執行個體的啟動,嚴格來說應該是執行個體的啟動,資料庫僅僅是在執行個體啟動後進行裝載。Oracle資料啟動的過程被劃分為
幾個不同的步驟,在不同的啟動過程中,我們可以對其實作不同的操作,系統修複等等工作,是以了解Oracle資料啟動、關閉是非常
有必要的。下面詳細了Oracle Database 10g 資料庫啟動及關閉的過程。
一、資料庫執行個體的啟動
啟動指令:starup [force][restrict] [pfile=...] [nomount] [mount] [open]
啟動過程:nomount ---> mount ---> open (startup不帶參數将逐漸一一完成)
1.nomount階段(即執行個體的啟動)
執行個體的啟動通常包含下列任務:
a.按以下順序在$ORACLE_HOME/dbs[win平台為database]目錄下搜尋下列檔案,即如果第一個沒找到,就找下一個
spfile<SID>.ora ---> spfile.ora ---> init<SID>.ora
b.配置設定SGA
c.啟動背景程序
d.打開并修改告警<SID>.log檔案及跟蹤檔案
使用場景:
多用于資料庫建立、控制檔案重建、特定的備份恢複等
注意:
此階段不打開任何的控制檔案及資料檔案。
2.mount階段
mount階段完成的任務:
a.啟動執行個體并打開控制檔案,将資料庫與執行個體關聯起來
b.利用參數檔案中的說明,打開并鎖定控制檔案
c.讀取控制檔案以擷取資料檔案和重做日志檔案的名字和狀态資訊,但不檢查資料日志檔案是否存在
a.重命名資料檔案,移動資料檔案位置等(資料庫打開,表空間脫機的情況下也可以重命名資料檔案)
b.啟用或關閉重做日志檔案的歸檔及非歸檔模式
c.實作資料庫的完全恢複
這一步會讀控制檔案,如果這一步有一個控制檔案損壞就無法啟動
3.open階段
mount階段完成的任務:
a.打開資料檔案
b.打開聯機日志檔案
a.在此期間,Oracle伺服器将校驗所偶的資料檔案和聯機日志檔案能否打開并對資料庫作一緻性檢查
b.如果出現一緻性錯誤,SMON程序将啟動執行個體恢複
c.如果任一資料檔案或聯機日志檔案丢失,Oracle伺服器将報錯
4.特殊的方式打開資料庫
隻讀模式:
startup open read only;
如果現在在mount
alter database open read only;
受限模式:
有時進行資料庫維護護,希望一般的使用者不能登入。可以啟動到該模式,這樣隻有使用者具有
restricted session 權限,才可登入到資料庫。
啟動方法:
startup restrict;
取消受限:
alter system disable restricted session;
二、資料庫執行個體的關閉
關閉指令:shutdowm abort | immediate | transactional | normal (shutdown不帶參數将預設為normal)
關閉選項:
normal --->不準許新的連接配接,等待目前的session 結束,等待目前的事務結束,強制檢查點并關閉檔案
transactional --->不準許新的連接配接,不等待目前的session結束,等待目前的事務結束,強制檢查點并關閉檔案。
immediate --->不準許新的連接配接,不等待目前的session結束,不等待目前的事務結束,強制檢查點并關閉檔案。
abort --->不準許新的連接配接,不等待目前的session結束,不等待目前的事務結束,不作強制檢查點。
三、幾類診斷檔案
包含有重要意義時間的具體資訊,用于解決問題,用于日常更好的管理資料庫
a.alterSID.log 告警檔案
記錄了資料庫啟動、關閉時間和一些重要操作及錯誤警告資訊,包含錯誤号ora-,由dba管理
位置由background_dump_dest
維護alertSID.log,定期轉移,系統會自動産生新的alert_sid.log
b.背景程序跟蹤檔案:
記錄了背景程序的一些重要資訊和警告、錯誤等
位置:$ORACLE_BASE/admin/vvorcl/bdump/vvorcl_lgwr_15135.trc
c.使用者跟蹤檔案:
由使用者程序産生也能由伺服器程序産生,跟蹤使用者的SQL語句的統計資訊,也包括錯誤資訊
檔案位置由user_dump_dest
使用者跟蹤:
會話級:
alter session set sql_trace=true;
執行個體級:
alter system set set sql_trace=true;
跟蹤檔案的大小由max_dump_file_size參數決定。跟蹤時最好要限制他的大小
四、動态性能視圖
記錄目前資料庫的活動,并且不停的更新,故不能保證讀取資料的一緻性
監控和調整資料庫
所有者sys
以v$開頭
DICT和DICT_COLUMNS視圖包含了動态性能視圖描述及其列的描述
v$FIXED_TALBE包含了所有視圖的名字及相關資訊
五、示範
[root@robinson ~]# su - oracle
--檢視未啟動執行個體前的程序情況
[oracle@robinson ~]$ ps -aef |grep oracle
root 3332 3300 0 12:20 pts/1 00:00:00
su - oracle
oracle 3333 3332 0 12:20 pts/1 00:00:00 -bash
oracle 3365 3333 0 12:20 pts/1 00:00:00 ps -aef
oracle 3366 3333 0 12:20 pts/1 00:00:00 grep
oracle
--使用ipcs檢視目前程序間通訊所用到的共享資源,記憶體段及信号量,可以看出目前無任何通信裝置及共享資源
[oracle@robinson ~]$
ipcs -a
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
------ Semaphore Arrays --------
key semid owner perms nsems
------ Message Queues --------
key msqid owner perms used-bytes messages
--登陸到sqlplus
sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Thu Apr 29 13:07:29 2010
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to an idle instance.
--再次檢視程序情況,多出了程序
SQL> !ps -aef | grep
oracle 3972 3333 0 13:07 pts/1 00:00:00 sqlplus as sysdba
oracle 3973 3972 0 13:07 ? 00:00:00 oracleorcl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle 3974 3972 0 13:07 pts/1 00:00:00 /bin/bash -c
ps -aef | grep oracle
oracle 3975 3974 0 13:07 pts/1 00:00:00 ps -aef
--再次檢視程序間通訊資源,同樣是沒有任何配置設定
SQL> !ipcs -a
--啟動到nomount
SQL> startup nomount
ORACLE instance started.
Total System Global Area 398458880 bytes
Fixed Size 1219640 bytes
Variable Size 117441480 bytes
Database Buffers 276824064 bytes
Redo Buffers 2973696 bytes
--可以看到多出了一些背景程序,即為Oracle的背景程序。從開始。
oracle 3981 1 0 13:09 ? 00:00:00 ora_pmon_orcl
oracle 3983 1 0 13:09 ? 00:00:00 ora_psp0_orcl
oracle 3985 1 0 13:09 ? 00:00:00 ora_mman_orcl
oracle 3987 1 0 13:09 ? 00:00:00 ora_dbw0_orcl
oracle 3989 1 0 13:09 ? 00:00:00 ora_lgwr_orcl
oracle 3991 1 0 13:09 ? 00:00:00 ora_ckpt_orcl
oracle 3993 1 0 13:09 ? 00:00:00 ora_smon_orcl
oracle 3995 1 0 13:09 ? 00:00:00 ora_reco_orcl
oracle 3997 1 0 13:09 ? 00:00:00 ora_cjq0_orcl
oracle 3999 1 0 13:09 ? 00:00:00 ora_mmon_orcl
oracle 4001 1 0 13:09 ? 00:00:00 ora_mmnl_orcl
oracle 4003 1 0 13:09 ? 00:00:00 ora_d000_orcl
oracle 4005 1 0 13:09 ? 00:00:00 ora_s000_orcl
oracle 4006 3972 0 13:09 ? 00:00:00 oracleorcl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle 4009 3972 0 13:10 pts/1 00:00:00 /bin/bash -c
oracle 4010 4009 0 13:10 pts/1 00:00:00 ps -aef
--可以看到已經配置設定了SGA
key shmid owner perms bytes nattch status
0x99eb282c 65537 oracle 640 402653184 14
0x6df43ca0 98304 oracle 640 127
0x6df43ca1 131073 oracle 640 127
0x6df43ca2 163842 oracle 640 127
key msqid owner perms used-bytes messages
--檢視控制檔案,沒有任何資料,因為此階段控制檔案并沒有打開
SQL> select * from v$controlfile;
no rows selected
--檢視資料檔案和日志檔案,提示database not mounted
SQL> select * from v$datafile;
select * from v$datafile
*
ERROR at line 1:
ORA-01507: database not mounted
SQL> select * from v$logfile;
select * from v$logfile
--切換到mount階段
SQL> alter database mount;
Database altered.
--可以檢視控制檔案的相關資訊
STATUS NAME IS_ BLOCK_SIZE FILE_SIZE_BLKS
------- -------------------------------------------------- --- ---------- --------------
/u01/app/oracle/oradata/orcl/control01.ctl NO 16384 430
/u01/app/oracle/oradata/orcl/control02.ctl NO 16384 430
/u01/app/oracle/oradata/orcl/control03.ctl NO 16384 430
--可以檢視資料檔案的相關資訊
SQL> select FILE#,STATUS,ENABLED,CHECKPOINT_CHANGE#,CHECKPOINT_TIME,ONLINE_TIME,NAME from v$datafile;
FILE# STATUS ENABLED CHECKPOINT_CHANGE# CHECKPOIN ONLINE_TI NAME
---------- ------- ---------- ------------------ --------- --------- --------------------------------------------------
1 SYSTEM READ WRITE 2027235 28-APR-10
06-APR-10 /u01/app/oracle/oradata/orcl/system01.dbf
2 ONLINE READ WRITE 2027235 28-APR-10
06-APR-10 /u01/app/oracle/oradata/orcl/undotbs01.dbf
3 ONLINE READ WRITE 2027235 28-APR-10
06-APR-10 /u01/app/oracle/oradata/orcl/sysaux01.dbf
4 ONLINE READ WRITE 2027235 28-APR-10
06-APR-10 /u01/app/oracle/oradata/orcl/users01.dbf
5 ONLINE READ WRITE 2027235 28-APR-10 /u01/app/oracle/oradata/orcl/example01.dbf
6 ONLINE READ WRITE 2027235 28-APR-10 /u01/app/oracle/oradata/orcl/Test.dbf
7 ONLINE READ WRITE 2027235 28-APR-10 /u01/app/oracle/oradata/orcl/ORCL/datafile/o1_mf_s
_5vrl1t7h_.dbf
--可以檢視日志檔案的相關資訊
GROUP# STATUS TYPE MEMBER IS_
---------- ------- ------- ------------------------------------------------------------ ---
3 ONLINE /u01/app/oracle/oradata/orcl/redo03.log NO
2 ONLINE /u01/app/oracle/oradata/orcl/redo02.log NO
1 ONLINE /u01/app/oracle/oradata/orcl/redo01.log NO
--資料不可通路,因為在此階段,資料檔案,日志檔案并沒有打開
SQL> select * from scott.emp;
select * from scott.emp
*
ORA-01219: database not open: queries
allowed on fixed tables/views only
--切換到open 階段
SQL> alter database open;
--再次檢視程序資訊,多出了之後的相關程序
root 4068 4036 0 13:29 pts/1 00:00:00
oracle 4069 4068 0 13:29 pts/1 00:00:00 -bash
oracle 4101 4069 0 13:29 pts/1 00:00:00 sqlplus
oracle 4102 4101 0 13:29 ? 00:00:01 oracleorcl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle 4137 1 0 13:54 ? 00:00:00 ora_qmnc_orcl
oracle 4139 1 0 13:54 ? 00:00:01 ora_j000_orcl
oracle 4141 1 0 13:54 ? 00:00:00 ora_j001_orcl
oracle 4143 1 0 13:54 ? 00:00:00 ora_j002_orcl
oracle 4145 1 0 13:54 ? 00:00:00 ora_j003_orcl
oracle 4147 1 0 13:54 ? 00:00:00 ora_j004_orcl
oracle 4149 1 0 13:54 ? 00:00:00 ora_j005_orcl
oracle 4159 1 0 13:54 ? 00:00:00 ora_q001_orcl
oracle 4167 1 0 13:56 ? 00:00:00 ora_q002_orcl
oracle 4169 1 0 13:57 ? 00:00:00 ora_q003_orcl
oracle 4172 4101 0 13:58 pts/1 00:00:00 /bin/bash -c
oracle 4173 4172 0 13:58 pts/1 00:00:00 ps -aef
--資料已可正常通路
SQL> select * from scott.emp where ename = 'SCOTT';
EMPNO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- --------- ---------- ----------
DEPTNO
----------
7788 SCOTT ANALYST 7566 19-APR-87 3000
--檢視告警日志檔案路徑
SQL> show parameter background_dump_dest
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
background_dump_dest string /u01/app/oracle/admin/orcl/bdu
mp
--檢視動态性能視圖
SQL> select sql_text,executions from v$sql where cpu_time >2000000;
SQL_TEXT
--------------------------------------------------------------------------------
EXECUTIONS
select s.synonym_name object_name, o.object_type from all_synonyms
s, sys.a
ll_objects o where s.owner in ('PUBLIC', :schema) and o.owner = s.table_owner
an
d o.object_name = s.table_name and o.object_type in ('TABLE', 'VIEW', 'PACKAGE',
'TYPE', 'PROCEDURE', 'FUNCTION', 'SEQUENCE')
2
SQL> select username,status,server,state from v$session where program = 'plsqldev.exe';
USERNAME STATUS SERVER STATE
------------------------------ -------- --------- -------------------
SYS INACTIVE DEDICATED WAITING
SQL> select sid,ctime from v$lock where sid = 275;
SID CTIME
---------- ----------
275 9607
275 9270
275 9243