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
| 项 | RAC | Sharding |
|---|---|---|
| 共享 | 共享存储 | 不共享 |
| 扩展 | 垂直 | 水平 |
- 数据 | 单一 | 分片 | 一致性 | 强 | 最终 | 适合 | 通用 | 特定
13. 限制
13.1 跨分片
- 跨分片 JOIN 慢
- 设计
- 避免
13.2 事务
- 跨分片事务
- 限制
- XA
13.3 复杂
- 部署复杂
- 管理
- 评估
14. 常见问题
14.1 路由错误
- Shard Key
- 检查
14.2 分片不均
- 重新分片
- 平衡
14.3 故障
- Data Guard
- 切换
15. 最佳实践
- Shard Key:选择
- Duplicated:小表
- Data Guard:高可用
- GSM:路由
- 避免跨分片:设计
- 监控:状态
- 测试:故障
- 文档:架构
- 演练:分片
- 评估:场景
16. 参考资料
[1] Oracle Database Sharding Guide 19c https://docs.oracle.com/en/database/oracle/oracle-database/19/shard/