📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,10余年DBA及大数据工作经验
一位上进心十足的【大数据领域博主】!😜😜😜
中国DBA联盟(ACDU)成员,目前服务于工业互联网
擅长主流Oracle、MySQL、PG、高斯及Greenplum运维开发,备份恢复,安装迁移,性能优化、故障应急处理等。
✨ 如果有对【数据库】感兴趣的【小可爱】,欢迎关注【IT邦德】💞💞💞
❤️❤️❤️感谢各位大可爱小可爱!❤️❤️❤️


文章目录

  • 📣 1.RAC One Node介绍
  • 📣 2.创建RAC One Node
  • 📣 3.RAC切换到RAC One Node
  • ✨ 3.1 查看资源状态
  • ✨ 3.2.查看实例
  • ✨ 3.3 查看数据库详细信息
  • ✨ 3.4.删除实例
  • ✨ 3.5 新增service
  • ✨ 3.6 转换为RAC One Node
  • ✨ 3.7 再次查看状态
  • ✨ 3.8 测试一下HA
  • 📣 4.RAC One Node切换到RAC
  • ✨ 4.1 进行转换
  • ✨ 4.2 查看数据库信息
  • ✨ 4.3.新增实例
  • ✨ 4.4 启动实例
  • ✨ 4.5 再次查看数据库的状态
  • 📣 5.其他事项
  • ✨ 5.1 RAC的SPFILE
  • ✨ 5.2 转换后启动报错
  • 📣 6.总结




RAC One Node能提供高可用性优势中的Failover保护,为操作系统和Clusterware提供在线滚动升级。

📣 1.RAC One Node介绍

Oracle Real Application Clusters One Node(Oracle RAC One Node)是从
Oracle Database 11g release 2(11.2)起提供的Oracle Database Enterprise Edition
的一个选项。

Oracle RAC One Node是启用了Oracle RAC的数据库的单个实例,仅在正常操作下在群集中的一个节点上运行。

Oracle RAC One Node,双胞胎变独生子?_oracle

使用Oracle RAC One Node,服务器的可扩展性没有限制,如果应用程序需要的资源超过单个节点所能提供的资源,则您可以将应用程序联机升级到Oracle RAC。
如果运行Oracle RAC One Node的节点过载,则可以将实例重新定位到群集中的另一个节点。使用Oracle RAC One Node,您可以使用在线数据库重新定位功能来重新定位数据库实例,而不会让应用程序用户停机。或者,您可以使用Resource Manager实例缓存来限制集群中每个服务器的单个数据库实例的CPU消耗,并在必要时根据需求场景动态更改此限制。

使用单一客户端访问名称(SCAN)连接到数据库,客户端可以独立于运行服务的节点来定位服务。因此,重新定位Oracle RAC One Node实例对客户端来说基本上是透明的,具体取决于客户端连接.

Oracle RAC One Node,双胞胎变独生子?_数据库_02

📣 2.创建RAC One Node

可以使用DBCA创建Oracle RAC One Node数据库或者手动创建的脚本也是可以的

Oracle RAC单节点数据库也可能是从单个实例Oracle数据库或Oracle RAC数据库
转换而来的结果。通常,Oracle提供的工具会向Oracle Clusterware注册Oracle RAC单节点数据库

如果您的Oracle RAC One Node数据库没有自动向Oracle Clusterware注册,请使用srvctl add database命令将Oracle RAC One Node数据库添加到集群中。

$ srvctl add database -dbtype  
RACONENODE [-server server_list]
[-instance instance_name] [-timeout timeout]

📣 3.RAC切换到RAC One Node

在将Oracle RAC数据库转换为Oracle RAC单节点数据库之前,必须首先确保Oracle RAC数据库只有一个实例。如果您的Oracle RAC数据库由管理员管理,并且有多个实例,则必须使用srvctl remove instance命令删除除一个实例以外的所有实例。如果您的Oracle RAC数据库是策略管理的,并且有多个实例,则必须使用srvctl stop instance命令停止除一个实例以外的所有实例。

Related Topics
1.srvctl remove instance
2.srvctl stop instance
3.srvctl convert database

✨ 3.1 查看资源状态

[root@rac01 ~]$ crsctl status res -t
从这里看到,数据库的名字叫racdb

✨ 3.2.查看实例

[oracle@rac01 ~]$ srvctl status database -d racdb
Instance racdb1 is running on node rac01
Instance racdb2 is running on node rac02

✨ 3.3 查看数据库详细信息

[oracle@rac01 ~]$ srvctl config database -d racdb
Database unique name: racdb
Database name: racdb
Oracle home: /u01/app/oracle/product/19.0.0/dbhome_1
Oracle user: oracle
Spfile: +DATA/RACDB/PARAMETERFILE/spfile.268.1159380643
Password file: +DATA/RACDB/PASSWORD/pwdziprodb.256.1159380269
Domain:
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Server pools:
Disk Groups: ARCH,DATA
Mount point paths:
Services:
Type: RAC
Start concurrency:
Stop concurrency:
OSDBA group: dba
OSOPER group: oper
Database instances: racdb1,racdb2
Configured nodes: rac01,rac02
CSS critical: no
CPU count: 0
Memory target: 0
Maximum memory: 0
Default network number for database services:
Database is administrator managed

从上图中,可以看到数据库名,
oracle_home,实例名,以及重要的TYPE为RAC

✨ 3.4.删除实例

只留下一个,RACOneNode只有一个实例是活动状态
[oracle@rac01 ~]$ srvctl remove instance -d racdb -i rac02 -f
说明:加上-f参数可以强制关闭实例并将实例删除

✨ 3.5 新增service

如果不新增service,无法进行转换
[oracle@rac01 ~]$ srvctl add service -h
–查看新增service的帮助
[oracle@rac1 ~]$ srvctl add service -d prodb -s rac -r rac01 -P BASIC
-e SELECT -m BASIC -y AUTOMATIC

[oracle@rac01 ~]$ srvctl start service -d racdb -s rac
说明:service名字为rac,TFA类型为BASIC

✨ 3.6 转换为RAC One Node

[oracle@rac01 ~]$ srvctl convert database -d racdb -c RACONENODE -i rac01

✨ 3.7 再次查看状态

[oracle@rac01 ~]$ srvctl config database -d racdb
这里可以看到TYPE是RACOneNode。
Instance name prefix是实例的前缀,
后续会生成racdb1_1和racdb1_2实例

Oracle RAC One Node,双胞胎变独生子?_数据库_03

✨ 3.8 测试一下HA

[oracle@rac01 ~]$ srvctl relocate database -d racdb -n rac02

Oracle RAC One Node,双胞胎变独生子?_oracle_04

[oracle@rac01 ~]$ srvctl relocate database -d racdb -n rac01

Oracle RAC One Node,双胞胎变独生子?_Database_05

📣 4.RAC One Node切换到RAC

通过以Oracle RAC One Node数据库所有者的身份登录
并输入以下SRVCTL命令,
srvctl convert database -db db_unique_name -dbtype RAC
您可以将Oracle RAC One Node数据库转换为Oracle RAC数据库

✨ 4.1 进行转换

[oracle@rac01 ~]$ srvctl convert database -d racdb -c rac

✨ 4.2 查看数据库信息

[oracle@rac01 ~]$ srvctl config database -d racdb
从这里可以看到TYPE是RAC

Oracle RAC One Node,双胞胎变独生子?_oracle_06

✨ 4.3.新增实例

[oracle@rac01 ~]$ srvctl add instance -d racdb -i racdb1_2 -n rac02

✨ 4.4 启动实例

[oracle@rac01 ~]$ srvctl start instance -d racdb -i racdb1_2

✨ 4.5 再次查看数据库的状态

[oracle@rac01 ~]$ srvctl config database -d racdb

Oracle RAC One Node,双胞胎变独生子?_Database_07

📣 5.其他事项

✨ 5.1 RAC的SPFILE

在实际工作中,发现有一些RAC实例的SPFILE是在各自的ORACLE_HOME/dbs下,现在想将其修改到共享目录(asm磁盘)中

1.将spfile建入共享目录中
create pfile-‘/tmp/pfile.txt’ from spfile;
create spfile=‘+DATA/racdb/spfileracdb.ora’
from pfile=‘/tmp/pfile.txt’;

2.将spfile的路径写入
ORACLE_HOME/dbs/initracdb1.ora
ORACLE_HOME/dbs/initracdb2.ora

[oracle@rac01 ~]$ vi initracdb1.ora
SPFILE='+DATA/racdb/spfileracdb.ora' 
[oracle@rac02 ~]$ vi initracdb2.ora
----------------------------------
SPFILE='+DATA/racdb/spfileracdb.ora' 
----------------------------------

3.同步到RAC集群的配置文件
srvctl modify database -d racdb -p ‘+DATA/racdb/spfileracdb.ora’

4.重启实例
srvctl stop instance -d racdb -i racdb2
srvctl start instance -d racdb -i racdb2
srvctl stop instance -d racdb -i racdb1
srvctl start instance -d racdb -i racdb1

✨ 5.2 转换后启动报错

在启动racdb2的时候,可能会报如下错误
ORA-01102: cannot mount database in EXCLUSIVE mode
这是需要修改参数cluster_database=true即可

alter system set cluster_database=true sid=‘*’ scope=spfile;
–查看数据库状态
srvctl config database -d racdb

📣 6.总结

RAC One Node它能提供高可用性优势中的Failover保护,为操作系统和Clusterware提供在线滚动升级。它搭建在标准的RAC框架之上。RAC和RAC One Node之间也可以非常方便的相互转换.

由于在执行RAC One Node联机迁移的时候需要用到TAF的功能,所以需要创建一个Service。在选择节点上,应至少选择两个节点,以便在发生故障时实现实例联机的Failover。Failover的时候,当Service被迁移到新节点之后,原来的实例被以 shutdown transactional的模式关闭。