开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

OGG无法采集Oracle11g由触发器写入的表的数据

1. 背景

  最近公司准备做MySQL和Oracle的表结构变更、数据变更同步到数据湖, MySQL通过canal采集拿到DDL已实现,Oracle的DDL OGG采集不到,只有表的最新状态的元数据,没有办法实现,且ogg表结构变动了,ogg不会触发数据发送,只有当有数据变动才会联带schema一起发到Kafka,因此思量一会儿有以下三个方案:

1.1 debezium采集

  换成debezium采集,但是Debezium采集产生的redo_log文件很大,并且是1分钟一次扫一次,产生大量的日志,隔一段时间会占用很大的磁盘空间,甚至会影响数据库本身的性能

1.2 Oracle审计日志

  Oracle审计日志需要开启Oracle审计开关,同时药重启Oracle服务器,查询审计日志非常慢,实时处理不太符合

SELECT USERNAME, OBJ_NAME, ACTION_NAME, SQL_TEXT, TIMESTAMP
FROM DBA_AUDIT_TRAIL
WHERE OBJ_NAME = 'TABLE_NAME'
AND ACTION_NAME = 'ALTER TABLE'
ORDER BY TIMESTAMP desc;

1.3 自定义触发器

  于是我自定义一个触发器来实现,新建一张DDL_CHANGE_LOG表, 用来收集DDL语句,然后定义触发器,把ALTER\COMMENT\RENAME的操作都捕捉到DDL语句,然后保存到LOG表,然后让ogg来采集这张表的数据,这样我就可以拿到DDL语句。

1.3.1 DDL_CAHNG_LOG表

CREATE TABLE ddl_change_log (
  id varchar2(50) default SYS_GUID() not null primary key,
  db_name VARCHAR2(100),
  table_name VARCHAR2(100),
  ddl_sql VARCHAR2(4000),
  ddl_timestamp TIMESTAMP
);

1.3.2 触发器

-- 创建触发器
CREATE OR REPLACE TRIGGER ddl_trigger 
AFTER ALTER OR RENAME OR COMMENT ON SCHEMA 
DECLARE
  v_db_name VARCHAR2(100) := SYS_CONTEXT('USERENV', 'CURRENT_SCHEMA');
  v_table_name VARCHAR2(100);
  v_ddl_sql VARCHAR2(1024);
  v_sql_out ORA_NAME_LIST_T;
BEGIN 
  v_table_name := ORA_DICT_OBJ_NAME;
  FOR i IN 1..ORA_SQL_TXT(v_sql_out) LOOP
      v_ddl_sql := v_ddl_sql || v_sql_out(i);
  END LOOP;

  INSERT INTO ddl_change_log(db_name, table_name, ddl_sql, ddl_timestamp)
  VALUES(v_db_name, v_table_name, v_ddl_sql, SYSTIMESTAMP);
END;

1.3.3 测试以及问题

  然后测试,我对其他表新加了字段,然后LOG表正常写入了ALTER语句,但是我的FLINK任务消费Kafka并没有受到消息,然后我又直接往LOG表手动加入了一条数据,发现任务接收到了该条数据,所以这两者之间的区别还没有太清楚,所以还没找到啥原因,估计要从OGG采集原理上了解下,不知道你们各位大佬有何思路?

展开
收起
1640174593203650 2023-08-22 11:21:59 161 0
1 条回答
写回答
取消 提交回答
  • 以下是 OGG 无法采集 Oracle 11g 由触发器写入的表的数据的可能原因:

    OGG 配置不正确。
    触发器配置不正确。
    系统配置不正确。
    数据库配置不正确。
    为了解决 OGG 无法采集 Oracle 11g 由触发器写入的表的数据的问题,需要逐一排查以上原因,并根据实际情况进行相应的调整和配置。

    2023-09-19 11:08:22
    赞同 展开评论 打赏

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

相关电子书

更多
PostgresChina2018_樊文凯_ORACLE数据库和应用异构迁移最佳实践 立即下载
PostgresChina2018_王帅_从Oracle到PostgreSQL的数据迁移 立即下载
Oracle云上最佳实践 立即下载

相关镜像