您的位置:首页 > 数据库 > Oracle

Oracle 数据库实例启动关闭过程

2012-11-08 03:13 681 查看
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,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.empwhere 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_nameobject_name,
o.object_typefrom all_synonyms s, sys.a
ll_objects o
where s.ownerin
('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,statefrom
v$session where program=
'plsqldev.exe';

USERNAME
STATUS SERVER
STATE
------------------------------ -------- --------- -------------------
SYS
INACTIVE DEDICATED WAITING
SYS
INACTIVE DEDICATED WAITING

SQL>
select sid,ctimefrom v$lock
wheresid
= 275;

SID CTIME
---------- ----------

275 9607
275 9270

275 9243
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: