Oracle Sharding 详解

Oracle Sharding 详解

适用版本:Oracle Database 12.2+ / 19c / 23ai 文档版本:v1.0 / 2026-07


1. 概述

Sharding 是 Oracle 水平扩展方案[1]:

详细见:Oracle RAC 架构深度解析Oracle 单实例 RAC Standby 架构对比


2. 概念

2.1 Sharding

- 数据水平分割
- 多数据库
- 独立
- 扩展

2.2 组件

- Shard Catalog:目录
- Shard:分片
- Shard Director:路由
- GSM:Global Service Manager

3. 架构

3.1 Shard Catalog

- 集中目录
- 元数据
- 路由信息

3.2 Shard

- 独立数据库
- 数据子集
- 独立维护

3.3 GSM

- 路由
- 连接
- 故障切换

4. 分片方法

4.1 System-Managed

CREATE SHARDCATALOG ...;
CREATE SHARDGROUP ... PARTITION BY CONSISTENT HASH;

4.2 User-Defined

CREATE SHARDGROUP ... PARTITION BY RANGE (region);

4.3 Composite

- Range + Hash
- 复合

5. 表

5.1 Sharded Table

CREATE TABLE cust (
  cust_id NUMBER PRIMARY KEY,
  name VARCHAR2(100)
)
TABLESPACE SET ts1
PARTITION BY CONSISTENT HASH (cust_id);

5.2 Duplicated Table

CREATE TABLE products (
  prod_id NUMBER PRIMARY KEY,
  name VARCHAR2(100)
) DUPLICATED;

5.3 Split Table

- 部分分片
- 设计

6. 路由

6.1 直接路由

- 客户端路由
- Shard Key
- 快

6.2 代理路由

- 通过 Catalog
- 跨分片
- 慢

6.3 查询

- 跨分片查询
- 统一
- 协调

7. 配置

7.1 Catalog

gdsctl create shardcatalog -database catalog_db

7.2 Shard

gdsctl add shard -shardgroup sg1 -connect shard1
gdsctl add shard -shardgroup sg2 -connect shard2

7.3 GSN

# tnsnames.ora
shard_cat = ...

8. 分片键

8.1 选择

- 高基数
- 查询常用
- 均匀分布

8.2 类型

- NUMBER
- VARCHAR2
- DATE
- RAW

8.3 一致性

- 同一分片
- 相关数据
- 性能

9. 高可用

9.1 Data Guard

- 每 Shard Data Guard
- 主备
- 高可用

9.2 故障切换

- GSM 自动
- 透明
- 应用

9.3 复制

- Active Standby
- 读写分离
- 性能

10. 管理

10.1 gdsctl

gdsctl
GDSCTL> config
GDSCTL> show shard
GDSCTL> add shard
GDSCTL> remove shard

10.2 GDS

- Global Data Services
- 负载均衡
- 故障切换

10.3 监控

SELECT * FROM gsmadmin_internal.shard;
SELECT * FROM gsmadmin_internal.shardgroup;

11. 应用场景

11.1 SaaS

- 多租户
- 数据隔离
- 扩展

11.2 全球

- 地理分布
- 数据本地
- 性能

11.3 大数据

- 海量数据
- 水平扩展
- 性能

12. vs RAC

RACSharding
共享共享存储不共享
扩展垂直水平
  • 数据 | 单一 | 分片 | 一致性 | 强 | 最终 | 适合 | 通用 | 特定

13. 限制

13.1 跨分片

- 跨分片 JOIN 慢
- 设计
- 避免

13.2 事务

- 跨分片事务
- 限制
- XA

13.3 复杂

- 部署复杂
- 管理
- 评估

14. 常见问题

14.1 路由错误

- Shard Key
- 检查

14.2 分片不均

- 重新分片
- 平衡

14.3 故障

- Data Guard
- 切换

15. 最佳实践

  1. Shard Key:选择
  2. Duplicated:小表
  3. Data Guard:高可用
  4. GSM:路由
  5. 避免跨分片:设计
  6. 监控:状态
  7. 测试:故障
  8. 文档:架构
  9. 演练:分片
  10. 评估:场景

16. 参考资料

[1] Oracle Database Sharding Guide 19c https://docs.oracle.com/en/database/oracle/oracle-database/19/shard/