在减少集群group时需要先把要移除group中的shard移到其它group后再drop掉即可
移动shard有两种方法:exclude rebalance与move shard, 前者只对AT CLUSTER WIDE的表使用,而后者对非AT CLUSTER WIDE的表使用,所以使用时要配合使用
(一)测试环境
原Cluster为2by2集群
G2N2> CREATE TABLE t1(id number) SHARDING BY HASH(id) AT CLUSTER WIDE;
G2N2> CREATE TABLE t2(id number) SHARDING BY HASH(id) AT CLUSTER group g1,g2;
G2N2> insert into t1 values(1),(2),(101),(102);
G2N2> insert into t2 values(1),(2),(101),(102);
G2N2> commit;
G2N2> Select owner, table_name,SHARD_STRATEGY, SHARD_NAME,SHARD_NUMBER,GROUP_NAME from DBA_TAB_SHARDS;
OWNER TABLE_NAME SHARD_STRATEGY SHARD_NAME SHARD_NUMBER GROUP_NAME
SYS T1 HASH SHARDING SHARD_000000 0 G1
SYS T1 HASH SHARDING SHARD_000001 1 G1
SYS T1 HASH SHARDING SHARD_000002 2 G1
…
SYS T1 HASH SHARDING SHARD_000021 21 G2
SYS T1 HASH SHARDING SHARD_000022 22 G2
SYS T1 HASH SHARDING SHARD_000023 23 G2
SYS T2 HASH SHARDING SHARD_000000 0 G1
SYS T2 HASH SHARDING SHARD_000001 1 G1
SYS T2 HASH SHARDING SHARD_000002 2 G1
…
SYS T2 HASH SHARDING SHARD_000022 22 G2
SYS T2 HASH SHARDING SHARD_000023 23 G2
(二)减group
G2N2> alter table t1 REBALANCE EXCLUDE CLUSTER GROUP g2;
G2N2> Alter TABLE t2 MOVE SHARD FROM CLUSTER GROUP g2 TO CLUSTER GROUP g1;
这里只有两个表,如果表多使用:
alter database REBALANCE EXCLUDE CLUSTER GROUP g2;
Alter database MOVE SHARD FROM CLUSTER GROUP g2 TO CLUSTER GROUP g1;
G2N2> Select owner, table_name,SHARD_STRATEGY, SHARD_NAME,SHARD_NUMBER,GROUP_NAME from DBA_TAB_SHARDS;
OWNER TABLE_NAME SHARD_STRATEGY SHARD_NAME SHARD_NUMBER GROUP_NAME
SYS T1 HASH SHARDING SHARD_000000 0 G1
SYS T1 HASH SHARDING SHARD_000001 1 G1
SYS T1 HASH SHARDING SHARD_000002 2 G1
…
SYS T1 HASH SHARDING SHARD_000021 21 G1
SYS T1 HASH SHARDING SHARD_000022 22 G1
SYS T1 HASH SHARDING SHARD_000023 23 G1
SYS T2 HASH SHARDING SHARD_000000 0 G1
SYS T2 HASH SHARDING SHARD_000001 1 G1
SYS T2 HASH SHARDING SHARD_000002 2 G1
…
SYS T2 HASH SHARDING SHARD_000022 22 G1
SYS T2 HASH SHARDING SHARD_000023 23 G1
G2N1> shutdown normal
G2N2> shutdown normal
G1N1> select * from t1@local;
ID
1
2
101
102
G1N1> ALTER DATABASE drop INACTIVE CLUSTER MEMBERS;
G1N1> select status,local_member_name from x$instance;
STATUS LOCAL_MEMBER_NAME
OPEN G1N1
OPEN G1N2
(三)加group
现在增加原来group:
G2N1> startup
G2N1> ALTER DATABASE RESET LOCAL CLUSTER MEMBER;
G2N1> ALTER system open global database;
G2N2> startup
G2N2> ALTER DATABASE RESET LOCAL CLUSTER MEMBER;
G2N2> ALTER system open global database;
G1N1> create cluster group g2 cluster member g2n1 host ‘10.10.10.7’ port 10101;
G1N1> alter cluster group g2 add cluster member g2n2 host ‘10.10.10.8’ port 10101;
G1N1> select status,local_member_name from x$instance;
STATUS LOCAL_MEMBER_NAME
OPEN G1N2
OPEN G2N2
OPEN G2N1
OPEN G1N1