Oracle数据库的启动详解

来源:互联网 发布:linux 内网 代理上网 编辑:程序博客网 时间:2024/05/18 04:49
在启用Oracle数据库时,需要用到一个具有Sysdba权限的DBA用户连接到Oracle中,然后通过执行Startup语句来执行启动操作。在启动和关闭数据库时,无论数据库本身处于专用服务器模式还是共享服务器模式,具有Sysdba权限的用户将始终使用一个专用服务器进程连接到数据库中。
(1)    数据库和实例的关系
每一个启动的数据库都对应一个实例。实例是Oracle用来管理数据库的一个实体,它由位于服务器中的内存结构和一系列服务进程组成。对于初学者来说,可以简单的将实例理解为Oracle数据库在运行时位于系统内存中的部分,而将数据库理解为运行时位于硬盘中的部分。
启动数据库时,将在内存中创建与该数据库对应的实例。一个实例只能访问一个数据库,而一个数据库可以被多个实例同时访问。
(2)    数据库启动步骤
Oracle数据库的完整启动过程分为三个步骤:
l      创建并启动与数据库对应的实例。在启动实例时,将为实例创建一系列后台进程和服务进程,并且在内存中创建SGA区等内存结构。在实例启动的过程中只会使用到初始化参数文件,数据库是否存在对实例的启动并没有影响。如果初始化参数设置有误,实例将无法启动。
l      为实例加载数据库。加载数据库时,实例将打开数据库的控制文件,从控制文件中获取数据库名称、数据文件的位置和名称等关于数据库物理结构的信息,为打开数据库做好准备。如果控制文件损坏,实例将无法加载数据库。在加载阶段,实例将不会打开数据库的物理文件──数据文件和重做日志文件。
l      将数据库置为打开状态。在打开数据库时,实例将打开所有处于联机状态的数据文件和重做日志文件。如果在控制文件中列出的任何一个数据文件或重做日志文件无法正常打开,数据库将返回错误信息,这时需要进行数据库恢复。
l      只有将数据库置于打开状态后,数据库才处于正常运行状态,这时普通用户才能访问数据库。出于管理方面的要求,数据库的启动过程经常需要分布进行。很多情况下,数据库并不是直接完成上述三个步骤,而是先完成第1步或到第2步,然后执行必要的管理操作,最后再使数据库进入正常运行状态。因此,DBA需要根据不同的情况决定以不同的方式启动数据库,并且还需要在各种启动状态之间进行切换。
(3)    启动数据库的准备
在准备启动实例之前,首先需要完成一些准备工作,包括启动Sql*plus并连接到Oracle。具体操作命令如下:
l      进入到命令模式,输入Sqlplus/nolog,以不连接数据方式启动Sqlplus;
l      以DBA身份连接Oracle,Connect user/pass as sysdba(OS认证可以不用输入用户名和口令,另外用户必须具备SysDba和SysOper权限)。
(4)    指定初始化参数文件
使用Startup语句时,可以通过pfile参数指定一个服务器端初始化参数文件或文本初始化参数文件。Oracle需要从初始化参数文件中获得有关实例的参数配置信息。如果在执行Startup语句时没有指定Pfile参数,Oracle首先读取默认位置的服务器端初始化参数文件(SPFILE<SID>.ora),如果没有找到,Oracle将继续读取默认位置的文本初始化参数文件(init<SID>.ora)。默认的初始化参数文件位于<oracle_home/database>目录中。
如果使用非默认的文本初始化参数文件,首先定义一个初始化参数文件,例如名称为initweb.ora,然后直接通过“startup pfile=initweb.ora文件路径”来直接调用;如果使用非默认的服务器端初始化参数文件,首先定义一个spf_init.ora文件,文件内容为:spfile=文本初始化参数文件的路径,然后通过“startup pfile=spf_init.ora文件路径”进行调用。
(5)    进入启动模式
数据库和实例的启动过程可以分为三个步骤进行,DBA可以根据实际情况的需要,以不同的模式启动数据库。常见的启动模式有如下三个层次(可以通过select status from v$instance来查询启动模式,Started表示nomount,Mounted表示Mount模式,Open表示数据库打开模式):
l      启动实例,但不加载数据库。即只完成启动步骤地第1步。在这种模式下,任何人都无法访问数据库,一般只有在进行创建数据库、重建控制文件等操作时才启用该模式。具体命令如下:
startup nomount。一般称之为Nomount模式。如果需要执行创建数据库和重建控制文件等维护操作需要使用该模式。在Nomount启动模式下,只能访问那些与SGA区相关的数据字典视图,包括V$PARAMETER、V$SGA、V$OPTION、V$PROCESS、V$VERSION、V$INSTANCE等,这些信息都是从SGA区中获取的,与数据库无关。
l      启动实例并加载数据库,但不打开数据库。即只完成启动步骤的第1步和第2步。在这种模式下只有DBA才能访问数据库,但是只能执行一些有限的管理操作。普通用户此时不能访问数据库。具体命令如下:
startup mount。一般称之为mount模式,这种模式将为实例加载数据库,但却保持数据库的关闭状态,这在进行一些特定的数据库维护工作时是十分必要的。如果需要执行重命名数据文件、添加-删除或重命名重做日志文件、执行数据库完全恢复操作、改变数据库的归档模式等维护操作时需要使用该模式。在Mount启动模式下,只能访问那些与控制文件相关的数据字典视图,包括V$THREAD、V$CONTROLFILE、V$DATABASE、V$DATAFILE、V$LOGFILE等,这些视图中的信息都是从控制文件中获取的。
l      启动实例并加载数据库,然后打开数据库使其处于可用状态。即完成全部3个启动步骤。这是正常的启动模式,所有的用户都能够访问数据库。正常启动模式又可以分为两种状态:非受限状态和受限状态。在受限状态下,只有DBA才能访问数据库;而在非受限状态下,所有用户都能够进行访问。具体命令如下:
startup。这是正常启动模式。普通数据库用户需要对数据库进行操作,比如连接数据库并进行查询,数据库必须处于Open启动模式。在这种启动模式下,任何合法的用户都能够连接到数据库,并进行常规的数据访问操作。使用不带任何子句的startup语句启动的数据库默认的处于非受限状态。
(6)    切换启动模式
可以使用Alter database mount为实例加载数据库,也就是从Nomount启动模式切换到Mount启动模式;也可以使用Alter database open设置数据库为打开状态,也就是从Mount启动模式切换到Open启动模式。而且,Alter database命令只能使用这两种方法进行模式切换。其它模式之间都无法使用Alter database命令进行切换。
(7)    受限状态
在正常启动模式下,可以选择将数据库设置为非受限状态和受限状态。在受限状态下,只有具有管理权限的用户(DBA)才能够访问数据库。当需要进行如下数据库维护操作时,必须将数据库置于受限状态下:
l      执行数据导入和导出操作;
l      使用Sql*Loader提取外部数据;
l      需要暂时拒绝普通用户访问数据库;
l      进行数据库移植或者升级操作。
默认情况下,普通数据库用户只具有Create Session系统权限。只有具有Create Session权限的用户才能够连接到一个打开的数据库中,并且连接的数据库必须处于非受限状态。当打开的数据库被设置为受限状态时,仅具有Create Session权限的用户在访问数据库时将被拒绝。只有同时具有Create Session和Restricted Session系统权限的用户才能够访问受限状态的数据库。通常只将Restricted Session权限授予DBA用户,具有SysDba和SysOpen权限的用户也有权连接受限状态的数据库。
使用Startup Restrict启动数据库,数据库将进入受限状态的Open模式。如果在完成管理操作后需要将数据库恢复为非受限状态,可以使用Alter System语句来改变数据库的状态,执行该语句的用户必须具有Alter System系统权限。比如:Alter System Disable Restricted Session;如果需要在数据库运行过程中由非受限状态切换到受限状态,可以使用Alter System Enable Restricted session语句来实现。在进入受限状态后,系统中仍然可能存在活动的普通用户会话。因此,在开始执行任何DBA操作以前,必须手工终止这些会话。
(8)    只读状态
在正常启动状态下,默认的数据库处于读写状态。此时,用户不但能够从数据库读取数据,而且还可以修改已有的数据库对象或创建新的数据库对象。在必要的时候,可以将数据库设置为只读状态。当数据库处于只读状态时,用户只能查询数据库,但是不能以任何方式对数据库对象进行修改。处于只读状态的数据库能够能够保证数据文件和重做日志文件不被修改,但是不限制那些不会写入数据文件和重做日志文件的操作。比如,在只读状态的数据库中,仍然能够将某个处于脱机状态的数据文件设置为联机状态,因为这项操作并不会产生联机信息。
可以使用Alter Database语句在数据库启动过程中以只读模式打开数据库,执行该语句的用户必须具有Alter Database系统权限,并且只能从Mount模式进行切换。具体命令为:Alter Database Open Read only;同样可以使用命令:Alter Database Open Read Write将数据库从Mount切换为读写的打开模式。
(9)    强行启动数据库
在某些情况下,使用上述各种启动模式可能都无法成功启动数据库,这是需要强行启动数据库。在如下几种情况下需要强行启动数据库:
l      无法使用Shutdown normal、Shutdown immediate或者Shutdown Transactional语句关闭数据库实例;
l      在启动实例时出现无法恢复的错误;
当出现上述情况时,可以通过强行方式来重新启动一个新的数据库实例,以便进行故障查找和排除操作。强行启动数据库使用startup force命令实现。如果在强行启动时,数据库已经有一个实例正在运行,Oracle将首先关闭该实例,然后再重新为这个数据库启动一个新的实例。
原创粉丝点击