通过STANDBY数据库实现读写分离时索引过多的问题

     ORACLE 11G的物理STANDBY数据库可以只读打开并实时应用,可以满足很多应用更改为读写分离的架构。但业务上将主库主要做DML操作,备库上做SELECT操作,可能存在的一个问题就是,备库上的SELECT可能需要大量的索引,而这些索引在主库上实际是没有意义的,并且还影响主库DML操作的性能和日志量。但物理STANDBY只能通过在主库上建索引后同步到备库上,备库自己是无法新建索引的。这种情况就可以发挥逻辑STANDBY的优势了。
     数据库的GUARD STATUS分为三种:NONE,STANDBY和ALL.默认逻辑STANDBY数据库的GUARD STATUS是ALL,可通过SELECT GUARD_STATUS FROM V$DATABASE查看,可通过ALTER DATABASE GUARD ALL/STANDBY/NONE进行调整。GUARD STATUS为ALL,可以防止数据库中的所有对象被修改,也就是只能通过SQL APPLY进行应用;GUARD STATUS为STANDBY,用户不能修改SQL APPLY进行应用的表,但可以自己创建新表并进行相关的DDL/DML操作;GUARD STATUS为NONE,用户可以随便修改任何表,只要具有权限即可。
针对备库的SELECT操作需要大量索引的问题,通过逻辑STANDBY实现就简单了,只需将GUARD STATUS修改为NONE,然后在备库上建索引即可。
个人建议:
1.不要在原始的用户下建索引,可以新建一个用户,在新建的用户上建原始用户表上的索引,这样便于区分。
2.一般不要在备库上建唯一索引或其它约束,防止SQL APPLY无法应用。
3.对于需要对原始数据进行二次处理的需求,也可以通过在逻辑STADNBY上新建用户进行处理。

物理STANDBY转逻辑STANDBY的文档可参考:http://blog.itpub.net/28539951/viewspace-1776691/

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28539951/viewspace-2124430/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/28539951/viewspace-2124430/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值