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

makefile 复制代码
作者:IT邦德
中国DBA联盟(ACDU)成员,10余年DBA工作经验
擅长主流数据Oracle、MySQL、PG、openGauss运维
备份恢复,安装迁移,性能优化、故障应急处理等

可提供技术业务:
1.DB故障处理/疑难杂症远程支援
2.Mysql/PG/Oracle/openGauss
数据库部署及数仓搭建
•••
微信:jem_db
QQ交流群:587159446
公众号:IT邦德
•••

@TOC

1.RAC One Node介绍

sql 复制代码
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的数据库的单个实例,
仅在正常操作下在群集中的一个节点上运行。
sql 复制代码
使用Oracle RAC One Node,服务器的可扩展性没有限制,
如果应用程序需要的资源超过单个节点所能提供的资源,
则您可以将应用程序联机升级到Oracle RAC。
如果运行Oracle RAC One Node的节点过载,
则可以将实例重新定位到群集中的另一个节点。
使用Oracle RAC One Node,
您可以使用在线数据库重新定位功能来重新定位数据库实例,
而不会让应用程序用户停机。
或者,您可以使用Resource Manager实例缓存
来限制集群中每个服务器的单个数据库实例的CPU消耗,
并在必要时根据需求场景动态更改此限制。
sql 复制代码
使用单一客户端访问名称(SCAN)连接到数据库,
客户端可以独立于运行服务的节点来定位服务。
因此,重新定位Oracle RAC One Node实例对客户端
来说基本上是透明的,具体取决于客户端连接.

2.创建RAC One Node

sql 复制代码
可以使用DBCA创建Oracle RAC One Node数据库或者
手动创建的脚本也是可以的
Oracle RAC单节点数据库也可能是
从单个实例Oracle数据库或Oracle RAC数据库
转换而来的结果。
通常,Oracle提供的工具会向Oracle Clusterware
注册Oracle RAC单节点数据库
sql 复制代码
如果您的Oracle RAC One Node数据库
没有自动向Oracle Clusterware注册,
请使用srvctl add database命令将Oracle RAC One Node数据库添加到集群中。
css 复制代码
$ srvctl add database -dbtype  
RACONENODE [-server server_list]
[-instance instance_name] [-timeout timeout]

3.RAC切换到RAC One Node

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

3.1 查看资源状态

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

3.2.查看实例

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

3.3 查看数据库详细信息

yaml 复制代码
[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.删除实例

csharp 复制代码
只留下一个,RACOneNode只有一个实例是活动状态
[oracle@rac01 ~]$ srvctl remove instance 
-d racdb -i rac02 -f

说明:加上-f参数可以强制关闭实例并将实例删除

3.5 新增service

diff 复制代码
如果不新增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

css 复制代码
[oracle@rac01 ~]$ srvctl convert database 
-d racdb -c RACONENODE -i rac01

3.7 再次查看状态

ruby 复制代码
[oracle@rac01 ~]$ srvctl config database -d racdb

这里可以看到TYPE是RACOneNode。
Instance name prefix是实例的前缀,
后续会生成racdb1_1和racdb1_2实例

3.8 测试一下HA

ruby 复制代码
[oracle@rac01 ~]$ srvctl relocate database 
-d racdb -n rac02
ruby 复制代码
[oracle@rac01 ~]$ srvctl relocate database 
-d racdb -n rac01

4.RAC One Node切换到RAC

sql 复制代码
通过以Oracle RAC One Node数据库所有者的身份登录
并输入以下SRVCTL命令,
srvctl convert database 
-db db_unique_name -dbtype RAC

您可以将Oracle RAC One Node数据库
转换为Oracle RAC数据库:

4.1 进行转换

ruby 复制代码
[oracle@rac01 ~]$ srvctl convert database 
-d racdb -c rac

4.2 查看数据库信息

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

4.3.新增实例

csharp 复制代码
[oracle@rac01 ~]$ srvctl add instance 
-d racdb -i racdb1_2 -n rac02

4.4 启动实例

css 复制代码
[oracle@rac01 ~]$ srvctl start instance 
-d racdb -i racdb1_2

4.5 再次查看数据库的状态

ruby 复制代码
[oracle@rac01 ~]$ srvctl config database 
-d racdb

5.其他事项

5.1 RAC的SPFILE

arduino 复制代码
在实际工作中,发现有一些RAC实例的SPFILE是
在各自的ORACLE_HOME/dbs下,
现在想将其修改到共享目录(asm磁盘)中
ini 复制代码
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 转换后启动报错

ini 复制代码
在启动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
相关推荐
wn53139 分钟前
【Go - 类型断言】
服务器·开发语言·后端·golang
希冀1231 小时前
【操作系统】1.2操作系统的发展与分类
后端
GoppViper2 小时前
golang学习笔记29——golang 中如何将 GitHub 最新提交的版本设置为 v1.0.0
笔记·git·后端·学习·golang·github·源代码管理
爱上语文3 小时前
Springboot的三层架构
java·开发语言·spring boot·后端·spring
serve the people3 小时前
springboot 单独新建一个文件实时写数据,当文件大于100M时按照日期时间做文件名进行归档
java·spring boot·后端
罗政8 小时前
[附源码]超简洁个人博客网站搭建+SpringBoot+Vue前后端分离
vue.js·spring boot·后端
拾光师9 小时前
spring获取当前request
java·后端·spring
Java小白笔记11 小时前
关于使用Mybatis-Plus 自动填充功能失效问题
spring boot·后端·mybatis
JOJO___13 小时前
Spring IoC 配置类 总结
java·后端·spring·java-ee
白总Server14 小时前
MySQL在大数据场景应用
大数据·开发语言·数据库·后端·mysql·golang·php