标准版高可用性特性为使用 Oracle Clusterware 的 Oracle Database Standard Edition 2 单实例数据库提供计划外中断保护。
关于标准版高可用性
从 Oracle Database 19c Release Update(19.7) 开始,您可以在高可用模式下安装 Oracle Database Standard Edition 2。
Standard Edition High Availability 为使用 Oracle Clusterware 的单实例标准版 Oracle 数据库提供基于集群的故障转移。
Oracle Standard Edition High Availability 得益于集群能力和存储解决方案,这些解决方案已经是 Oracle Grid Infrastructure 的一部分,如 Oracle Clusterware、Oracle Automatic Storage Management (Oracle ASM) 和 Oracle ASM Cluster File System (Oracle ACFS)。
同时使用集成、共享和存储,如 Oracle ASM 和 Oracle ACF 数据库文件以及非结构化数据,使得 Oracle Grid Infrastructure 重新启动一个 Oracle 数据库故障转移节点速度远远超过任何集群解决方案依赖于故障转移和卸载卷和文件系统。
Linux x86-64、SPARC(64位)上的 Oracle Solaris 和 Microsoft Windows 支持 Standard Edition High Availability。
对 Oracle Database 使用 Standard Edition High Availability 的要求
要使用 Standard Edition High Availability,请根据这些配置要求部署 Oracle Database Standard Edition 2。
- 数据库是在运行 Oracle Grid Infrastructure 的单机集群中创建的,其数据库文件放置在 Oracle 自动存储管理(Oracle ASM)或 Oracle ASM Cluster File System(Oracle ACFS)中。
- 使用数据库配置助手时,在创建要配置为 Standard Edition High Availability 的 Oracle Database Standard Edition 2 数据库时,不能创建监听器。
- 使用 SCAN (Single Client Access Name)监听器将数据库注册为远程监听器,节点监听器注册为本地监听器。
- 创建数据库服务。当您将应用程序或数据库客户端连接到数据库时,使用此服务,而不是默认的数据库服务。
- 确保服务器参数文件(spfile)和密码文件在 Oracle ASM 或 Oracle ACFS 上。如果在创建或配置数据库时,将
spfile
和密码文件放在本地文件系统中,那么将这些文件移动到 Oracle ASM 或 Oracle ACFS 中。
有关必须满足的其他要求,请参阅数据库安装文档。
启用 Oracle Database Standard Edition High Availability
Standard Edition High Availability 可以为 Oracle Database Standard Edition 2 数据库提供基于集群的故障转移。
先决条件
-
确保未设置初始化参数 local_listener。这样可以自动使用节点监听器,并通过节点虚拟 IP 地址建立数据库连接。
使用如下命令显示当前监听配置:SQL> SHOW PARAMETER LOCAL_LISTENER;
如果显示的是本地监听器名称,请执行以下命令重置本地监听器:
SQL> ALTER SYSTEM RESET LOCAL_LISTENER SCOPE = BOTH;
为了使监听器配置更改生效,必须重新启动数据库。但是,如果将数据库重新定位到另一个节点,作为验证 Standard Edition High Availability 配置的一部分,则不需要重新启动数据库。
-
当数据库文件存储在 Oracle ASM Cluster File System (Oracle ACFS) 中时,Oracle ACFS 文件系统必须在Oracle Clusterware 中注册,并且数据库资源对相应的 Oracle ACFS 资源的依赖关系必须使用 srvctl 命令配置。例如:
$ srvctl modify database -db se2cdb2 -acfspath /u01/app/oradata
对于 Oracle Database Standard Edition 2,启用 Standard Edition High Availability
-
如果数据库是使用
CREATE DATABASE
命令创建的,请将数据库注册到 Oracle Clusterware。
使用 CREATE DATABASE 命令创建的数据库不会自动注册到 Oracle Clusterware。使用srvctl add database
命令注册数据库。
例如,以下命令用节点node3
和node5
注册唯一名称为se2cdb
的单个实例数据库:$ srvctl add database -db se2cdb -oraclehome $ORACLE_HOME
-dbtype SINGLE -spfile +DATA/SE2CDB1/PARAMETERFILE/spfile.276.1030845691
-node node3,node5
-
如果数据库已经注册到 Oracle Clusterware,使用
srvctl modify database
命令启用 Standard Edition High Availability。
例如,下面的命令在一个数据库唯一名称为se2cdb
的 Standard Edition 2 数据库上启用 Standard Edition High Availability:$ srvctl modify database -db se2cdb -node node3,node5
为数据库启用 Standard Edition High Availability 后:
- 当数据库实例所在节点发生计划外故障时,会在已配置节点列表中的可用节点上重启数据库实例。
- 当数据库实例发生计划外终止时,会尝试重新启动当前节点上的实例。如果重启失败,则启动故障切换到配置节点列表中的可用节点。
- 当运行数据库实例的节点与公网完全失去连接时,将数据库实例迁移到配置节点列表中的可用节点中。
验证 Standard Edition High Availability 配置
您可以通过使用 srvctl config database
命令来验证 Standard Edition High Availability 配置,特别是其当前配置的节点列表。例如:
$ srvctl config database -db se2cdb
...
Type: SINGLE
...
Configured nodes:
node3, node5
从输出中注意到,数据库的类型是单一的,但是有多个配置的节点。这表示启用了 Standard Edition High Availability。
可以通过将数据库重新定位到另一个配置节点来执行进一步的验证。
将 Standard Edition High Availability 数据库迁移到另一个节点
要管理计划中断,可以将使用 Standard Edition High Availability 的 Oracle Database Standard Edition 2 数据库迁移到另一个配置节点。
将数据库重新定位到的节点必须是该数据库配置的节点列表的一部分。
将激活的 Oracle Database Standard Edition 2 数据库从当前节点迁移到另一个配置节点:
-
使用
srvctl relocate
命令。该命令执行脱机重定位。它关闭现有节点上的数据库,然后在新节点上启动数据库。
例如,下面的命令将使用 Standard Edition High Availability 的 Standard Edition 2 数据库 se2cdb 重定位到节点 node5
:
$ srvctl relocate database -db se2cdb -node node5
向标准版高可用性数据库添加节点
将新节点添加到现有的 Standard Edition High Availability 配置中,可为 Standard Edition 2 数据库提供增强的故障转移功能。
在某些场景中,您可能需要添加节点。假设您为标准版高可用性数据库配置了两个节点。随后,一个新节点被添加到集群中,您希望在数据库配置中包含这个新节点。您可以通过将节点添加到 Standard Edition High Availability 配置来实现这一点。另一个场景是,您希望为现有的 Standard Edition 2 数据库启用 Standard Edition High Availability。
将节点添加到 Standard Edition High Availability 数据库:
-
将 Oracle Database Oracle 主节点扩展到新节点。步骤取决于所使用的存储。
对于本地(非共享)Oracle主目录:-
以 Oracle 安装所有者用户帐户(
oracle
)登录第一个集群节点(在其上配置了 Standard Edition High Availability)。 -
进入
ORACLE_HOME/addnode
目录,运行 addnode.sh 脚本。
例如,要将 Oracle 主节点扩展到node3
:$ ./addnode.sh -silent "CLUSTER_NEW_NODES={node3}"
对于使用 Oracle ACFS 的共享 Oracle Home:
-
从
Grid_home/bin
目录以root
身份运行以下命令,在新节点上启动 Oracle ACFS 资源:# srvctl start filesystem -device volume_device [-node node_name]
-
以 Oracle 安装所有者用户帐户(
oracle
)登录第一个集群节点(在其上配置了 Standard Edition High Availability)。 -
将第一个集群节点上的 Oracle 主节点挂载到要添加的节点。
$ $ORACLE_HOME/addnode/addnode.sh -silent CLUSTER_NEW_NODES=new_node_name
-
-
在新节点上(必须添加),以
root
用户运行ORACLE_HOME/root.sh
脚本。# /u01/app/oracle/product/19.0.0/dbhome_1/root.sh
-
在任何已配置的节点上,包括正在添加的节点,作为
oracle
用户,使用srvctl modify database
命令添加新节点。
-node
参数必须列出已配置的节点和正在添加的新节点。
例如,下面的命令将节点node3
添加到唯一名称为se2cdb
的数据库中。已配置的节点为node1
和node5
。$ srvctl modify database -db se2cdb -node node1,node3,node5
您可以根据《Enabling Standard Edition High Availability for Oracle Databases》来验证新配置。
从 Standard Edition High Availability 的数据库中删除已配置节点
使用 srvctl
命令从为 Standard Edition High Availability 的数据库配置的节点列表中删除节点。
导航到 Oracle 数据库主目录。在 Linux 操作系统下,以 Oracle 安装所有者用户(oracle
)登录数据库主机。在 Windows 操作系统下,以 Administrator 用户登录数据库主机。
要从使用 Standard Edition High Availability 的数据库中删除已配置的节点:
-
使用
srvctl config database
命令列出已配置的节点。 -
如果数据库当前运行在要删除的节点上,请使用
srvctl relocate database
命令将数据库重新定位到另一个配置的节点。 -
使用带有
-node
参数的srvctl modify database
命令删除节点。
-node
参数必须列出所有配置的节点,除了必须删除的节点。
例 1:从标准版高可用数据库中移除已配置节点
本例假设唯一名称为 sec2cdb
的数据库使用 Standard Edition High Availability,且配置的节点为 node1
、node2
和 node3
。数据库当前运行在 node3
上。要从该数据库的配置节点列表中删除 node2
,请以安装 Oracle数据库 Home 的用户登录并运行以下命令:
$ srvctl modify database -db sec2cdb -node node1,node3
启动和停止 Standard Edition High Availability 数据库
使用 srvctl 命令启动或停止配置为 Standard Edition High Availability 的 Oracle 数据库。
导航到 Oracle 数据库 Home 目录。在 Linux 操作系统下,以 Oracle 安装所有者用户(oracle
)登录数据库主机。在 Windows 操作系统下,以 Administrator 用户登录数据库主机。
启动标准版高可用性数据库:
- 使用
srvctl start database
命令。
可选地,包括 -node
参数来指定数据库必须在哪个节点上启动。
停止 Standard Edition High Availability 的数据库:
- 使用
srvctl stop database
命令
例 2-2 在指定节点上启动 Standard Edition High Availability 的数据库
这个示例在名为 node3
的节点上启动一个唯一名称为 se2cdb
的数据库。
$ srvctl start database -db sec2cdb -node node3
例 3:停止标准版高可用数据库
此示例将停止配置为使用 Standard Edition High Availability 的数据库实例。数据库的唯一名称是 sec2cdb
。
$ srvctl stop database -db sec2cdb
关闭 Oracle 数据!库的 Standard Edition High Availability
当您停用单实例 Oracle 数据库的 Standard Edition High Availability 时,该数据库将不再是高可用性故障转移配置的一部分。
禁用 Oracle Standard Edition High Availability:
- 使用
stvctl modify
命令,在-node
参数中只包含一个节点。
例 4:取消对 Oracle 数据库使用 Standard Edition High Availability
这个例子禁用了唯一名称为 se2cdb
的数据库的 Standard Edition High Availability,并仅为这个数据库配置了一个节点 node1
:
srvctl modify database -db se2cdb -node node1
所有以前配置的节点都被删除,数据库现在是一个注册到 Oracle Clusterware 的单实例数据库。