Oracle 19C 创建二级分区表利用分片集群

本文探讨了在分布式数据库中使用Sharding和RAC的优缺点,并提供了创建和管理分片表的示例,包括二级分区、一致性哈希分区和子分区的创建。此外,还展示了如何验证分片分布、调整子分区以及查询表的只读状态。内容涵盖了数据库管理、分区策略和性能优化。
摘要由CSDN通过智能技术生成

经过了一些测试,发现这个sharding不是很好用,很多功能限制较多,还是建议使用RAC

创建二级分区表

启动shard

SQL> alter session enable shard ddl;
  1. DEMO1 应用于混杂模式

     CREATE SHARDED TABLE customers
     ( cust_id NUMBER NOT NULL
     , name VARCHAR2(50)
     , address VARCHAR2(250) 
     , location_id VARCHAR2(20) 
     , class VARCHAR2(3) 
     , signup_date DATE 
     , CONSTRAINT cust_pk PRIMARY KEY(cust_id, class) 
     )
     PARTITIONSET BY LIST (class) 
       PARTITION BY CONSISTENT HASH (cust_id)
       PARTITIONS AUTO
     (PARTITIONSET gold VALUES ('gld') TABLESPACE SET TSP_SET_1)
     ;
    

    PARTITIONSET中的值必须和shardspace的数量一致

  2. DEMO2 应用于system模式

     CREATE SHARDED TABLE customers 
     ( cust_id     NUMBER NOT NULL
     , name        VARCHAR2(50)
     , address     VARCHAR2(250)
     , location_id VARCHAR2(20)
     , class       VARCHAR2(3)
     , signup_date DATE
     , CONSTRAINT cust_pk PRIMARY KEY(cust_id, signup_date)
     )
     TABLESPACE SET TSP_SET_1
     PARTITION BY CONSISTENT HASH (cust_id)
     SUBPARTITION BY RANGE (signup_date)
     SUBPARTITION TEMPLATE 
     ( SUBPARTITION per1 VALUES LESS THAN (TO_DATE('01/01/2000','DD/MM/YYYY')),
       SUBPARTITION per2 VALUES LESS THAN (TO_DATE('01/01/2010','DD/MM/YYYY')),
       SUBPARTITION per3 VALUES LESS THAN (TO_DATE('01/01/2020','DD/MM/YYYY')),
       SUBPARTITION future VALUES LESS THAN (MAXVALUE)
     )
     PARTITIONS AUTO
     ;
    
  3. demo

     CREATE SHARDED TABLE voduser(
           userid varchar(500) not null, 
           areaid varchar(50), 
           stbtype integer, 
           starttime date, 
           processendtime date, 
           endtime date, 
           vodname varchar(1000), 
           vodid varchar(1000), 
           vodlogid varchar(1000), 
           vodlength integer, 
           pnum integer, 
           sp varchar(1000), 
           cp varchar(1000), 
           vodsp varchar(1000), 
           vodcp varchar(1000), 
           vodspname varchar(1000), 
           vodcpname varchar(1000), 
           director varchar(1000), 
           performer varchar(1000), 
           damscategory varchar(1000), 
           cmscategory varchar(1000), 
           categorygroup varchar(1000), 
           seconds integer, 
           groupid varchar(1000), 
           streamgroupid varchar(1000), 
           flag varchar(1000), 
           secondarycategorygroup varchar(1000), 
           allseconds varchar(1000), 
           charges varchar(1000), 
           cmstagid varchar(2000), 
           ztid varchar(1000), 
           visitpath varchar(1000)
         )
         TABLESPACE SET TSP_SET_1
         PARTITION BY CONSISTENT HASH (userid)
         SUBPARTITION BY RANGE (starttime)
         SUBPARTITION TEMPLATE 
         ( SUBPARTITION voduser20210101 VALUES LESS THAN (TO_DATE('20210101','yyyymmdd')),
           SUBPARTITION voduser20210102 VALUES LESS THAN (TO_DATE('20210102','yyyymmdd')),
           SUBPARTITION voduser20210103 VALUES LESS THAN (TO_DATE('20210103','yyyymmdd')),
           SUBPARTITION future VALUES LESS THAN (MAXVALUE)
         )
         PARTITIONS AUTO
         ;
    

相关SQL查询

  1. 登录catalog database验证所有的chunks都是统一分布式的

     SELECT a.name Shard,COUNT(b.chunk_number) Number_of_Chunks
       FROM gsmadmin_internal.database a,gsmadmin_internal.chunk_loc b
       WHERE a.database_num=b.database_num
       GROUP BY a.name
       ORDER BY a.name;
    
  2. 确认shard和复制表创建完毕

     show parameter db_unique_name;
     select owner,object_id,object_name,object_type from dba_objects where  object_name='CUSTOMERS';
    

添加子分区

添加子分区

alter table VODUSER
	split subpartition VODUSER_P1_FUTURE at (TO_DATE('20210104','yyyymmdd')) into (
	subpartition VODUSER_P1_VODUSER20210104,
	subpartition VODUSER_P1_FUTURE
) online


alter table VODUSER
set subpartition template (
	SUBPARTITION voduser20210104 VALUES LESS THAN (TO_DATE('20210104','yyyymmdd'))
);

查看是否readonly

select partition_name,compress_for,read_only from user_tab_partitions;

开启readonly

alter table sales_range modify partition q1 read only;

关闭

alter table sales_range modify partition q1 read write;

jdbc下载

需要升级JDK11
https://www.oracle.com/database/technologies/appdev/jdbc-ucp-19-9-c-downloads.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值