oracle启动过程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
通常所说的Oracle Server主要由两个部分组成:Instance和Database。Instance是指一组后台进程(在Windows上是一组线程)和一块共享内存区域;Database是指存储在磁盘上的一组物理文件。通过I nstance与Database协同,Oracle数据库才能形成一个动态的可访问关系型数据库系统。
本章将由数据库如何启动与关闭入手,开始和大家一起进入Oracle数据库的国度。
1.1 数据库的启动
从表象来看,数据库的启动极其简单,只需要以SYSDBA/SYSOPER身份登陆,敲一条startup命令既可启动数据库。然而在这条命令之后,Oracle需要执行一系列复杂的操作,深入理解这些操作不仅有助于了解Oracle数据库的运行机制,还可以在故障发生时帮助大家快速的定位问题的根源所在,所以接下来让我们一起分析一下数据库的启动过程。
Oracle数据库的启动主要包含三个步骤:
启动数据库到Nomount状态
启动数据库到Mount状态
启动数据库到Open状态
完成这三个过程,数据库才能进入就绪状态,准备提供数据访问。下面逐个来看看以上各个步骤的具体过程以及含义。
1.1.1 启动数据库到Nomount状态
在启动的第一步骤,Oracle首先寻找参数文件(pfile/spfile),然后根据参数文件中的设置(如内存分配等设置),创建实例(INSTANCE),分配内存,启动后台进程。Nomount的过程也就是启动数据库实例的过程。这个过程在后台是启动Oracle可执行程序的过程,Windows上是oracle.exe文件的初始化,在U nix/Linux上是oracle可执行文件的初始化。
Windows上Oracle11g的执行文件大小约为86M,而Linux下Oracle11g的执行文件达到145M左右:
D:\oracle\product\11.1.0\BIN>dir oracle.exe
2007-10-03 17:42 89,702,400 oracle.exe
[oracle@localhost bin]$ ls -al $ORACLE_HOME/bin/oracle
-rwsr-s--x 1 oracle dba 151901909 Jul 4 15:13 /opt/oracle/product/11.1.0/bin/oracle
在Unix/Linux上可以通过file命令查看oracle执行文件来判断Oracle是64位或是32位的,以下是Li nux平台的一个示范输出,输出显示Oracle为32位:
[oracle@localhost bin]$ file $ORACLE_HOME/bin/oracle
/opt/oracle/product/11.1.0/bin/oracle: setuid setgid ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.5, dynamically linked (uses shared libs), not stripped
在Windows上,也有可选的命令增强工具可以提供类似的功能。
了解Oracle可执行文件还有另外一个用途,在Unix/Linux上通过strings命令可以将oracle可执行文件中的字符文本转储出来,在转储的文本中可以找到很多有意思的信息,比如一些Oracle未公开的Hints 信息、数据库字典基表创建信息等,类似如下一条命令可以完成这样的工作:
strings $ORACLE_HOME/bin/oracle > oracle.txt
在Nomount初始化的过程中,只要拥有了一个参数文件,就可以凭之启动实例(INSTANCE),这一步骤并不需要任何控制文件或数据文件等的参与。
1.1.1.1 实例以及进程的创建
以下是正常情况下启动到nomount状态的过程:
[oracle@eygle bdump]$ sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on Wed Jun 28 12:42:30 2006
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> connect / as sysdba
Connected to an idle instance.
SQL> startup nomount;
ORACLE instance started.
Total System Global Area 1073741824 bytes
Fixed Size 1223488 bytes
Variable Size 264242368 bytes
Database Buffers 801112064 bytes
Redo Buffers 7163904 bytes
注意这里,Oracle根据参数文件的内容,创建了instance,分配了相应的内存区域,启动了相应的后台进程。SGA的分配信息从以上输出中可以看到。
观察告警日志文件(alert_.log),可以看到这一阶段的启动过程:读取参数文件,应用参数启动实例。所有在参数文件中定义的非缺省参数都会记录在告警日志文件中,以下是这一过程的日志摘要示例:
Wed Jun 28 12:42:40 2006
Starting ORACLE instance (normal)
LICENSE_MAX_SESSION = 0
LICENSE_SESSIONS_WARNING = 0
Picked latch-free SCN scheme 2
Autotune of undo retention is turned on.
IMODE=BR
ILAT =18
LICENSE_MAX_USERS = 0
SYS auditing is disabled
ksdpec: called for event 13740 prior to event group initialization
Starting up ORACLE RDBMS Version: 10.2.0.1.0.
System parameters with non-default values: