Oracle从新手到高手
上QQ阅读APP看书,第一时间看更新

3.2 启动数据库与实例

由于Oracle数据库的启动过程是分步进行的,因此数据库可以以多种模式启动。不同的启动模式之间能够相互切换。此外,除以正常方式启动数据库外,还能够将数据库设置为受限状态或只读状态,以满足特殊管理工作的需要。

3.2.1 启动数据库的步骤

由于实例是Oracle用来管理数据库的一个实体,因此在启动数据库时将在内存中创建与该数据库所对应的实例。

1. 创建并启动与数据库对应的实例

在启动实例时,将为实例创建一系列后台进程和服务进程,并且在内存中创建SGA区等内存结构。在实例启动的过程中只会使用到初始化参数文件,数据库是否存在,对实例的启动并没有影响。如果初始化参数设置有误,实例将无法启动。

2. 为实例加载数据库

加载数据库时实例将打开数据库的控制文件,并从控制文件中获取数据库名称、数据文件的位置和名称等关于数据库物理结构的信息,为打开数据库做好准备。如果控制文件损坏,则实例将无法加载数据库。在加载数据库阶段,实例并不会打开数据库的物理文件—数据文件和重做日志文件。

3. 将数据库设置为打开状态

打开数据库时,实例将打开所有处于联机状态的数据文件和重做日志文件。如果在控制文件中列的任何一个数据文件或重做日志文件无法正常打开,数据库将返回错误信息,这时需要进行数据库恢复。

只有将数据库置为打开状态后,数据库才能处于正常的运行状态,这时普通用户才能访问数据库。在很多情况下,启动数据库时并不是直接完成上述3个步骤,而是逐步完成的,然后执行必要的管理操作,最后再使数据库进入正常的运行状态。

例如,如果需要重命名数据库中的某个数据文件,而数据库当前正处于正常启动状态,可能还会有用户正在访问该数据文件中的数据,因此无法对数据文件进行更改。这时必须将数据库关闭,并进入加载状态,但不打开状态,这样将断开所有用户的连接,然后再对数据文件进行重命名,完成操作后再重新打开数据库供用户使用。因此,数据库管理员需要根据不同的情况决定以不同的方式启动数据库,并且还需要在各种启动状态之间进行切换。

在启动实例之前,首先需要启动SQL*Plus并连接Oracle。具体步骤如下:

① 在命令提示符窗口中输入如下命令,以不连接数据库的方式启动SQL*Plus。

② 以SYSDBA身份连接Oracle。

      SQL> connect system/admin as sysdba
      已连接。

3.2.2 启动模式

由上面的介绍可知,数据库和实例的启动过程可以分为3个步骤:启动实例、加载数据库和打开数据库。数据库管理员可以根据实际情况,以不同的模式启动数据库。启动数据库所使用的STARTUP命令格式如下:

     startup [nomount | mount | open | force][resetrict] [pfile=filename]

其中,NOMOUNT选项用于指定启动实例;MOUNT选项用于指定启动例程并装载数据库;OPEN选项用于指定启动例程、装载并打开数据库,这也是默认的选项;FORCE选项用于指定终止实例并重新启动数据库;RESETRICT用于指定以受限会话方式启动数据库;PFILE则用于指定启动实例时所使用的文本参数文件。

数据库实例在启动时必须读取一个初始化参数文件,以便从初始化参数文件中获得有关实例的参数配置信息。当在STARTUP语句启动数据库时,通过PFILE参数指定一个服务器端初始化参数文件或文本初始化参数文件。如果在STARTUP语句中没有指定PFILE参数,则Oracle首先读取默认位置的服务器端初始化参数文件SPFILE,如果没有找到默认服务器端初始化参数文件,Oracle则将继续读取默认位置的文本初始化参数文件。下面将详细介绍如何使用STARTUP语句启动数据库到各种启动模式。

1. 启动实例不加载数据库(NOMOUNT模式)

这种启动模式只会创建实例,但并不加载数据库,Oracle仅为实例创建各种内存结构和服务进程,不会打开任何数据文件。当要执行下列维护工作时,必须在NOMOUNT启动模式下进行:

※ 创建新数据库。

※ 重建控制文件。

进入这种启动模式需要使用带有NOMOUNT子句的STARTUP语句。下面显示了在SQL*Plus中启动数据库进入NOMOUNT模式的过程。

在启动NOMOUNT模式下,只能访问那些与SGA区相关的数据字典视图,包括V$PARAMETER、V$SGA、V$PROCESS和V$SESSION等,这些视图中的信息都是从SGA区获取的,与数据库无关。

2. 加载数据但不打开数据库(MOUNT模式)

这种启动模式将为实例加载数据库,但却保持数据库的关闭状态,这在进行一些特定的数据库维护工作时十分必要。

在执行下列维护工作时必须在MOUNT启动模式下进行。

※ 重命名数据文件。

※ 添加、删除或重命名重做日志文件。

※ 执行数据库完全恢复操作。

※ 改变数据库的归档模式。

加载数据库时需要打开数据库控制文件,但数据文件和重做日志文件都无法进行读写,用户也就无法对数据库进行操作。进入这种启动模式需要使用MOUNT子句的STARTUP语句。下面显示了在SQL*Plus中启动数据库进入MOUNT模式的过程。

在启动到MOUNT模式下,只能访问到那些与控制文件相关的数据字典视图,包括V$THREAD、V$CONTROLFILE、V$Database、V$DATAFILE和V$LOGFILE等,这些视图中的信息都是从控制文件中获取的。

3. 打开数据库(OPEN模式)

这是正常启动模式,用户要对数据库进行操作时,数据库必须处于OPEN启动模式。进入这种启动模式可以使用不带任何子句的STARTUP语句。下面展示了在SQL*Plus中启动数据库进入OPEN模式的过程。

4. 强制启动数据库

在某些情况下,使用上述各种启动模式可能都无法成功启动数据库,这时需要强行启动数据库。强制启动数据库时需要使用带有FORCE子句的STARTUP语句,例如:

3.2.3 转换启动模式

在进行某些特定的管理和维护操作时,需要使用某种特定的启动模式来启动数据库。但是当管理或维护操作完成后,需要改变数据库的启动模式。例如,为一个未加载数据库的实例加载数据库,或者将一个处于未打开状态的数据库设置为打开状态等。

在数据库的各种启动模式之间进行切换需要使用ALTER Database语句。下面分别介绍在不同的情况下,如何利用ALTER Database语句来改变数据库的启动模式。

1. 实例加载数据库

在执行一些特殊的管理和维护操作时,需要进入NOMOUNT启动模式。完成操作后,可以使用如下语句为实例加载数据库,并切换到MOUNT启动模式。

2. 打开数据库

为实例加载数据库后,数据库可能仍然处于关闭状态。为了使用户能够访问数据库,可以使用如下语句打开数据库,即切换到OPEN启动模式。

      SQL> alter Database open;

      数据库已更改。

数据库设置为打开状态后,用户即可以正常方式访问数据库了。

3. 切换受限状态

在正常启动模式下(OPEN启动模式),可以选择将数据库设置为非受限状态和受限状态。在受限状态下,只有具有管理权限的用户才能访问数据库。当需要进行如下数据库维护操作时,必须将数据库置于受限状态。

※ 执行数据导入或导出操作。

※ 暂时拒绝普通用户访问数据库。

※ 进行数据库移植或升级操作。

当打开的数据库被设置为受限状态时,只有同时具有CREATE SESSION和RESTRICTED SESSION系统权限的用户才能够访问。具有SYSDBA和SYSOPER系统权限的用户也有权连接受限状态的数据库。

可以使用如下的语句启动数据库,将数据库启动到受限状态的OPEN模式。

如果在完成管理操作后需要将数据库恢复为非受限状态,可以使用ALTER SYSTEM语句来改变数据库的状态。例如:

      SQL> alter system disable restricted session;

      系统已更改。

如果在数据库运行过程中需要由非受限状态切换到受限状态,同样可以通过ALTER SYSTEM语句来实现。例如:

      SQL> alter system enable restricted session;

      系统已更改。

提示:

在进入受限状态后,系统中仍然可能会存在活动的普通用户会话。

4. 切换只读状态

在正常启动状态下,默认的数据库处于读写状态。此时用户不但能够从数据库中读取数据,而且还可以修改已有的数据库对象或创建新的数据库对象。在必要时,可以将数据库设置为只读状态。当数据库处于只读状态时,用户只能查询数据库,但是不能以任何方式对数据库对象进行修改。

提示:

处理只读状态的数据库能够保证数据文件和重做日志文件中的内容不被修改,但是并不限制那些不会写入数据文件与重做日志文件的操作。

可以使用ALTER Database语句在数据库运行过程中切换为只读模式,例如:

同样可以利用ALTER Database语句重新将数据库设置为读写模式。例如:

      SQL> alter Database open read write;

      数据库已更改。