当您启动一个数据库时,您将创建该数据库的实例并确定该数据库的状态。通常,通过挂载和打开数据库来启动实例。这样做可以使数据库可供任何有效用户连接并执行典型的数据访问操作。
关于数据库启动选项
当不使用 Oracle Restart 时,可以使用 SQL*Plus、Recovery Manager 或 Oracle Enterprise Manager Cloud Control(Cloud Control)启动数据库实例。如果您的数据库是由 Oracle Restart 管理的,建议使用 SRVCTL 启动数据库。
使用 SQL*Plus 启动数据库
您可以启动 SQL*Plus 会话,以管理员权限连接到 Oracle 数据库,然后发出 STARTUP
命令。以这种方式使用SQL*Plus 是本书中详细描述的唯一方法。
- 执行 SQL*Plus
STARTUP
命令。
使用 Recovery Manager 启动数据库
您还可以使用 Recovery Manager(RMAN)来执行 STARTUP
和 SHUTDOWN
命令。如果您在 RMAN 环境中并且不想调用 SQL*Plus,那么您可能更喜欢这样做。
- 执行 RMAN
STARTUP
命令。
使用 Cloud Control 启动数据库
您可以使用 Cloud Control 来管理数据库,包括启动和关闭数据库。Cloud Control 结合了 GUI 控制台、代理、公共服务和工具,为管理 Oracle 产品提供了一个集成和全面的系统管理平台。云控制使您能够使用 GUI 界面而不是命令行操作来执行本书中讨论的功能。
- 在 Cloud Control 中,启动数据库实例。
使用 SRVCTL 启动数据库
当数据库安装并配置了 Oracle Restart 后,Oracle 建议使用 SRVCTL 启动数据库。
使用 SRVCTL 启动数据库实例确保:
-
数据库所依赖的任何组件(如 Oracle Automatic Storage Management 和 Oracle Net 监听器)都将自动以适当的顺序首先启动。
-
根据 Oracle Restart 配置中的设置启动数据库。例如,设置服务器参数文件位置。
-
Oracle Restart 配置存储的数据库环境变量是在启动实例之前设置的。
使用 SRVCTL 启动数据库实例:
- 执行
srvctl start database
命令。
Specifying Initialization Parameters at Startup
要启动实例,数据库必须从服务器参数文件(SPFILE)或文本初始化参数文件(PFILE)中读取实例配置参数(初始化参数)。数据库在默认位置查找这些文件。您可以为这些文件指定非默认位置,而实现这一点的方法取决于您是使用 SQL*Plus(在不使用 Oracle Restart 时)启动数据库,还是使用 SRVCTL(在使用 Oracle Restart 管理数据库时)启动数据库。
关于初始化参数文件和启动
启动数据库实例时,它尝试从特定于平台的默认位置的 SPFILE 中读取初始化参数。如果没有找到 SPFILE,则搜索文本初始化参数文件。
在特定于平台的默认位置中,Oracle 数据库按照以下顺序检查文件名来定位您的初始化参数文件:
- SRVCTL 命令
srvctl add database
或srvctl modify database
中的 -spfile 选项指定的位置
您可以使用srvctl config database
命令检查当前设置。 spfile.ora
spfile.ora
init.ora
前三个文件是 SPFILE,第四个文件是文本初始化参数文件。如果 DBCA 在 Oracle 自动存储管理磁盘组中创建了 SPFILE,那么数据库将搜索磁盘组中的 SPFILE。
当 CREATE SPFILE
语句中没有指定 AS COPY
,而数据库被定义为 Oracle 集群软件中的资源时,如果同时指定 spfile_name 和 FROM PFILE
子句,那么该语句将自动更新数据库资源中的 SPFILE 名称和位置。当在 CREATE SPFILE
语句中指定 AS COPY
时,将复制 SPFILE,而不更新数据库资源。
如果您(或数据库配置助手)创建了一个服务器参数文件,但是您想用文本初始化参数文件覆盖它,那么您可以使用 SQL*Plus 来覆盖它,指定 STARTUP
命令的 PFILE 子句来标识初始化参数文件:
STARTUP PFILE = /u01/oracle/dbs/init.ora
非默认服务器参数文件
非默认服务器参数文件(SPFILE)是位于默认位置之外的位置的 SPFILE。通常不需要使用非默认 SPFILE 启动实例。然而,如果出现这样的需求,SRVCTL(带有 Oracle Restart)和 SQL*Plus 都提供了这样做的方法。
初始化文件和 Oracle 自动存储管理
使用 Oracle 自动存储管理(Oracle ASM)的数据库通常有一个非默认 SPFILE。如果使用数据库配置助理(DBCA)来配置数据库使用 Oracle ASM, DBCA 创建一个数据库实例的 SPFILE Oracle ASM 磁盘组,然后导致文本初始化参数文件(PFILE)在本地文件系统中创建的默认位置指向 SPFILE。
使用非默认服务器参数文件启动 SQL*Plus
使用 SQL*Plus,您可以使用 PFILE 子句启动具有非默认服务器参数文件的实例。
要使用非默认的服务器参数文件启动 SQL*Plus:
-
创建一个仅包含 SPFILE 参数的单行文本初始化参数文件。参数的值是非默认的服务器参数文件位置。
例如,创建一个文本初始化参数文件 /u01/oracle/dbs/spf_init.ora 只包含以下参数的:SPFILE = /u01/oracle/dbs/test_spfile.ora
-
启动指向此初始化参数文件的实例。
STARTUP PFILE = /u01/oracle/dbs/spf_init.ora
SPFILE 必须驻留在数据库主机上。因此,前面的方法还为客户机系统提供了启动使用 SPFILE 的数据库的方法。它还消除了客户端系统维护客户端初始化参数文件的需要。当客户机系统读取包含 SPFILE 参数的初始化参数文件时,它将该值传递给读取指定 SPFILE 的服务器。
使用非默认服务器参数文件启动 SRVCTL
如果您的数据库是由 Oracle Restart 管理的,那么您可以通过在 Oracle Restart 配置中为数据库设置或修改 SPFILE location 选项来指定非默认 SPFILE 的位置。
要使用非默认服务器参数文件启动 SRVCTL:
-
准备运行SRVCTL。
-
输入以下命令:
srvctl modify database -db db_unique_name -spfile spfile_path
其中db_unique_name必须匹配数据库的db_unique_name初始化参数设置。
-
输入以下命令:
srvctl start database -db db_unique_name [options]
关于数据库服务自动启动
当数据库由 Oracle Restart 管理时,您可以为每个单独的数据库服务(service)配置启动选项。
如果将服务的管理策略设置为 AUTOMATIC
(默认),则使用 SRVCTL 启动数据库时,该服务将自动启动。如果将管理策略设置为 MANUAL
,则服务不会自动启动,需要通过 SRVCTL 手动启动。MANUAL
设置不会阻止 Oracle Restart 在服务运行时监视服务,并在出现故障时重新启动服务。
在 Oracle Data Guard(Data Guard)环境中,数据库由 Oracle Restart 管理,您可以通过在 Oracle Restart 配置中为服务分配 Data Guard 角色来控制服务的自动启动。只有当服务的管理策略为 AUTOMATIC
且其分配的角色之一与数据库的当前角色匹配时,服务才会在手动数据库启动时自动启动。
准备启动实例
在尝试使用 SQL*Plus 启动数据库实例之前,必须执行一些初步步骤。
为启动一个实例做准备:
-
确保数据库所依赖的所有 Oracle 组件都已启动。
例如,如果数据库将数据存储在 Oracle ASM(Oracle Automatic Storage Management)磁盘组中,则需要确保 Oracle ASM 实例处于运行状态,并且已挂载相应的磁盘组。此外,最好在启动数据库之前启动 Oracle Net 监听器。 -
如果您打算使用操作系统身份验证,请作为 OSDBA 组的成员登录到数据库主机。
-
确保设置了环境变量,以便连接到所需的 Oracle 实例。
-
启动SQL*Plus没有连接到数据库:
SQLPLUS /NOLOG
-
以
SYSOPER
、SYSDBA
、SYSBACKUP
或SYSDG
连接 Oracle 数据库。例如:CONNECT username AS SYSDBA
—or—
CONNECT / AS SYSDBA
现在,您已经连接到数据库,并准备启动数据库的实例。
启动实例
您可以使用 SQL*Plus 或 Oracle Restart 启动实例。
关于启动实例
当不使用 Oracle Restart 时,使用 SQL*Plus STARTUP
命令启动 Oracle 数据库实例。如果您的数据库正在被 Oracle Restart 管理,Oracle 建议您使用 srvctl start database
命令。
使用 SQL*Plus 和 Oracle Restart,您可以以各种模式启动实例:
NOMOUNT
——启动实例,而不挂载数据库。这不允许访问数据库,通常只在创建数据库或重新创建控制文件时才会这样做。MOUNT
——启动实例并挂载数据库,但保持关闭状态。此状态允许某些 DBA 活动,但不允许对数据库进行一般访问。OPEN
——启动实例,挂载并打开数据库。这可以在无限制模式下完成,允许访问所有用户,也可以在受限模式下完成,只允许数据库管理员访问。FORCE
——在启动或关闭问题后强制启动实例。OPEN
RECOVER
——启动实例并立即开始完整的介质恢复。
下面的场景描述并演示了启动实例的各种状态。当组合 STARTUP
命令的子句或组合 srvctl start database
命令的启动选项时,会有一些限制。
启动实例、挂载并打开数据库
正常的数据库操作意味着启动实例,挂载并打开数据库。该模式允许任何有效的用户连接到数据库并执行数据访问操作。
下面的命令启动一个实例,从默认位置读取初始化参数,然后挂载并打开数据库。
SQL*Plus | SRVCTL(当使用 Oracle Restart) |
---|---|
STARTUP |
srvctl start database -db db_unique_name |
其中 db_unique_name
与 DB_UNIQUE_NAME
初始化参数匹配。
在没有挂载数据库的情况下启动实例
可以在不挂载数据库的情况下启动实例。通常,您只在创建数据库期间这样做。
使用以下命令之一:
SQL*Plus | SRVCTL(当使用 Oracle Restart) |
---|---|
STARTUP NOMOUNT |
srvctl start database -db db_unique_name -startoption nomount |
启动实例和挂载数据库
您可以在不打开数据库的情况下启动实例并挂载数据库,从而允许您执行特定的维护操作。
例如,在以下任务中,数据库必须挂载但不打开:
- 从 Oracle Database 12c Release 1(12.1.0.2)开始,将数据库实例置于强制完全数据库缓存模式。
- 启用和禁用重做日志归档选项。
- 执行全数据库恢复。
下面的命令启动实例并挂载数据库,但数据库处于关闭状态:
SQL*Plus | SRVCTL(当使用 Oracle Restart) |
---|---|
STARTUP MOUNT |
srvctl start database -db db_unique_name -startoption mount |
在启动时限制对实例的访问
您可以在受限模式下启动实例,并可选地挂载和打开数据库,以便该实例仅对管理人员(而不是普通数据库用户)可用。
当您必须完成以下任务之一时,使用此模式启动实例:
- 执行数据的导出或导入
- 执行数据加载(使用 SQL*Loader)
- 临时阻止典型用户使用数据
- 执行某些迁移或升级操作
通常,所有具有 CREATE SESSION
系统权限的用户都可以连接到打开的数据库。以受限模式打开数据库,只允许具有 CREATE SESSION
和 RESTRICTED SESSION
系统权限的用户访问数据库。只有数据库管理员才应该拥有 RESTRICTED SESSION
系统特权。此外,当实例处于受限模式时,数据库管理员不能通过 Oracle Net 监听器远程访问实例,而只能从运行实例的系统本地访问实例。
下面的命令以受限模式启动实例(并挂载和打开数据库):
SQL*Plus | SRVCTL(当使用 Oracle Restart) |
---|---|
STARTUP RESTRICT |
srvctl start database -db db_unique_name -startoption restrict |
您可以将限制模式与 mount、nomount 和 open 模式结合使用。
稍后,使用 ALTER SYSTEM
语句禁用 RESTRICTED SESSION
特性:
ALTER SYSTEM DISABLE RESTRICTED SESSION;
如果以非限制模式打开数据库,然后发现必须限制访问,可以使用 ALTER SYSTEM
语句来这样做。
强制实例启动
在不寻常的情况下,在尝试启动数据库实例时可能会遇到问题,您可以强制启动数据库实例。
除非遇到以下情况,否则不应该强制启动数据库:
- 不能使用
SHUTDOWN NORMAL
、SHUTDOWN IMMEDIATE
或SHUTDOWN TRANSACTIONAL
命令关闭当前实例。 - 在启动实例时遇到问题。
如果出现这些情况之一,通常可以通过使用以下命令之一启动一个新实例(并可选择挂载和打开数据库)来解决问题:
SQL*Plus | SRVCTL(当使用 Oracle Restart) |
---|---|
STARTUP FORCE |
srvctl start database -db db_unique_name -startoption force |
如果实例正在运行,则强制模式在重新启动实例之前使用 ABORT 模式将其关闭。在这种情况下,警报日志显示消息 Shutting down instance (abort)
,然后是 Starting ORACLE instance (normal)
。
启动实例、挂载数据库和启动完全介质恢复
如果您知道需要介质恢复,那么您可以启动一个实例,将数据库挂载到该实例,然后让恢复过程自动启动。
要做到这一点,使用以下命令之一:
SQL*Plus | SRVCTL(当使用 Oracle Restart) |
---|---|
STARTUP OPEN RECOVER |
srvctl start database -db db_unique_name -startoption "open,recover" |
如果您试图在不需要恢复的情况下执行恢复,Oracle 数据库将发出错误消息。
在操作系统启动时自动启动数据库
许多站点使用过程来在系统启动后立即自动启动一个或多个 Oracle 数据库实例和数据库。
执行此任务的过程是特定于每个操作系统的。有关自动启动的信息,请参阅特定于操作系统的 Oracle 文档。
配置数据库自动启动的首选方法(并且与平台无关)是 Oracle Restart。
启动远程实例
如果本地 Oracle 数据库服务器是分布式数据库的一部分,那么您可能需要启动远程实例和数据库。
启动和停止远程实例的过程因通信协议和操作系统而异。