一、Oracle Restart简介
1.Oracle Restart概述
当您安装Oracle Restart时,各种Oracle组件可以在硬件或软件故障或数据库主机重新启动时自动重新启动。
Oracle哪些组件通过Oracle Restart自动重启呢?
组件 | 说明 |
---|---|
数据库实例 | Oracle Restart可以在一台主机上容纳多个数据库。 |
Oracle网络监听 | - |
数据库服务 | 不包括安装时创建的默认服务,因为它是由Oracle数据库自动管理的。也不包括数据库创建期间创建的任何默认服务或全局服务 |
Oracle ASM (Automatic Storage Management)实例 | - |
Oracle ASM磁盘组 | 重新启动磁盘组意味着挂载磁盘组。 |
Oracle Notification Services (ONS) | 在Oracle Grid Infrastructure for Standalone Servers (Oracle Restart)环境中,可以在Oracle Data Guard安装中使用ONS,通过Fast Application Notification(FAN)自动切换主备数据库之间的连接。ONS是一种在故障转移时向集成客户端发送FAN事件的服务。 |
Oracle Restart会运行定期检查操作,以监视这些组件的运行状况。如果检查组件操作失败,则会将该组件关闭并重新启动。
Oracle Restart仅在独立服务器(非集群)环境中使用。对于Oracle Real Application Clusters (Oracle RAC)环境,Oracle Clusterware提供了自动重启组件的功能。
Oracle Restart在Oracle Grid Infrastructure家目录下运行,该主目录是与Oracle Database家目录分开安装的。
2.启动依赖性简介
Oracle Restart确保Oracle组件按照正确的顺序,按照组件的依赖关系启动。
例如,如果数据库文件存储在Oracle ASM磁盘组中,那么在启动数据库实例之前,Oracle Restart会确保Oracle ASM实例已经启动,所需的磁盘组已经挂载。同样,如果一个组件必须关闭,Oracle Restart会确保其依赖的组件首先被干净地关闭。
Oracle Restart还管理数据库实例和Oracle Net侦听器(侦听器)之间的弱依赖关系:当数据库实例启动时,Oracle Restart尝试启动侦听器。尽管监听器启动失败,但数据库仍处于启动状态。如果侦听器稍后出现故障,Oracle Restart不会关闭并重启任何数据库实例。
3.使用Oracle Restart启动和停止组件的简介
Oracle Restart会在需要的时候自动重启各种Oracle组件,当你手动关闭系统的时候会自动有序地停止Oracle组件。
但是,有时可能需要手动启动或停止单个Oracle组件。Oracle Restart包含服务器控制(SRVCTL)实用程序,您可以使用它手动启动和停止Oracle Restart管理的组件。当使用Oracle Restart时,Oracle强烈建议使用SRVCTL手动启动和停止组件。
当使用SRVCTL停掉一个组件后,如果发生故障,Oracle Restart不会自动重启该组件。如果接着使用SRVCTL启动该组件,则该组件再次可用于自动重启。
Oracle工具,如SQLPlus、监听器控制工具(LSNRCTL)和ASMCMD都集成在Oracle Restart中。如果使用SQLPlus关闭数据库,Oracle Restart不会将此解释为数据库故障,也不会尝试重新启动数据库。类似地,如果您使用SQL*Plus或ASMCMD关闭Oracle ASM实例,Oracle Restart不会尝试重新启动它。
使用SRVCTL启动组件与使用SQL*Plus(或其他实用程序)启动组件之间的重要区别如下:
- (1)当您使用SRVCTL启动一个组件时,该组件所依赖的任何组件都会首先自动启动,并以适当的顺序启动。
- (2)当你用SQL*Plus(或其他实用程序)启动一个组件时,依赖链中的其他组件不会自动启动;您必须确保该组件所依赖的所有组件都已启动。
此外,Oracle Restart允许您在指定的Oracle家目录中使用单个命令启动和停止由Oracle Restart管理的所有组件。Oracle家目录可以是Oracle数据库家目录或Oracle Grid Infrastructure家目录。在安装补丁时,此功能非常有用。
4.启动和停止Oracle Restart简介
CRSCTL实用程序可以启动和停止Oracle Restart。
您还可以使用CRSCTL实用程序来启用或禁用Oracle高可用性服务(HAS)。Oracle Restart使用Oracle高可用性服务自动启动和停止由Oracle Restart管理的组件。例如,Oracle高可用性服务守护进程自动启动数据库、侦听器和Oracle ASM实例。当禁用Oracle高可用性服务时,当节点重新启动时,Oracle Restart管理的所有组件都不会启动。
通常,Oracle安装中当您必须停止所有正在运行的Oracle软件时,您可以使用CRSCTL实用程序。例如,在安装补丁或执行操作系统维护时,可能需要停止Oracle Restart。当维护完成后,使用CRSCTL实用程序启动Oracle Restart。
5.Oracle Restart配置
Oracle Restart维护它所管理的一系列Oracle组件,并维护每个组件的配置信息。
当Oracle Restart启动一个组件时,它会根据该组件的配置信息启动该组件。例如,Oracle Restart配置包括数据库的服务器参数文件(SPFILE)的位置,以及监听器要监听的TCP端口。
如果您安装了Oracle Restart,然后使用Database Configuration Assistant(DBCA)创建数据库,DBCA会自动将数据库添加到Oracle Restart配置中。然后,当DBCA启动数据库时,数据库与其他组件(例如数据库存储数据的磁盘组)之间所需的依赖关系会被建立,Oracle Restart开始管理数据库。
您可以使用SRVCTL命令从Oracle Restart配置中手动添加和删除组件。例如,如果将Oracle Restart安装到已运行数据库的主机上,则可以使用SRVCTL将该数据库添加到Oracle Restart配置中。当您手动将一个组件添加到Oracle Restart配置中,然后用SRVCTL启动它时,Oracle Restart将开始管理该组件,并在需要时重新启动它。
说明:向Oracle Restart配置中添加一个组件也被称为“向Oracle Restart注册一个组件”。
其他SRVCTL命令允许您查看Oracle restart管理的组件的状态和配置,临时禁用然后重新启用组件的管理,等等。
说明:从Oracle Database 19c开始,弃用SERVICE_NAMES参数。在未来的版本中可能不支持该参数。为了管理您的服务,Oracle建议您使用SRVCTL或GDSCTL命令行实用程序,或DBMS_SERVICE包。
安装Oracle Restart后,许多创建Oracle组件的操作会自动将组件添加到Oracle Restart配置中。部分创建操作以及创建的组件是否会自动添加如下表所示:
创建操作 | 创建的组件会自动添加到Oracle Restart配置中吗? |
---|---|
使用OUI或DBCA创建数据库 | Yes |
使用CREATE DATABASE SQL语句创建数据库 | No |
使用OUI, DBCA, 或 ASMCA创建Oracle ASM实例 | Yes |
创建磁盘组 (任何方法) | Yes |
使用NETCA添加一个监听器 | Yes |
使用SRVCTL创建一个数据库服务 | Yes |
通过修改SERVICE_NAMES初始化参数创建数据库服务(不推荐) | No |
使用DBMS_SERVICE.CREATE_SERVICE创建数据库服务 | No |
创建一个备用数据库 | No |
下表列出了一些delete/drop/remove操作,以及被删除的组件是否也会自动从Oracle Restart配置中删除:
操作 | 删除的组件会自动从Oracle Restart配置中移除吗? |
---|---|
使用DBCA删除一个数据库 | Yes |
通过使用操作系统命令删除数据库文件来删除数据库(不推荐) | No |
使用NETCA删除一个监听器 | Yes |
删除Oracle ASM磁盘组(任何方法) | Yes |
使用SRVCTL删除一个数据库服务 | Yes |
通过其他任何方法(相对于上面一条方法)删除一个数据库服务 | No |
6.Oracle Data Guard
Oracle Restart与Oracle Data Guard (Data Guard)和Oracle Data Guard Broker(代理)集成在一起。
当为了响应角色更改请求而需要关闭和重新启动数据库时,Oracle restart将按照Oracle restart配置中的设置以有序的方式(考虑依赖关系)关闭和重新启动数据库。
Oracle Restart配置支持以下组件的Data Guard相关配置选项:
-
Databases:当您将一个数据库添加到Oracle Restart配置时,您可以为数据库指定当前的Data Guard角色:PRIMARY, PHYSICAL_STANDBY, LOGICAL_STANDBY, or SNAPSHOT_STANDBY。如果后来使用代理更改了角色,Oracle Restart将自动使用新角色更新数据库配置。如果没有使用代理更改数据库角色,则必须手动修改Oracle Restart配置中的数据库角色,以反映新角色。
-
Database Services:在向Oracle Restart配置中添加数据库服务时,可以为该服务指定一个或多个Data Guard角色。当此配置选项存在时,当数据库打开时,Oracle Restart只在其中一个服务角色与当前数据库角色匹配时才启动服务。
7.FAN(Fast Application Notification)
Oracle Restart使用Oracle通知服务(ONS)和Oracle高级队列发布Fast Application Notification(FAN)高可用事件。配置服务时自动配置队列。需要通过SRVCTL命令手动配置ONS。集成Oracle客户端使用FAN在服务或实例宕机时向客户端提供快速通知。客户端可以自动切换主库和备库之间的数据库连接。
1)FAN(Fast Application Notification)概述
FAN是一种高可用性的通知机制,Oracle Restart可以使用它将配置更改(包括服务状态更改,如UP或DOWN事件)通知其他进程。
当实例或服务器发生故障时,FAN提供立即终止传输中事务的能力。集成Oracle客户端接收该事件并响应。应用程序可以通过将错误传播给用户或通过重新提交事务并对应用程序用户屏蔽错误来响应。当DOWN事件发生时,集成客户端会立即清理到已终止数据库的连接。当UP事件发生时,客户端创建到新主库实例的新连接。
Oracle Restart在被管理实例或服务启动或关闭时发布FAN事件。故障转移后,Oracle Data Guard Broker (代理)发布FAN事件。这些FAN事件可以通过以下方式使用:
-
(1)如果应用程序使用以下Oracle集成数据库客户端之一,则可以在没有编程更改的情况下使用FAN:Oracle Database JDBC, Universal Connection Pool for Java, Oracle Call Interface, and Oracle Database ODP.NET。这些客户端可以配置为Fast Connection Failover(FCF),以便在故障转移后自动连接到新的主库。总体目标是让应用程序在任何时候都能始终获得可用的主数据库的连接。
-
(2)可以在数据库层上配置FAN服务器端调出
对于DOWN事件,例如主数据库发生故障,FAN向客户端提供即时通知,以便它们能够尽可能快地故障转移到新的主数据库。客户端不等待超时。客户端立即收到通知,并且必须在收到通知时将其配置为故障转移。
对于UP事件,当服务和实例启动时,可以创建新的连接,以便应用程序可以立即利用额外的资源。
连接管理器(CMAN)和Oracle Net Services监听器集成了FAN事件,使CMAN和监听器能够立即注销失败实例提供的服务,并避免错误地向失败的数据库发送连接请求。
2)应用程序高可用服务与FAN
(1)管理计划外的停运
如果Oracle Restart检测到停运,那么它将隔离失败的组件并恢复依赖的组件。如果失败的组件是数据库实例,那么在Oracle Data Guard故障转移到备用数据库后,新的主数据库上的Oracle Restart将启动用当前角色定义的任何服务。
FAN事件由Oracle Restart和Oracle Data Guard Broker通过ONS和Advanced Queuing发布。还可以使用FAN调用执行通知。
使用Oracle Restart,重新启动和恢复是自动的,包括重新启动子系统,如侦听器和Oracle自动存储管理(Oracle ASM)进程,而不仅仅是数据库。
(2)管理计划内停运
对于需要关闭主数据库的修复、升级和更改,Oracle Restart提供了禁用和启用服务的接口,以尽量减少对应用程序用户的服务中断。
(3)FAN高可用事件
## 事件记录参数以及描述如下所示:
version:事件记录的版本。用于识别版本更改
event type:SERVICE, SERVICE_MEMBER, DATABASE, INSTANCE, NODE, ASM, SRV_PRECONNECT
database unique name:支持服务的唯一数据库;匹配DB_UNIQUE_NAME的初始化参数值,默认为初始化参数DB_NAME的值。
instance:支持服务的实例的名称;匹配ORACLE_SID值。
node name:支持服务的节点名称或已停止的节点名称;匹配CSS (Cluster Synchronization Services)已知的节点名。
service:服务名称;匹配DBA_SERVICES中的服务。
status:取值为UP、DOWN、NOT_RESTARTING、PRECONN_UP、PRECONN_DOWN和UNKNOWN。
reason:Data_Guard_Failover, Failure, Dependency, User, Autostart, Restart.
CARDINALITY:当前活动服务的数量;包括所有UP事件。
TIMESTAMP:本地时区,用于排序通知事件
二、配置Oracle Restart
您可以添加组件、删除组件或修改组件的选项。
1.配置Oracle Restart简介
如果您通过安装Oracle Grid Infrastructure for Standalone Servers来安装Oracle Restart,然后创建您的数据库,数据库将自动添加到Oracle Restart配置中,然后在需要时自动重新启动。但是,如果在一台已经存在数据库的主机上安装Oracle Restart,则必须手动将数据库、侦听器、Oracle自动存储管理(ASM)实例以及其他组件添加到Oracle Restart配置中。
在配置Oracle Restart来管理数据库之后,您可能需要:
- 向Oracle Restart配置中添加其他组件。
- 从Oracle Restart配置中删除组件。
- 暂时暂停Oracle Restart对一个或多个组件的管理。
- 修改单个组件的Oracle Restart配置选项。
2.准备运行SRVCTL
许多Oracle Restart任务都需要运行SRVCTL实用程序。您必须确保从正确的Oracle家目录运行SRVCTL,并且使用正确的用户帐户登录到主机。
下面列出了可以使用SRVCTL配置的组件,对于每个组件,列出了必须运行SRVCTL的Oracle家目录:
组件 | 执行srvctl命令的Oracle home |
---|---|
Database, database service | Database home |
Oracle ASM instance, disk group, listener, ONS | Oracle Grid Infrastructure home |
对于监听器(listener):上述情况假设侦听器是从Oracle Grid Infrastructure home中启动的。如果为现有数据库安装了Oracle Restart,侦听器可能已经从database home启动,在这种情况下,您可以从database home启动SRVCTL。
准备运行SRVCTL:
(1)确定运行SRVCTL的Oracle home
(2)如果您打算运行一个SRVCTL命令来修改Oracle Restart配置(添加、删除、启用、禁用等等),那么请执行以下操作之一:
1)对于UNIX和Linux:以安装步骤1中确定的Oracle home的用户登录数据库主机。
2)对于Windows:以Administrator用户登录数据库主机。
(3)要输入命令,可能需要确保SRVCTL程序在PATH环境变量中。否则,您可以输入程序的绝对路径。
3.获取SRVCTL的帮助信息
# 1.输出如下命令,获取简要的帮助信息
srvctl
# 2.获取更详细的帮助信息
srvctl -help
# 3.获取特定命令的详细信息,例如:
srvctl add -help
# 4.获取对于特定组件的特定命令的帮助信息,例如:
srvctl add service -help
从Oracle数据库12c开始,不推荐使用单字母参数,而是使用关键字参数。为了支持向后兼容,可以混合使用单字母参数和新关键字参数。help默认情况下显示关键字参数,但如果适用,可以通过在-help参数后面添加-compatible参数来获得等效的单字母参数。Oracle数据库12c及以后版本中的新参数没有与之等效的单字母参数。
# 通过如下命令可以查看到与关键字参数等效的单字母参数
srvctl add service -help -compatible
# 通过输出信息可以看到与-help等效的单字母参数为-h,所以我们可以像下面一样查看帮助信息:
srvctl add service -h
4.向Oracle重启配置中添加组件
在大多数情况下,在运行Oracle Restart的主机上创建Oracle组件会自动将该组件添加到Oracle Restart配置中。但是,在某些情况下,您必须手动添加组件,例如:
创建数据库后安装Oracle Restart。
您可以使用create database SQL语句在同一主机上创建一个额外的Oracle数据库。
使用DBMS_SERVICE.CREATE_SERVICE包过程创建数据库服务。(推荐使用SRVCTL)
向Oracle Restart配置中添加组件不会启动该组件。必须使用srvctl start命令启动它。
# 1.添加一个名为mynewdb的数据库,-oraclehome为强制添加选项指定数据库的家目录
# 该使用哪个Oracle home中srvctl命令,在准备运行SRVCTL小结中已经说明了
# 所以添加数据库需要使用database home中的srvctl命令
su - oracle
srvctl add database -db mynewdb -oraclehome /u01/app/oracle/product/19.3.0.0/dbhome_1
ps -ef | grep pmon # 发现实例mynewdb并没有启动(这里实例名和数据库名一致)
# 2.添加数据服务
srvctl add service -db mynewdb -service test_my
# 3.添加默认的监听
su - grid
[grid@oracle4 ~]$ srvctl add listener
PRCN-3004 : Listener LISTENER already exists
# 4.添加指定的监听
srvctl add listener -listener TEST_LISTENER -endpoints "TCP:1522"
# 5.可以通过如下命令查看各个组件的状态信息
su - grid
crsctl status res -t
注意:
当您安装数据库或手动将数据库添加到Oracle Restart配置中,并且您有一个单独的Oracle Grid Infrastructure安装所有者用户时,您还必须将网格用户添加为该数据库的OSRACDBA组的成员,以使Oracle Grid Infrastructure组件能够连接到数据库。因为Oracle Grid Infrastructure组件必须能够作为SYSRAC连接到数据库,以启动和停止数据库。
例如,如果安装Oracle Grid Infrastructure home的主机用户名为grid, Oracle home的OSRACDBA组名为racdba,那么用户Grid必须是racdba组的成员。
# 如果grid用户不是racdba组的成员,那么执行下面的命令启动数据库会报错
[grid@oracle4 ~]$ srvctl start database -db mynewdb
PRCR-1079 : Failed to start resource ora.mynewdb.db
CRS-5017: The resource action "ora.mynewdb.db start" encountered the following error:
ORA-01017: invalid username/password; logon denied
. For details refer to "(:CLSN00107:)" in "/u01/app/grid/diag/crs/oracle4/crs/trace/ohasd_oraagent_grid.trc".
CRS-2674: Start of 'ora.mynewdb.db' on 'oracle4' failed
ORA-01017: invalid username/password; logon denied
6.从Oracle重启配置中删除组件
当您使用Oracle推荐的方法删除Oracle组件时,该组件也会自动从Oracle Restart配置中删除。
例如,如果使用DBCA (Database Configuration Assistant)删除一个数据库,DBCA将从Oracle Restart配置中删除该数据库。同样,如果使用Oracle Net Configuration Assistant (NETCA)删除侦听器,NETCA将从Oracle Restart配置中删除该侦听器。如果使用非推荐或手动方式删除Oracle组件,必须先使用SRVCTL从Oracle Restart配置中删除该组件。如果不这样做,可能会导致错误。
# 1.移除一个数据库,例如
[oracle@oracle4 ~]$ srvctl remove database -db mynewdb
Remove the database mynewdb? (y/[n]) y
# 通过如下命令查看验证,数据库是否被移除
su - grid
crsctl status res -t
# 2.移除一个监听(如果组件还在运行需要先停止,然后才能被删除),例如:
[grid@oracle4 ~]$ srvctl remove listener -listener TEST_L
PRCR-1025 : Resource ora.TEST_L.lsnr is still running
[grid@oracle4 ~]$ srvctl stop listener -listener TEST_L
[grid@oracle4 ~]$ srvctl remove listener -listener TEST_L
7.禁用和启用Oracle Restart 管理组件
您可以临时禁用Oracle Restart管理某个组件。这样做的一个原因是在对组件执行维护时。例如,如果一个组件必须修复,那么您可能不希望它在故障或主机重新启动时自动重新启动。当维护完成后,可以重新启用组件的管理。
当禁用某个组件之后:
- 它不再自动重启。
- 它不再通过依赖自动启动。
- 不能用SRVCTL启动。
- 依赖于此资源的任何组件将不再自动启动或重新启动。
# 1.禁用某个数据库自动重启,例如:
srvctl disable database -db mynewdb
# 可以查看数据库是否被禁用
srvctl config database -all -db mynewdb
Database is disabled
# 查看数据库的状态
srvctl status database -db orcl -verbose
Database orcl is running. Instance status: Open.
# 尝试通过srvctl启动数据库,报错
[grid@oracle4 ~]$ srvctl start database -db mynewdb
PRCR-1079 : Failed to start resource ora.mynewdb.db
CRS-2501: Resource 'ora.mynewdb.db' is disabled
# 2.禁用Oracle ASM磁盘组自动重启
[grid@oracle4 ~]$ srvctl disable diskgroup -diskgroup DATA
# 查看磁盘组的状态
[grid@oracle4 ~]$ srvctl status diskgroup -diskgroup DATA -detail
Disk Group DATA is running on oracle4
Disk Group DATA is disabled
# 3.启用Oracle ASM磁盘组自动重启
[grid@oracle4 ~]$ srvctl enable diskgroup -diskgroup DATA
[grid@oracle4 ~]$ srvctl status diskgroup -diskgroup DATA -detail
Disk Group DATA is running on oracle4
Disk Group DATA is enabled
8.查看组件的Oracle Restart配置
Oracle Restart为每种组件类型维护不同的配置信息
# 1.查看Oracle Restart管理的所有数据库列表
[grid@oracle4 ~]$ srvctl config database
mynewdb
orcl
# 2.查看特定数据库的配置
[grid@oracle4 ~]$ srvctl config database -db orcl
Database unique name: orcl
Database name: orcl
Oracle home: /u01/app/oracle/product/19.3.0.0/dbhome_1
Oracle user: oracle
Spfile: +DATA/ORCL/PARAMETERFILE/spfile.266.1118266261
Password file:
Domain:
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Disk Groups: DATA
Services:
OSDBA group:
OSOPER group:
Database instance: orcl
9.修改组件的Oracle Restart配置
可以使用SRVCTL修改组件的Oracle Restart配置。例如,您可以修改Oracle Restart启动监听器时监听的端口号,或者Oracle Restart启动数据库时指向的服务器参数文件(SPFILE)。
# 1.修改数据库的Oracle Restart配置,例如:
srvctl modify database -db mynewdb -policy manual -startoption mount
# 通过srvctl启动数据库时,只启动到Mounted状态
srvctl start database -db mynewdb
srvctl status database -db mynewdb -verbose
Database mynewdb is running. Instance status: Mounted (Closed).
使用MANUAL管理策略,当数据库主机重新启动时,数据库永远不会自动启动。但是,Oracle Restart会继续监视数据库,并在发生故障时重新启动数据库。
10.管理Oracle Restart配置中的环境变量
(1)Oracle Restart配置中环境变量简介
如果您通常在启动Oracle数据库之前设置环境变量(而不是ORACLE_HOME和ORACLE_SID),那么您可以在Oracle Restart配置中设置这些环境变量值。
您可以在以下组件的单独配置中存储任意数量的环境变量:
- Database instance
- Listener
- Oracle ASM instance
当Oracle Restart启动其中一个组件时,它首先将该组件的环境变量设置为存储在组件配置中的值。尽管您可以以这种方式设置Oracle组件使用的环境变量,但此功能主要用于操作系统环境变量
注意:不要使用此功能设置标准环境变量,如ORACLE_HOME和ORACLE_SID;这些是由Oracle Restart自动设置的
(2)设置和取消设置环境变量
# 1.设置数据库环境变量,例如:
srvctl setenv database -db mynewdb -env "nls_lang=AMERICAN_AMERICA.AL32UTF8"
# 2.查看数据库的所有环境变量
[grid@oracle4 ~]$ srvctl getenv database -db mynewdb
mynewdb:
nls_lang=AMERICAN_AMERICA.AL32UTF8
# 3.查看数据库特定的环境变量
[grid@oracle4 ~]$ srvctl getenv database -db mynewdb -envs "nls_lang"
mynewdb:
nls_lang=AMERICAN_AMERICA.AL32UTF8
# 4.取消环境变量的设置
srvctl unsetenv database -db mynewdb -envs "nls_lang"
11.使用SRVCTL创建和删除数据库服务
当使用Oracle Restart管理数据库时,Oracle建议使用SRVCTL来创建和删除数据库服务。当您使用SRVCTL添加数据库服务时,该服务会自动添加到Oracle Restart配置中,并建立服务与数据库之间的依赖关系。因此,如果您启动了该服务,Oracle Restart将首先启动数据库(如果它没有启动)。
# 1.创建数据库服务,例如:
srvctl add service -db mynewdb -service test_my
# 2.创建一个基于角色的数据库服务
# 本例创建test_my1数据库服务,并为其分配PHYSICAL_STANDBY的Data Guard角色。
# 只有mynewdb数据库的当前角色为物理备时,服务才会自动启动
srvctl add service -db mynewdb -service test_my1 -role physical_standby
# 3.删除数据库服务test_my
srvctl remove service -db mynewdb -service test_my
三、启动和停止Oracle Restart管理的组件
当使用Oracle Restart时,Oracle强烈建议您使用SRVCTL实用程序启动和停止组件,原因如下:
-
当使用SRVCTL启动一个组件时,Oracle Restart可以首先启动该组件所依赖的任何组件。当使用SRVCTL停止一个组件时,Oracle Restart可以先停止任何依赖的组件。
-
SRVCTL总是根据其Oracle Restart配置启动组件。通过其他方式启动组件可能不行。
例如,如果您向Oracle Restart配置中添加数据库时指定了服务器参数文件(SPFILE)位置,并且该位置不是SPFILE的默认位置,那么如果您使用SQL*Plus启动数据库,则可能不会使用配置中指定的SPFILE。
- 当您使用SRVCTL启动组件时,将设置存储在该组件的Oracle Restart配置中的环境变量。
# 1.启动数据库
srvctl start database -db mynewdb
# 2.启动数据库到NOMOUNT阶段
srvctl start database -db mynewdb -startoption nomount
# 3.启动默认监听器
srvctl start listener
# 4.启动指定的监听器
srvctl start listener -listener TEST_L
# 5.启动数据库服务
srvctl start service -db mynewdb -service test_my
# 6.启动(挂载)Oracle ASM磁盘组
srvctl start diskgroup -diskgroup data
# 7.关闭数据库
srvctl stop database -db mynewdb
# 8.使用ABORT选项关闭数据库
srvctl stop database -db mynewdb -stopoption abort
四、为了维护操作停止和重新启动Oracle Restart
当Oracle home中的多个组件由Oracle Restart管理时,可以停止Oracle Restart和Oracle home中由Oracle Restart管理的组件。
您还可以禁用Oracle Restart,以便在节点重新启动时不重新启动它。在执行包括Oracle home在内的维护(例如安装补丁)时,可能需要这样做。当维护操作完成后,可以启用并重新启动Oracle restart,并在Oracle主目录中重新启动由Oracle restart管理的组件。
使用SRVCTL实用程序和CRSCTL实用程序进行停止和启动操作:
-
stop home SRVCTL命令在指定的Oracle home中停止由Oracle Restart管理的所有组件。start home SRVCTL命令启动这些组件。Oracle home可以是Oracle Database home或Oracle Grid Infrastructure home。
当您使用home对象时,-statefile选项中指定的状态文件将跟踪每个组件的状态。stop和status命令创建状态文件。start命令使用状态文件来标识要重启的组件。
此外,您可以使用status home命令查看Oracle Restart所管理的组件的状态。 -
stop CRSCTL命令停止Oracle Restart, disable CRSCTL命令确保由Oracle Restart管理的组件不会自动重启。enable CRSCTL命令开启自动重启,start CRSCTL命令重启Oracle restart。
在安装补丁时停止和启动Oracle主目录中的组件:
# 1.使用SRVCTL工具在Oracle home中停止由Oracle Restart管理的组件
# 语法如下(中括号为可选项):
srvctl stop home -oraclehome oracle_home -statefile state_file [-stopoption stop_options] [-force]
# 其中oracle_home是Oracle主目录的完整路径,state_file是状态文件的完整路径。
# Oracle home的状态信息记录在指定的状态文件中。
# 注意状态文件的位置,因为它必须在步骤7中指定
# 例如:
srvctl stop home -oraclehome /u01/app/oracle/product/19.3.0.0/dbhome_1/ -statefile /home/oracle/database_home.stat
# 在停止Oracle Grid Infrastructure home中的组件之前,请确保首先停止依赖Oracle Database home中的组件。
# 2.如果您正在修补Oracle Grid Infrastructure home,
# 那么禁用并停止Oracle Restart。否则,请执行步骤3。
su - grid
crsctl disable has
crsctl stop has
# 查看自动重启的配置信息
crsctl config has
CRS-4621: Oracle High Availability Services autostart is disabled.
# 3.执行维护操作
# 4.使用CRSCTL实用程序启用自动重新启动由Oracle restart管理的组件
[grid@oracle4 ~]$ crsctl enable has
CRS-4622: Oracle High Availability Services autostart is enabled.
# 5.使用CRSCTL实用程序启动Oracle Restart
[grid@oracle4 ~]$ crsctl start has
CRS-4640: Oracle High Availability Services is already active
CRS-4000: Command Start failed, or completed with errors.
# 执行完第4步就会启动Oracle Restart,其管理的所有组件(状态为enabled)都会被启动
# 对于数据库和数据库服务,我们可以通过config srvctl 查看该组件是enabled还是disabled
# 6.使用SRVCTL实用程序启动步骤1中停止的组件
srvctl start home -oraclehome /u01/app/oracle/product/19.3.0.0/dbhome_1/ -statefile /home/oracle/database_home.stat