oracle instance_number,Oracle 12c R2 – 19C Instance_mode read-only(不是雪中须送炭,聊装风景要诗来。)...

Oracle数据库40年来还真是“急人所急 想人所想”,不断努力在一套软件中集成所有解决方案,以至于导致有人抱怨“她”太“胖”了。有没有想过oracle数据库中的读写分离场景?首先会想到使用Active DataGuard,但是如果不要DG,只在一套数据库RAC中不同节点实现呢?如一个节点写,其它节点只读呢。

前几天给LinuxONE的Oracle19c RAC巡检时发现spfile中instance_mode为read-only, 该库不是standby环境。(不一定是LinuxONE大机环境,适用于Oracle 12.2以后的RAC,单实例spfile默认不存在此参数)

什么是instance_mode

SQL> show parameter instance_mode

PARAMETER_NAME TYPE VALUE

----------------------- ----------- ----------------------------------

instance_mode string READ-WRITE

SQL> select inst_id,name,value from gv$spparameter where name like 'instance_mode%';

INST_ID NAME VALUE

---------- -------------------- ------------------------------

2 instance_mode read-only

1 instance_mode read-only

SQL> show spparameter instance_mode

SID NAME TYPE VALUE

-------- ----------------------------- ----------- ----------------------------

* instance_mode string read-only

SQL> select open_mode from v$database;

OPEN_MODE

--------------------

READ WRITE

Note:

spfile中是instance_mode read-only, 当前内存里是read-write, 数据库也是以read-write打开, 如果因为spfile参数配置有问题,在实例重启后都是read-only打开那就是隐患了,在我的单实例测试了一下(其实这参数是有限制的).注意这里的read-only批的是instance而不是database.

SQL> alter system set instance_mode="read-only" scope=spfile;

System altered.

SQL> startup force

ORACLE instance started.

Total System Global Area 1073738888 bytes

Fixed Size 9143432 bytes

Variable Size 792723456 bytes

Database Buffers 268435456 bytes

Redo Buffers 3436544 bytes

Database mounted.

ORA-16005: database requires recovery

SQL> recover database;

ORA-12969: invalid alter database option for read-only instance

Note:

如果实例是以read-only mode那数据库就无法启动了。注意默认如果没有像我这种显示修改,实际上是不会发生的。

官方文档

记录了instance_mode是从12cR2引入可以指定值,值INSTANCE_MODE = { READ-WRITE | READ-ONLY | READ-MOSTLY },默认READ-WRITE,可以把部分节点改为READ-ONLY或READ-MOSTLY值,  但是有限制:

1,至少RAC中有一个节点是READ-WRITE的,这样就不会发生上面的问题,数据库都无法打开。如果仅有的READ-WRITE实例crash,其它所有实例也会crash.

2,  instance_mode为READ-ONLY的实例不能是RAC中打开的第一个实例,要等read-write实例READY。

3,不支持同一RAC中instance_mode为READ-ONLY 和 READ-MOSTLY并存

4,Read-only 实例可以禁掉部分不需要的后台进程如ARCn、CKPT

5.   READ-ONLY 实例可以禁掉redo thread  ,  read more

什么是family:dw_helper.instance_mode

回到原RAC环境,查看SPFILE

SQL> create pfile='/tmp/pfile.ora' from spfile;

File created.

# vi /tmp/pfile.ora

...

*.inmemory_query='DISABLE'

family:dw_helper.instance_mode='read-only'

anbob2.instance_number=2

anbob1.instance_number=1

注意:

这里的instance_mode参数并非常规实例参数, v$spparameter.FAMILY 同样值为dw_helper, 这是oracle内部使用的保留列,parameter “family:dw_helper.instance_mode=read-only” 通常是没有用的,猜测应该是用于FLEX CLUSTER架构的leaf nodes。 和Read-Only instances也是FLEX Cluster 12.2 的leaf Nodes使用。

所以这个参数是可以删除掉的,并也只是在RAC环境的SPfile中存在。

SQL> alter system reset instance_mode scope=spfile;

alter system reset instance_mode scope=spfile

*

ERROR at line 1:

ORA-32010: cannot find entry to delete in SPFILE

SQL> alter system reset "instance_mode" scope=spfile;

alter system reset "instance_mode" scope=spfile

*

ERROR at line 1:

ORA-32010: cannot find entry to delete in SPFILE

SQL> alter system reset instance_mode family='dw_helper' scope=spfile;

System altered.

SQL> create pfile='/tmp/pfile.ora' from spfile;

File created.

Tip:

pfile中的参数family:dw_helper.instance_mode=read-only已经不存在。

SQL> select inst_id,name,value from gv$spparameter where name like 'instance_mode%';

INST_ID NAME VALUE

---------- -------------------- ------------------------------

2 instance_mode

1 instance_mode

什么是Flex CLUSTER

Flex Cluster在12C的新特性,同时还有Flex ASM, Flex cluster引入了leaf node、hub node, 打破了过去节点间都要通过interconnect 互联心跳,多个leaf node可以只于它的hub node互联,实现的是application tier节点扩展. hub节点是跑真正的db ,vip ,asm instance,需要与FLEX ASM连接。 flex ASM 在我之前的文章有介绍。

在12C R1时如果注意过,创建cluster时可以选择是pre-12的standard cluster和12c引入flex cluster. 也切换flex 和standard 模式的方法如下

crsctl set cluster mode {standard|flex}

但是从12cR2开始上面的命令没有了,并且默认就是Flex cluster,无法再使用standard,与ORACLE 产品经理确认后, 12.2默认是在flex cluster,但并不是意味要求部署leaf node, 默认为hub node, 和之前的standard使用一样,只是强置使用FLEX ASM, 也是后续版本的标准,同时LEAF NODE已经逐渐淘汰,leaf node试水失败,但是hub node的名字保留了下来。

打赏

8732971891f4ba05583674ca6b8145ac.png微信扫一扫,打赏作者吧~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值