通过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上新建用户进行处理。

猜你喜欢

转载自www.linuxidc.com/Linux/2016-09/134934.htm