内容大纲
内容简介:本文主要介绍Oracle GoldenGate数据过滤的配置与管理,包括数据过滤的概念、类型、配置步骤和性能优化。风哥教程参考Oracle官方文档GoldenGate相关内容,为生产环境提供完整的数据过滤解决方案。
Part01-基础概念与理论知识
1.1 数据过滤概念
Oracle GoldenGate数据过滤是一种机制,允许用户在数据复制过程中选择性地包含或排除特定的数据行或列。通过数据过滤,可以减少复制的数据量,提高复制性能,同时满足特定的业务需求,如只复制特定地区的数据或特定类型的交易。
1.2 数据过滤类型
- 行级过滤:根据条件过滤特定的行数据
- 列级过滤:只复制表中的特定列
- 表级过滤:只复制特定的表
- 模式级过滤:只复制特定模式下的表
1.3 数据过滤的重要性
- 减少网络传输量,提高复制性能
- 减少目标数据库的存储需求
- 满足合规性要求,避免敏感数据复制
- 优化目标数据库性能,减少不必要的数据处理
Part02-生产环境规划与建议
2.1 过滤策略制定
制定合理的过滤策略:
- 明确业务需求,确定需要复制的数据范围
- 分析数据量和过滤条件,评估过滤对性能的影响
- 选择合适的过滤类型,平衡性能和功能需求
- 考虑未来业务变化,设计灵活的过滤策略
2.2 性能影响评估
数据过滤对性能的影响:
- 正面影响:减少数据传输量,降低目标数据库负载
- 负面影响:增加Extract进程的CPU消耗,需要额外的条件判断
- 平衡点:选择合适的过滤条件,避免过于复杂的过滤逻辑
2.3 最佳实践
- 在源端进行过滤,减少数据传输
- 使用简单的过滤条件,避免复杂的表达式
- 定期审查过滤策略,确保满足业务需求
- 测试过滤对性能的影响,优化过滤条件
Part03-生产环境项目实施方案
3.1 行级过滤配置
GGSCI (fgedu.net.cn) 1> edit params ext01
EXTRACT ext01
SETENV (NLS_LANG=”AMERICAN_AMERICA.AL32UTF8″)
USERIDALIAS fgedu_ggadmin
EXTTRAIL /oracle/goldengate/dirdat/et
— 只复制状态为’ACTIVE’的订单
TABLE fgedu.fgedu_orders, FILTER (STATUS = ‘ACTIVE’);
— 只复制金额大于1000的订单
TABLE fgedu.fgedu_orders, FILTER (AMOUNT > 1000);
— 只复制特定地区的客户
TABLE fgedu.fgedu_customers, FILTER (REGION IN (‘North’, ‘South’));
3.2 列级过滤配置
GGSCI (fgedu.net.cn) 1> edit params ext01
EXTRACT ext01
SETENV (NLS_LANG=”AMERICAN_AMERICA.AL32UTF8″)
USERIDALIAS fgedu_ggadmin
EXTTRAIL /oracle/goldengate/dirdat/et
— 只复制订单表的特定列
TABLE fgedu.fgedu_orders, COLUMNS (ORDER_ID, CUSTOMER_ID, AMOUNT, STATUS);
— 只复制客户表的特定列
TABLE fgedu.fgedu_customers, COLUMNS (CUSTOMER_ID, CUSTOMER_NAME, EMAIL);
3.3 组合过滤配置
GGSCI (fgedu.net.cn) 1> edit params ext01
EXTRACT ext01
SETENV (NLS_LANG=”AMERICAN_AMERICA.AL32UTF8″)
USERIDALIAS fgedu_ggadmin
EXTTRAIL /oracle/goldengate/dirdat/et
— 组合行级和列级过滤
TABLE fgedu.fgedu_orders, COLUMNS (ORDER_ID, CUSTOMER_ID, AMOUNT, STATUS), FILTER (STATUS = ‘ACTIVE’ AND AMOUNT > 1000);
— 使用复杂的过滤条件
TABLE fgedu.fgedu_customers, FILTER ((REGION = ‘East’ OR REGION = ‘West’) AND CREATED_DATE > ‘2026-01-01’);
3.4 Replicat进程过滤
GGSCI (fgedu-target.net.cn) 1> edit params rep01
REPLICAT rep01
SETENV (NLS_LANG=”AMERICAN_AMERICA.AL32UTF8″)
USERIDALIAS fgedu_ggadmin
ASSUMETARGETDEFS
— 在目标端进行行级过滤
MAP fgedu.fgedu_orders, TARGET fgedu.fgedu_orders, FILTER (STATUS = ‘ACTIVE’);
— 在目标端进行列级过滤
MAP fgedu.fgedu_customers, TARGET fgedu.fgedu_customers, COLMAP (USEDEFAULTS, PHONE = NULL);
Part04-生产案例与实战讲解
4.1 行级过滤实战
GGSCI (fgedu.net.cn) 1> edit params ext01
EXTRACT ext01
SETENV (NLS_LANG=”AMERICAN_AMERICA.AL32UTF8″)
USERIDALIAS fgedu_ggadmin
EXTTRAIL /oracle/goldengate/dirdat/et
TABLE fgedu.fgedu_orders, FILTER (STATUS = ‘ACTIVE’);
TABLE fgedu.fgedu_customers;
# 2. 重启Extract进程
GGSCI (fgedu.net.cn) 2> stop extract ext01
GGSCI (fgedu.net.cn) 3> start extract ext01
# 3. 测试过滤效果
SQL> — 插入不同状态的订单
SQL> INSERT INTO fgedu.fgedu_orders (order_id, customer_id, amount, status) VALUES (1001, 1, 1000, ‘ACTIVE’);
1 row created.
SQL> INSERT INTO fgedu.fgedu_orders (order_id, customer_id, amount, status) VALUES (1002, 2, 2000, ‘INACTIVE’);
1 row created.
SQL> COMMIT;
Commit complete.
# 4. 验证过滤结果
SQL> — 源端查询
SQL> SELECT * FROM fgedu.fgedu_orders;
ORDER_ID CUSTOMER_ID AMOUNT STATUS
———- ———– ———- ——–
1001 1 1000 ACTIVE
1002 2 2000 INACTIVE
SQL> — 目标端查询
SQL> SELECT * FROM fgedu.fgedu_orders;
ORDER_ID CUSTOMER_ID AMOUNT STATUS
———- ———– ———- ——–
1001 1 1000 ACTIVE
4.2 列级过滤实战
GGSCI (fgedu.net.cn) 1> edit params ext01
EXTRACT ext01
SETENV (NLS_LANG=”AMERICAN_AMERICA.AL32UTF8″)
USERIDALIAS fgedu_ggadmin
EXTTRAIL /oracle/goldengate/dirdat/et
TABLE fgedu.fgedu_customers, COLUMNS (customer_id, customer_name, email);
# 2. 重启Extract进程
GGSCI (fgedu.net.cn) 2> stop extract ext01
GGSCI (fgedu.net.cn) 3> start extract ext01
# 3. 测试过滤效果
SQL> — 插入客户数据
SQL> INSERT INTO fgedu.fgedu_customers (customer_id, customer_name, email, phone, address) VALUES (1, ‘风哥1号’, ‘zhangsan@fgedu.net.cn’, ‘13800138001’, ‘北京市’);
1 row created.
SQL> COMMIT;
Commit complete.
# 4. 验证过滤结果
SQL> — 源端查询
SQL> SELECT * FROM fgedu.fgedu_customers WHERE customer_id = 1;
CUSTOMER_ID CUSTOMER_NAME EMAIL PHONE ADDRESS
———– ————- ——————- ———— ——–
1 风哥1号 zhangsan@fgedu.net.cn 13800138001 北京市
SQL> — 目标端查询
SQL> SELECT * FROM fgedu.fgedu_customers WHERE customer_id = 1;
CUSTOMER_ID CUSTOMER_NAME EMAIL
———– ————- ——————-
1 风哥1号 zhangsan@fgedu.net.cn
4.3 组合过滤实战
GGSCI (fgedu.net.cn) 1> edit params ext01
EXTRACT ext01
SETENV (NLS_LANG=”AMERICAN_AMERICA.AL32UTF8″)
USERIDALIAS fgedu_ggadmin
EXTTRAIL /oracle/goldengate/dirdat/et
TABLE fgedu.fgedu_orders, COLUMNS (order_id, customer_id, amount, status), FILTER (status = ‘ACTIVE’ AND amount > 1000);
# 2. 重启Extract进程
GGSCI (fgedu.net.cn) 2> stop extract ext01
GGSCI (fgedu.net.cn) 3> start extract ext01
# 3. 测试过滤效果
SQL> — 插入不同状态和金额的订单
SQL> INSERT INTO fgedu.fgedu_orders (order_id, customer_id, amount, status) VALUES (1003, 1, 500, ‘ACTIVE’);
1 row created.
SQL> INSERT INTO fgedu.fgedu_orders (order_id, customer_id, amount, status) VALUES (1004, 2, 1500, ‘ACTIVE’);
1 row created.
SQL> INSERT INTO fgedu.fgedu_orders (order_id, customer_id, amount, status) VALUES (1005, 3, 2000, ‘INACTIVE’);
1 row created.
SQL> COMMIT;
Commit complete.
# 4. 验证过滤结果
SQL> — 源端查询
SQL> SELECT * FROM fgedu.fgedu_orders;
ORDER_ID CUSTOMER_ID AMOUNT STATUS
———- ———– ———- ——–
1003 1 500 ACTIVE
1004 2 1500 ACTIVE
1005 3 2000 INACTIVE
SQL> — 目标端查询
SQL> SELECT * FROM fgedu.fgedu_orders;
ORDER_ID CUSTOMER_ID AMOUNT STATUS
———- ———– ———- ——–
1004 2 1500 ACTIVE
Part05-风哥经验总结与分享
5.1 数据过滤最佳实践
- 在源端进行过滤:减少数据传输量,提高复制性能
- 使用简单的过滤条件:避免复杂的表达式,减少CPU消耗
- 合理使用列级过滤:只复制必要的列,减少数据量
- 定期审查过滤策略:确保过滤条件满足业务需求的变化
- 测试过滤效果:验证过滤是否按预期工作,学习交流加群风哥微信: itpux-com
5.2 常见问题与解决方案
- 过滤条件不生效:检查过滤条件的语法,确保使用正确的表达式
- 性能下降:优化过滤条件,避免复杂的计算和函数调用
- 数据不一致:确保过滤条件在源端和目标端保持一致
- 维护困难:使用清晰的命名和注释,便于理解和维护
5.3 性能优化建议
- 使用索引列作为过滤条件,提高过滤效率
- 避免在过滤条件中使用函数,如UPPER()、LOWER()等
- 合理设置过滤条件的顺序,将最具选择性的条件放在前面
- 使用参数化的过滤条件,便于动态调整
- 监控过滤对性能的影响,及时调整过滤策略,风哥提示:定期检查过滤条件的有效性和性能影响
更多视频教程www.fgedu.net.cn
更多学习教程公众号风哥教程itpux_com
from oracle:www.itpux.com
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
