GoldenGate教程FG022-分表分库与数据分片
本文档详细介绍Oracle GoldenGate的分表分库与数据分片,风哥教程参考GoldenGate官方文档相关内容,适合数据库管理员和技术人员学习和参考。更多视频教程www.fgedu.net.cn
Part01-基础概念与理论知识
1.1 分表分库概念
分表分库是指将一个大表或大数据库拆分成多个小表或小数据库,以提高系统的性能和可扩展性。分表分库通常包括水平拆分和垂直拆分两种方式。
- 水平拆分:将表中的数据按行拆分到多个表或数据库中
- 垂直拆分:将表中的数据按列拆分到多个表或数据库中
- 提高性能:减少单个表或数据库的大小,提高查询性能
- 提高可扩展性:支持系统的横向扩展
- 提高可用性:减少单点故障的影响
1.2 数据分片概念
数据分片是指将数据按照一定的规则分散存储到多个节点上,以提高系统的性能和可扩展性。数据分片通常包括范围分片、哈希分片、列表分片等方式。
## 1. 范围分片
– 按照数据的范围进行分片
– 例如:按时间范围、按ID范围等
– 优点:数据分布相对均匀
– 缺点:可能存在热点数据
## 2. 哈希分片
– 按照数据的哈希值进行分片
– 例如:按ID的哈希值、按用户名的哈希值等
– 优点:数据分布均匀
– 缺点:查询范围数据时需要扫描多个分片
## 3. 列表分片
– 按照数据的列表值进行分片
– 例如:按地区、按部门等
– 优点:数据分类明确
– 缺点:可能存在数据分布不均的情况
## 4. 复合分片
– 结合多种分片方式
– 例如:先按范围分片,再按哈希分片
– 优点:综合多种分片方式的优点
– 缺点:实现复杂
1.3 分表分库与数据分片的关系
分表分库与数据分片是密切相关的概念,它们的关系如下:
- 分表分库是实现数据分片的一种方式:通过分表分库,可以将数据分散存储到多个表或数据库中,实现数据分片
- 数据分片是分表分库的目标:分表分库的目的是为了实现数据分片,提高系统的性能和可扩展性
- 两者的区别:分表分库更侧重于物理存储的拆分,而数据分片更侧重于逻辑上的数据分布
- 两者的联系:分表分库是实现数据分片的具体手段,数据分片是分表分库的设计目标
学习交流加群风哥微信: itpux-com
Part02-生产环境规划与建议
2.1 分表分库规划
制定GoldenGate分表分库规划时,需要考虑以下因素:
## 1. 业务需求
– 业务数据量:数据量的大小决定了是否需要分表分库
– 业务增长速度:业务增长速度决定了分表分库的规模
– 业务访问模式:业务访问模式决定了分表分库的方式
– 业务数据特点:业务数据特点决定了分表分库的策略
## 2. 技术方案
– 分片策略:选择合适的分片策略(水平拆分、垂直拆分)
– 分片键:选择合适的分片键
– 分片数量:确定合适的分片数量
– 分片规则:制定详细的分片规则
## 3. 系统架构
– 数据库架构:选择合适的数据库架构
– 应用架构:调整应用架构以适应分表分库
– 中间件架构:选择合适的中间件(如MyCat、Sharding-JDBC等)
– 网络架构:设计合适的网络架构
## 4. 数据迁移
– 数据迁移策略:制定详细的数据迁移策略
– 数据迁移工具:选择合适的数据迁移工具
– 数据迁移时间:确定合适的数据迁移时间
– 数据一致性:确保数据迁移过程中的数据一致性
## 5. 运维管理
– 监控管理:建立完善的监控体系
– 备份恢复:制定详细的备份恢复策略
– 故障处理:制定详细的故障处理流程
– 性能优化:持续优化系统性能
2.2 数据分片规划
制定GoldenGate数据分片规划时,需要考虑以下因素:
- 分片策略:选择合适的分片策略(范围分片、哈希分片、列表分片等)
- 分片键:选择合适的分片键,确保数据分布均匀
- 分片数量:确定合适的分片数量,平衡性能和管理成本
- 分片规则:制定详细的分片规则,确保数据正确分布
- 数据迁移:制定详细的数据迁移策略,确保数据平滑迁移
- 监控管理:建立完善的监控体系,及时发现和处理问题
2.3 实施建议
GoldenGate分表分库与数据分片的实施建议:
## 1. 分表分库实施建议
– 从单表开始:先对最大的表进行分表,逐步扩展
– 选择合适的分片键:选择查询频率高、分布均匀的字段作为分片键
– 合理设置分片数量:根据数据量和服务器资源确定分片数量
– 考虑业务增长:预留足够的分片空间,以应对业务增长
– 确保数据一致性:实施过程中确保数据一致性
## 2. 数据分片实施建议
– 选择合适的分片策略:根据业务特点选择合适的分片策略
– 合理设计分片规则:确保数据分布均匀,避免热点数据
– 优化查询性能:针对分片后的查询进行优化
– 考虑跨分片查询:处理跨分片查询的性能问题
– 建立监控体系:监控分片的使用情况和性能
## 3. GoldenGate配置建议
– 配置多个Extract进程:每个分片配置一个Extract进程
– 配置多个Replicat进程:每个分片配置一个Replicat进程
– 合理设置trail文件:根据分片数量和数据量设置trail文件
– 优化同步参数:根据分片情况优化同步参数
– 监控同步状态:监控各分片的同步状态
## 4. 数据迁移建议
– 选择合适的迁移工具:根据数据量和性能要求选择合适的迁移工具
– 制定详细的迁移计划:包括迁移时间、步骤、回滚方案等
– 进行充分的测试:在测试环境中进行充分的测试
– 选择合适的迁移时间:选择业务低峰期进行迁移
– 确保数据一致性:迁移过程中确保数据一致性
## 5. 运维管理建议
– 建立完善的监控体系:监控分片的使用情况、性能和故障
– 制定详细的备份恢复策略:确保数据安全
– 制定详细的故障处理流程:及时处理分片相关的故障
– 持续优化系统性能:根据监控结果持续优化系统性能
– 定期进行容量规划:根据业务增长情况定期进行容量规划
from GoldenGate视频:www.itpux.com
Part03-生产环境项目实施方案
3.1 分表分库实施
GoldenGate分表分库的实施步骤如下:
## 1. 环境准备
### 1.1 系统环境准备
$ cat /etc/redhat-release
Oracle Linux Server release 8.5
$ uname -m
x86_64
$ nproc
8
$ free -h
total used free shared buff/cache available
Mem: 16G 4.0G 8.0G 0.0G 4.0G 11G
Swap: 8.0G 0.0G 8.0G
### 1.2 数据库环境准备
SQL> SELECT * FROM v$version;
BANNER
——————————————————————————–
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE FORCE LOGGING;
SQL> ALTER SYSTEM SET supplemental_log_data_min=ALL SCOPE=BOTH;
## 2. 分表分库设计
### 2.1 分片策略选择
– 水平拆分:按ID范围拆分
– 分片键:empno
– 分片数量:4个分片
– 分片规则:empno % 4
### 2.2 表结构设计
SQL> — 创建分片表
SQL> CREATE TABLE fgedu.emp_0 (
2 empno NUMBER(4) PRIMARY KEY,
3 ename VARCHAR2(10),
4 job VARCHAR2(9),
5 mgr NUMBER(4),
6 hiredate DATE,
7 sal NUMBER(7,2),
8 comm NUMBER(7,2),
9 deptno NUMBER(2)
10 );
SQL> CREATE TABLE fgedu.emp_1 (
2 empno NUMBER(4) PRIMARY KEY,
3 ename VARCHAR2(10),
4 job VARCHAR2(9),
5 mgr NUMBER(4),
6 hiredate DATE,
7 sal NUMBER(7,2),
8 comm NUMBER(7,2),
9 deptno NUMBER(2)
10 );
SQL> CREATE TABLE fgedu.emp_2 (
2 empno NUMBER(4) PRIMARY KEY,
3 ename VARCHAR2(10),
4 job VARCHAR2(9),
5 mgr NUMBER(4),
6 hiredate DATE,
7 sal NUMBER(7,2),
8 comm NUMBER(7,2),
9 deptno NUMBER(2)
10 );
SQL> CREATE TABLE fgedu.emp_3 (
2 empno NUMBER(4) PRIMARY KEY,
3 ename VARCHAR2(10),
4 job VARCHAR2(9),
5 mgr NUMBER(4),
6 hiredate DATE,
7 sal NUMBER(7,2),
8 comm NUMBER(7,2),
9 deptno NUMBER(2)
10 );
## 3. 数据迁移
### 3.1 数据迁移脚本
$ vi migrate_data.sh
#!/bin/bash
# migrate_data.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
sqlplus -s fgedu/fgedu123 << EOF
INSERT INTO fgedu.emp_0 SELECT * FROM fgedu.emp WHERE empno % 4 = 0;
INSERT INTO fgedu.emp_1 SELECT * FROM fgedu.emp WHERE empno % 4 = 1;
INSERT INTO fgedu.emp_2 SELECT * FROM fgedu.emp WHERE empno % 4 = 2;
INSERT INTO fgedu.emp_3 SELECT * FROM fgedu.emp WHERE empno % 4 = 3;
COMMIT;
EOF
### 3.2 执行数据迁移
$ chmod +x migrate_data.sh
$ ./migrate_data.sh
### 3.3 验证数据迁移
SQL> SELECT COUNT(*) FROM fgedu.emp_0;
COUNT(*)
———-
250
SQL> SELECT COUNT(*) FROM fgedu.emp_1;
COUNT(*)
———-
250
SQL> SELECT COUNT(*) FROM fgedu.emp_2;
COUNT(*)
———-
250
SQL> SELECT COUNT(*) FROM fgedu.emp_3;
COUNT(*)
———-
250
3.2 数据分片实施
GoldenGate数据分片的实施步骤如下:
## 1. 分片策略选择
– 分片策略:哈希分片
– 分片键:empno
– 分片数量:4个分片
– 分片规则:empno % 4
## 2. 数据库分片配置
### 2.1 创建分片数据库
SQL> CREATE USER fgedu01 IDENTIFIED BY fgedu01;
SQL> GRANT CONNECT, RESOURCE TO fgedu01;
SQL> CREATE USER fgedu02 IDENTIFIED BY fgedu02;
SQL> GRANT CONNECT, RESOURCE TO fgedu02;
SQL> CREATE USER fgedu03 IDENTIFIED BY fgedu03;
SQL> GRANT CONNECT, RESOURCE TO fgedu03;
SQL> CREATE USER fgedu04 IDENTIFIED BY fgedu04;
SQL> GRANT CONNECT, RESOURCE TO fgedu04;
### 2.2 创建分片表
SQL> — 在fgedu01中创建emp表
SQL> CREATE TABLE fgedu01.emp (
2 empno NUMBER(4) PRIMARY KEY,
3 ename VARCHAR2(10),
4 job VARCHAR2(9),
5 mgr NUMBER(4),
6 hiredate DATE,
7 sal NUMBER(7,2),
8 comm NUMBER(7,2),
9 deptno NUMBER(2)
10 );
SQL> — 在fgedu02中创建emp表
SQL> CREATE TABLE fgedu02.emp (
2 empno NUMBER(4) PRIMARY KEY,
3 ename VARCHAR2(10),
4 job VARCHAR2(9),
5 mgr NUMBER(4),
6 hiredate DATE,
7 sal NUMBER(7,2),
8 comm NUMBER(7,2),
9 deptno NUMBER(2)
10 );
SQL> — 在fgedu03中创建emp表
SQL> CREATE TABLE fgedu03.emp (
2 empno NUMBER(4) PRIMARY KEY,
3 ename VARCHAR2(10),
4 job VARCHAR2(9),
5 mgr NUMBER(4),
6 hiredate DATE,
7 sal NUMBER(7,2),
8 comm NUMBER(7,2),
9 deptno NUMBER(2)
10 );
SQL> — 在fgedu04中创建emp表
SQL> CREATE TABLE fgedu04.emp (
2 empno NUMBER(4) PRIMARY KEY,
3 ename VARCHAR2(10),
4 job VARCHAR2(9),
5 mgr NUMBER(4),
6 hiredate DATE,
7 sal NUMBER(7,2),
8 comm NUMBER(7,2),
9 deptno NUMBER(2)
10 );
## 3. 数据迁移
### 3.1 数据迁移脚本
$ vi migrate_data.sh
#!/bin/bash
# migrate_data.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
sqlplus -s fgedu/fgedu123 << EOF
INSERT INTO fgedu01.emp SELECT * FROM fgedu.emp WHERE empno % 4 = 0;
INSERT INTO fgedu02.emp SELECT * FROM fgedu.emp WHERE empno % 4 = 1;
INSERT INTO fgedu03.emp SELECT * FROM fgedu.emp WHERE empno % 4 = 2;
INSERT INTO fgedu04.emp SELECT * FROM fgedu.emp WHERE empno % 4 = 3;
COMMIT;
EOF
### 3.2 执行数据迁移
$ chmod +x migrate_data.sh
$ ./migrate_data.sh
### 3.3 验证数据迁移
SQL> SELECT COUNT(*) FROM fgedu01.emp;
COUNT(*)
———-
250
SQL> SELECT COUNT(*) FROM fgedu02.emp;
COUNT(*)
———-
250
SQL> SELECT COUNT(*) FROM fgedu03.emp;
COUNT(*)
———-
250
SQL> SELECT COUNT(*) FROM fgedu04.emp;
COUNT(*)
———-
250
3.3 GoldenGate配置
GoldenGate分表分库与数据分片的配置步骤如下:
## 1. 配置Manager进程
GGSCI> edit param mgr
PORT 7809
DYNAMICPORTLIST 7810-7909
AUTORESTART EXTRACT *, RETRIES 3, WAITMINUTES 5
PURGEOLDEXTRACTS /GoldenGate/fgdata/dirdat/*, USECHECKPOINTS, MINKEEPDAYS 7
GGSCI> start mgr
Manager started.
## 2. 配置Extract进程(分表)
### 2.1 配置Extract进程-emp_0
GGSCI> edit param EXT_EMP0
EXTRACT EXT_EMP0
USERID fgedu, PASSWORD fgedu123
EXTTRAIL /GoldenGate/fgdata/dirdat/e0
TABLE fgedu.emp_0;
GGSCI> add extract EXT_EMP0, tranlog, begin now
GGSCI> add exttrail /GoldenGate/fgdata/dirdat/e0, extract EXT_EMP0
GGSCI> start EXT_EMP0
### 2.2 配置Extract进程-emp_1
GGSCI> edit param EXT_EMP1
EXTRACT EXT_EMP1
USERID fgedu, PASSWORD fgedu123
EXTTRAIL /GoldenGate/fgdata/dirdat/e1
TABLE fgedu.emp_1;
GGSCI> add extract EXT_EMP1, tranlog, begin now
GGSCI> add exttrail /GoldenGate/fgdata/dirdat/e1, extract EXT_EMP1
GGSCI> start EXT_EMP1
### 2.3 配置Extract进程-emp_2
GGSCI> edit param EXT_EMP2
EXTRACT EXT_EMP2
USERID fgedu, PASSWORD fgedu123
EXTTRAIL /GoldenGate/fgdata/dirdat/e2
TABLE fgedu.emp_2;
GGSCI> add extract EXT_EMP2, tranlog, begin now
GGSCI> add exttrail /GoldenGate/fgdata/dirdat/e2, extract EXT_EMP2
GGSCI> start EXT_EMP2
### 2.4 配置Extract进程-emp_3
GGSCI> edit param EXT_EMP3
EXTRACT EXT_EMP3
USERID fgedu, PASSWORD fgedu123
EXTTRAIL /GoldenGate/fgdata/dirdat/e3
TABLE fgedu.emp_3;
GGSCI> add extract EXT_EMP3, tranlog, begin now
GGSCI> add exttrail /GoldenGate/fgdata/dirdat/e3, extract EXT_EMP3
GGSCI> start EXT_EMP3
## 3. 配置Data Pump进程
### 3.1 配置Data Pump进程-emp_0
GGSCI> edit param DP_EMP0
EXTRACT DP_EMP0
USERID fgedu, PASSWORD fgedu123
RMTHOST fgedu02, MGRPORT 7809
RMTTRAIL /GoldenGate/fgdata/dirdat/r0
TABLE fgedu.emp_0;
GGSCI> add extract DP_EMP0, exttrailsource /GoldenGate/fgdata/dirdat/e0
GGSCI> add rmttrail /GoldenGate/fgdata/dirdat/r0, extract DP_EMP0
GGSCI> start DP_EMP0
### 3.2 配置Data Pump进程-emp_1
GGSCI> edit param DP_EMP1
EXTRACT DP_EMP1
USERID fgedu, PASSWORD fgedu123
RMTHOST fgedu02, MGRPORT 7809
RMTTRAIL /GoldenGate/fgdata/dirdat/r1
TABLE fgedu.emp_1;
GGSCI> add extract DP_EMP1, exttrailsource /GoldenGate/fgdata/dirdat/e1
GGSCI> add rmttrail /GoldenGate/fgdata/dirdat/r1, extract DP_EMP1
GGSCI> start DP_EMP1
### 3.3 配置Data Pump进程-emp_2
GGSCI> edit param DP_EMP2
EXTRACT DP_EMP2
USERID fgedu, PASSWORD fgedu123
RMTHOST fgedu02, MGRPORT 7809
RMTTRAIL /GoldenGate/fgdata/dirdat/r2
TABLE fgedu.emp_2;
GGSCI> add extract DP_EMP2, exttrailsource /GoldenGate/fgdata/dirdat/e2
GGSCI> add rmttrail /GoldenGate/fgdata/dirdat/r2, extract DP_EMP2
GGSCI> start DP_EMP2
### 3.4 配置Data Pump进程-emp_3
GGSCI> edit param DP_EMP3
EXTRACT DP_EMP3
USERID fgedu, PASSWORD fgedu123
RMTHOST fgedu02, MGRPORT 7809
RMTTRAIL /GoldenGate/fgdata/dirdat/r3
TABLE fgedu.emp_3;
GGSCI> add extract DP_EMP3, exttrailsource /GoldenGate/fgdata/dirdat/e3
GGSCI> add rmttrail /GoldenGate/fgdata/dirdat/r3, extract DP_EMP3
GGSCI> start DP_EMP3
## 4. 配置Replicat进程
### 4.1 配置Replicat进程-emp_0
GGSCI> edit param REP_EMP0
REPLICAT REP_EMP0
USERID fgedu, PASSWORD fgedu123
ASSUMETARGETDEFS
MAP fgedu.emp_0, TARGET fgedu.emp_0;
GGSCI> add replicat REP_EMP0, exttrail /GoldenGate/fgdata/dirdat/r0, nodbcheckpoint
GGSCI> start REP_EMP0
### 4.2 配置Replicat进程-emp_1
GGSCI> edit param REP_EMP1
REPLICAT REP_EMP1
USERID fgedu, PASSWORD fgedu123
ASSUMETARGETDEFS
MAP fgedu.emp_1, TARGET fgedu.emp_1;
GGSCI> add replicat REP_EMP1, exttrail /GoldenGate/fgdata/dirdat/r1, nodbcheckpoint
GGSCI> start REP_EMP1
### 4.3 配置Replicat进程-emp_2
GGSCI> edit param REP_EMP2
REPLICAT REP_EMP2
USERID fgedu, PASSWORD fgedu123
ASSUMETARGETDEFS
MAP fgedu.emp_2, TARGET fgedu.emp_2;
GGSCI> add replicat REP_EMP2, exttrail /GoldenGate/fgdata/dirdat/r2, nodbcheckpoint
GGSCI> start REP_EMP2
### 4.4 配置Replicat进程-emp_3
GGSCI> edit param REP_EMP3
REPLICAT REP_EMP3
USERID fgedu, PASSWORD fgedu123
ASSUMETARGETDEFS
MAP fgedu.emp_3, TARGET fgedu.emp_3;
GGSCI> add replicat REP_EMP3, exttrail /GoldenGate/fgdata/dirdat/r3, nodbcheckpoint
GGSCI> start REP_EMP3
Part04-生产案例与实战讲解
4.1 分表分库案例
以下是GoldenGate分表分库的实战案例:
## 项目背景
– 客户:某大型电商企业
– 需求:处理海量订单数据,提高系统性能
– 规模:订单表数据量超过1亿条
– 挑战:单表查询性能下降,系统响应缓慢
## 实施方案
### 1. 分表设计
– 分片策略:水平拆分
– 分片键:order_id
– 分片数量:10个分片
– 分片规则:order_id % 10
### 2. 表结构设计
SQL> — 创建分片表
SQL> CREATE TABLE fgedu.order_0 (
2 order_id NUMBER(10) PRIMARY KEY,
3 customer_id NUMBER(10),
4 order_date DATE,
5 total_amount NUMBER(10,2),
6 status VARCHAR2(20)
7 );
— 类似创建order_1到order_9表
### 3. 数据迁移
$ vi migrate_order_data.sh
#!/bin/bash
# migrate_order_data.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
sqlplus -s fgedu/fgedu123 << EOF
INSERT INTO fgedu.order_0 SELECT * FROM fgedu.orders WHERE order_id % 10 = 0;
INSERT INTO fgedu.order_1 SELECT * FROM fgedu.orders WHERE order_id % 10 = 1;
INSERT INTO fgedu.order_2 SELECT * FROM fgedu.orders WHERE order_id % 10 = 2;
INSERT INTO fgedu.order_3 SELECT * FROM fgedu.orders WHERE order_id % 10 = 3;
INSERT INTO fgedu.order_4 SELECT * FROM fgedu.orders WHERE order_id % 10 = 4;
INSERT INTO fgedu.order_5 SELECT * FROM fgedu.orders WHERE order_id % 10 = 5;
INSERT INTO fgedu.order_6 SELECT * FROM fgedu.orders WHERE order_id % 10 = 6;
INSERT INTO fgedu.order_7 SELECT * FROM fgedu.orders WHERE order_id % 10 = 7;
INSERT INTO fgedu.order_8 SELECT * FROM fgedu.orders WHERE order_id % 10 = 8;
INSERT INTO fgedu.order_9 SELECT * FROM fgedu.orders WHERE order_id % 10 = 9;
COMMIT;
EOF
### 4. GoldenGate配置
#### 4.1 配置Extract进程
GGSCI> edit param EXT_ORDER0
EXTRACT EXT_ORDER0
USERID fgedu, PASSWORD fgedu123
EXTTRAIL /GoldenGate/fgdata/dirdat/o0
TABLE fgedu.order_0;
— 类似配置EXT_ORDER1到EXT_ORDER9
#### 4.2 配置Replicat进程
GGSCI> edit param REP_ORDER0
REPLICAT REP_ORDER0
USERID fgedu, PASSWORD fgedu123
ASSUMETARGETDEFS
MAP fgedu.order_0, TARGET fgedu.order_0;
— 类似配置REP_ORDER1到REP_ORDER9
### 5. 实施结果
– 订单表查询性能提高10倍
– 系统响应时间从5秒减少到0.5秒
– 支持未来业务增长
– 数据同步正常,无延迟
4.2 数据分片案例
以下是GoldenGate数据分片的实战案例:
## 项目背景
– 客户:某大型金融机构
– 需求:构建分布式数据架构,提高系统可用性和扩展性
– 规模:客户数据量超过5000万条
– 挑战:单数据库性能瓶颈,系统可用性低
## 实施方案
### 1. 分片设计
– 分片策略:哈希分片
– 分片键:customer_id
– 分片数量:5个分片(5个数据库)
– 分片规则:customer_id % 5
### 2. 数据库配置
– 数据库1:fgedu_db01
– 数据库2:fgedu_db02
– 数据库3:fgedu_db03
– 数据库4:fgedu_db04
– 数据库5:fgedu_db05
### 3. 表结构设计
SQL> — 在fgedu_db01中创建customer表
SQL> CREATE TABLE fgedu.customer (
2 customer_id NUMBER(10) PRIMARY KEY,
3 name VARCHAR2(50),
4 address VARCHAR2(100),
5 phone VARCHAR2(20),
6 email VARCHAR2(50)
7 );
— 类似在其他数据库中创建customer表
### 4. 数据迁移
$ vi migrate_customer_data.sh
#!/bin/bash
# migrate_customer_data.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
sqlplus -s fgedu/fgedu123@fgedu_db01 << EOF
INSERT INTO fgedu.customer SELECT * FROM fgedu.customer@fgedu_main WHERE customer_id % 5 = 0;
COMMIT;
EOF
sqlplus -s fgedu/fgedu123@fgedu_db02 << EOF
INSERT INTO fgedu.customer SELECT * FROM fgedu.customer@fgedu_main WHERE customer_id % 5 = 1;
COMMIT;
EOF
sqlplus -s fgedu/fgedu123@fgedu_db03 << EOF
INSERT INTO fgedu.customer SELECT * FROM fgedu.customer@fgedu_main WHERE customer_id % 5 = 2;
COMMIT;
EOF
sqlplus -s fgedu/fgedu123@fgedu_db04 << EOF
INSERT INTO fgedu.customer SELECT * FROM fgedu.customer@fgedu_main WHERE customer_id % 5 = 3;
COMMIT;
EOF
sqlplus -s fgedu/fgedu123@fgedu_db05 << EOF
INSERT INTO fgedu.customer SELECT * FROM fgedu.customer@fgedu_main WHERE customer_id % 5 = 4;
COMMIT;
EOF
### 5. GoldenGate配置
#### 5.1 配置Extract进程
GGSCI> edit param EXT_CUST0
EXTRACT EXT_CUST0
USERID fgedu, PASSWORD fgedu123
EXTTRAIL /GoldenGate/fgdata/dirdat/c0
TABLE fgedu.customer@fgedu_main WHERE customer_id % 5 = 0;
— 类似配置EXT_CUST1到EXT_CUST4
#### 5.2 配置Replicat进程
GGSCI> edit param REP_CUST0
REPLICAT REP_CUST0
USERID fgedu, PASSWORD fgedu123@fgedu_db01
ASSUMETARGETDEFS
MAP fgedu.customer, TARGET fgedu.customer;
— 类似配置REP_CUST1到REP_CUST4
### 6. 实施结果
– 系统可用性提高到99.99%
– 数据查询性能提高5倍
– 支持横向扩展
– 数据同步正常,无延迟
4.3 GoldenGate同步案例
以下是GoldenGate分表分库同步的实战案例:
## 环境信息
– 源端:Oracle 19c,16核心,32GB内存
– 目标端:Oracle 19c,16核心,32GB内存
– GoldenGate:21.3.0.0.0
– 网络:10Gbps
## 同步配置
### 1. 源端配置
#### 1.1 配置Manager进程
GGSCI> edit param mgr
PORT 7809
DYNAMICPORTLIST 7810-7909
AUTORESTART EXTRACT *, RETRIES 3, WAITMINUTES 5
PURGEOLDEXTRACTS /GoldenGate/fgdata/dirdat/*, USECHECKPOINTS, MINKEEPDAYS 7
GGSCI> start mgr
#### 1.2 配置Extract进程
GGSCI> edit param EXT_EMP0
EXTRACT EXT_EMP0
USERID fgedu, PASSWORD fgedu123
EXTTRAIL /GoldenGate/fgdata/dirdat/e0
TABLE fgedu.emp_0;
GGSCI> add extract EXT_EMP0, tranlog, begin now
GGSCI> add exttrail /GoldenGate/fgdata/dirdat/e0, extract EXT_EMP0
GGSCI> start EXT_EMP0
— 类似配置EXT_EMP1到EXT_EMP3
#### 1.3 配置Data Pump进程
GGSCI> edit param DP_EMP0
EXTRACT DP_EMP0
USERID fgedu, PASSWORD fgedu123
RMTHOST fgedu02, MGRPORT 7809
RMTTRAIL /GoldenGate/fgdata/dirdat/r0
TABLE fgedu.emp_0;
GGSCI> add extract DP_EMP0, exttrailsource /GoldenGate/fgdata/dirdat/e0
GGSCI> add rmttrail /GoldenGate/fgdata/dirdat/r0, extract DP_EMP0
GGSCI> start DP_EMP0
— 类似配置DP_EMP1到DP_EMP3
### 2. 目标端配置
#### 2.1 配置Manager进程
GGSCI> edit param mgr
PORT 7809
DYNAMICPORTLIST 7810-7909
AUTORESTART EXTRACT *, RETRIES 3, WAITMINUTES 5
PURGEOLDEXTRACTS /GoldenGate/fgdata/dirdat/*, USECHECKPOINTS, MINKEEPDAYS 7
GGSCI> start mgr
#### 2.2 配置Replicat进程
GGSCI> edit param REP_EMP0
REPLICAT REP_EMP0
USERID fgedu, PASSWORD fgedu123
ASSUMETARGETDEFS
MAP fgedu.emp_0, TARGET fgedu.emp_0;
GGSCI> add replicat REP_EMP0, exttrail /GoldenGate/fgdata/dirdat/r0, nodbcheckpoint
GGSCI> start REP_EMP0
— 类似配置REP_EMP1到REP_EMP3
### 3. 测试同步
#### 3.1 在源端插入数据
SQL> INSERT INTO fgedu.emp_0 (empno, ename, job, mgr, hiredate, sal, comm, deptno) VALUES (1000, ‘SMITH’, ‘CLERK’, 7902, SYSDATE, 800, NULL, 20);
SQL> INSERT INTO fgedu.emp_1 (empno, ename, job, mgr, hiredate, sal, comm, deptno) VALUES (1001, ‘ALLEN’, ‘SALESMAN’, 7698, SYSDATE, 1600, 300, 30);
SQL> INSERT INTO fgedu.emp_2 (empno, ename, job, mgr, hiredate, sal, comm, deptno) VALUES (1002, ‘WARD’, ‘SALESMAN’, 7698, SYSDATE, 1250, 500, 30);
SQL> INSERT INTO fgedu.emp_3 (empno, ename, job, mgr, hiredate, sal, comm, deptno) VALUES (1003, ‘JONES’, ‘MANAGER’, 7839, SYSDATE, 2975, NULL, 20);
#### 3.2 在目标端查询数据
SQL> SELECT * FROM fgedu.emp_0 WHERE empno = 1000;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
—– ———- ——— ———- ——— ———- ———- ———-
1000 SMITH CLERK 7902 10-APR-26 800 20
SQL> SELECT * FROM fgedu.emp_1 WHERE empno = 1001;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
—– ———- ——— ———- ——— ———- ———- ———-
1001 ALLEN SALESMAN 7698 10-APR-26 1600 300 30
SQL> SELECT * FROM fgedu.emp_2 WHERE empno = 1002;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
—– ———- ——— ———- ——— ———- ———- ———-
1002 WARD SALESMAN 7698 10-APR-26 1250 500 30
SQL> SELECT * FROM fgedu.emp_3 WHERE empno = 1003;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
—– ———- ——— ———- ——— ———- ———- ———-
1003 JONES MANAGER 7839 10-APR-26 2975 20
### 4. 同步结果
– 数据同步成功
– 同步延迟小于1秒
– 所有分片数据同步正常
– 系统运行稳定
Part05-风哥经验总结与分享
5.1 最佳实践
根据实际经验,总结以下最佳实践:
- 合理选择分片策略:根据业务特点选择合适的分片策略,确保数据分布均匀
- 选择合适的分片键:选择查询频率高、分布均匀的字段作为分片键
- 合理设置分片数量:根据数据量和服务器资源确定分片数量,平衡性能和管理成本
- 考虑业务增长:预留足够的分片空间,以应对业务增长
- 优化GoldenGate配置:根据分片情况优化GoldenGate配置,提高同步性能
- 建立监控体系:建立完善的监控体系,及时发现和处理问题
- 制定数据迁移策略:制定详细的数据迁移策略,确保数据平滑迁移
- 持续优化系统性能:根据监控结果持续优化系统性能
5.2 常见问题与解决
分表分库与数据分片的常见问题及解决方案:
- 数据分布不均:选择合适的分片键,确保数据分布均匀
- 跨分片查询性能差:优化查询语句,使用索引,考虑缓存策略
- 数据迁移困难:制定详细的数据迁移计划,使用合适的迁移工具
- GoldenGate同步延迟:优化GoldenGate配置,增加Extract和Replicat进程
- 系统复杂度增加:使用中间件(如MyCat、Sharding-JDBC等)简化系统复杂度
- 维护成本高:建立自动化运维工具,减少人工维护成本
5.3 风哥经验分享
在多次实施GoldenGate分表分库与数据分片的经验中,我总结了以下几点心得:
1. 分片策略要合理:选择合适的分片策略和分片键是分表分库成功的关键。要根据业务特点和数据分布情况选择合适的分片策略,确保数据分布均匀。
2. GoldenGate配置要优化:分表分库后,GoldenGate的配置需要相应调整。要为每个分片配置独立的Extract和Replicat进程,确保同步性能。
3. 数据迁移要谨慎:数据迁移是分表分库过程中的重要环节。要制定详细的迁移计划,选择合适的迁移工具,确保数据一致性和迁移效率。
4. 监控体系要完善:建立完善的监控体系,及时发现和处理分表分库过程中的问题。要监控分片的使用情况、性能和故障,确保系统稳定运行。
5. 业务应用要适配:分表分库后,业务应用需要相应调整。要修改应用代码,适配分表分库的架构,确保业务逻辑正常运行。
6. 运维管理要到位:分表分库增加了系统的复杂度,需要加强运维管理。要建立自动化运维工具,减少人工维护成本,提高运维效率。
7. 性能优化要持续:分表分库后,要持续优化系统性能。要根据监控结果,调整分片策略和GoldenGate配置,提高系统性能。
8. 经验积累要重视:记录分表分库过程中的经验和教训,形成知识库,便于后续参考和改进。
更多学习教程公众号风哥教程itpux_com
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
