Oracle 資料庫例項啟動關閉過程
--================================
-->Oracle 資料庫例項啟動關閉過程
--================================
/*
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
b.分配SGA
c.啟動後臺程式
d.開啟並修改告警
使用場景:
多用於資料庫建立、控制檔案重建、特定的備份恢復等
注意:
此階段不開啟任何的控制檔案及資料檔案。
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
[oracle@robinson ~]$ 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
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 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
------ 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
--啟動到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的後臺程式。從開始。
SQL> !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 3972 3333 0 13:07 pts/1 00:00:00 sqlplus as sysdba
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 ps -aef | grep oracle
oracle 4010 4009 0 13:10 pts/1 00:00:00 ps -aef
--可以看到已經分配了SGA
SQL> !ipcs -a
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x99eb282c 65537 oracle 640 402653184 14
------ Semaphore Arrays --------
key semid owner perms nsems
0x6df43ca0 98304 oracle 640 127
0x6df43ca1 131073 oracle 640 127
0x6df43ca2 163842 oracle 640 127
------ Message Queues --------
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
*
ERROR at line 1:
ORA-01507: database not mounted
--切換到mount階段
SQL> alter database mount;
Database altered.
--可以檢視控制檔案的相關資訊
SQL> select * from v$controlfile;
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,NAMEfrom 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
--可以檢視日誌檔案的相關資訊
SQL> select * from v$logfile;
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
*
ERROR at line 1:
ORA-01219: database not open: queries allowed on fixed tables/views only
--切換到open 階段
SQL> alter database open;
Database altered.
--再次檢視程式資訊,多出了之後的相關程式
SQL> !ps -aef | grep 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
root 4068 4036 0 13:29 pts/1 00:00:00 su - oracle
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 ps -aef | grep oracle
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
SYS INACTIVE DEDICATED WAITING
SQL> select sid,ctime from v$lock where sid = 275;
SID CTIME
---------- ----------
275 9607
275 9270
275 9243
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23490154/viewspace-1062372/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【02】Oracle資料庫的例項啟動關閉詳解Oracle資料庫
- oracle資料庫的啟動與關閉過程詳解Oracle資料庫
- 例項管理及資料庫的啟動關閉資料庫
- oracle資料庫的關閉過程Oracle資料庫
- 2 Day DBA-管理Oracle例項-關閉和啟動Oracle例項-使用OEMDC關閉和啟動Oracle例項Oracle
- Oracle例項的啟動和關閉Oracle
- Oracle資料庫啟動過程Oracle資料庫
- mongodb關閉資料庫例項MongoDB資料庫
- oracle 例項啟動和關閉解讀Oracle
- Oracle單例項+ASM啟動與關閉Oracle單例ASM
- 2 Day DBA-管理Oracle例項-關於例項的啟動和關閉-關於例項啟動Oracle
- 2 Day DBA-管理Oracle例項-關於例項的啟動和關閉-關於例項關閉Oracle
- 3.1.5.1 關於啟動資料庫例項資料庫
- Oracle資料庫的啟動與關閉Oracle資料庫
- Oracle資料庫的啟動和關閉Oracle資料庫
- 通過SQL*Plus遠端啟動Oracle資料庫例項SQLOracle資料庫
- Oracle資料庫例項啟動步驟分析Oracle資料庫
- ORACLE資料庫的啟動和關閉(轉)Oracle資料庫
- 2 Day DBA-管理Oracle例項-關於例項的啟動和關閉-管理啟動和關閉許可權Oracle
- Oracle Restart啟動資料庫例項故障一例OracleREST資料庫
- 資料庫啟動過程資料庫
- 資料庫自動啟動關閉資料庫
- 資料庫啟動和關閉資料庫
- oracle資料庫啟動過程大揭祕Oracle資料庫
- 啟動/關閉與冷備份Oracle資料庫Oracle資料庫
- 隨系統啟動關閉的oracle資料庫Oracle資料庫
- ASM CRS 例項啟動和關閉ASM
- rac 管理 啟動關閉資料庫資料庫
- ORACLE資料庫的啟動和關閉之二(轉)Oracle資料庫
- Oracle資料庫的幾種啟動和關閉方式Oracle資料庫
- 深刻理解Oracle資料庫的啟動和關閉Oracle資料庫
- 深刻理解 oracle 資料庫的啟動和關閉Oracle資料庫
- Oracle11g RAC在例項關閉後自動在啟動例項上歸檔Oracle
- Oracle資料庫啟動過程及狀態詳解Oracle資料庫
- oracle資料庫的啟動關閉與各種服務Oracle資料庫
- oracle資料庫不同啟動命令和關閉命令全面解析Oracle資料庫
- 深刻理解Oracle資料庫的啟動和關閉(轉)Oracle資料庫
- 3.1.5.4 啟動例項並mount 資料庫資料庫