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<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
??? [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,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?????
??? --可以查看日志文件的相關信息
??? 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
/*
六、更多*/
?
???
??? SQL/PLSQL 基礎
???
??? Oralce 10g 使用DBCA創建數據庫
???
??? 使用Uniread實現SQLplus翻頁功能
???
??? Linux (RHEL 5.4)下安裝Oracle 10g R2
???
??? VmWare6.5.2下安裝RHEL 5.4(配置Oracle安裝環境)
???
??? Oracle實例和Oracle數據庫(Oracle體系結構)
???
??? Oracle相關
?
總結
以上是生活随笔為你收集整理的Oracle 数据库实例启动关闭过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 判断 JS 中对象的类型
- 下一篇: linux cmake编译源码,linu