暂无图片
goldengate 抽取进程报错
我来答
分享
有理想的咸鱼
2024-02-27
goldengate 抽取进程报错

ogg 在同步mysql时,mysql必须要有主键或者唯一约束么?我在做测试的时候,mysql 没建主键和唯一约束,但是抽取进程直接报错

2024-02-27 13:58:40 ERROR OGG-00146 Call to VAMRead returned with error status 600: VAM Client Report <CAUSE OF FAILURE : Column count for
the current record does not match with the column count of the table metadata for table oggtest.test

还是所有非oracle数据库,都需要有主键或唯一约束才能抽取呢

我来答
添加附件
收藏
分享
问题补充
4条回答
默认
最新
yBmZlQzJ

在使用OGG同步MySQL时,并非一定要求MySQL表必须有主键或唯一约束,但在实际操作中,没有主键或唯一约束可能会导致问题。

对于OGG在同步过程中对MySQL表的要求,虽然技术上OGG可以处理没有主键的表,但这通常不被推荐。没有主键的表可能会引起性能问题和数据一致性问题,因为OGG默认会将一行数据中的所有列拼接起来作为唯一键,这可能还是会出现重复数据导致的问题。

对于非Oracle数据库,比如MySQL、SQL Server等,在使用OGG进行数据抽取时,同样最好是有主键或唯一约束。这是因为OGG的工作原理是通过日志捕获技术来实时增量地集成数据,如果没有明确的主键或唯一性索引,就可能无法准确地追踪记录的变化,尤其是在有更新操作的情况下。

总之,尽管OGG理论上可以同步没有主键或唯一约束的表,但为了避免潜在的问题,最佳实践是在配置OGG同步前确保涉及的表具备合适的主键或唯一性索引。

暂无图片 评论
暂无图片 有用 1
打赏 0
有理想的咸鱼
题主
2024-02-27
是的,我也是这么理解的,但是在我的这个环境里就不行,有唯一索引的时候,我insert 正常同步,然后我drop 了索引,抽取进程直接就停了。。。我就不明白了
lianR

Oracle  GoldenGate  (OGG)  抽取进程确实需要在源表上有主键或唯一约束。这是因为OGG需要这些约束来唯一地标识每一行数据,以便在目标数据库中进行正确的插入、更新或删除操作。

如果源表没有主键或唯一约束,OGG可能无法正确地识别和处理数据变化,从而导致数据同步错误或数据不一致。

所以,不仅是MySQL,对于所有的数据库类型,OGG都需要有主键或唯一约束才能进行数据抽取。如果源表没有主键或唯一约束,建议你添加一个,或者使用其他方式(如使用ROWID)来唯一标识每一行数据。

暂无图片 评论
暂无图片 有用 3
打赏 0
有理想的咸鱼
题主
2024-02-27
抽取进程不应该因为有没有主键或唯一约束,应该是复制进程要求,才能保证目标端数据的准确性,抽取我的理解是解析日志来获取变化的数据,这里本身就不需要确认是否唯一,而复制进程却需要定位到具体数据,才需要唯一约束,如果我的这个问题出现在复制进程,我还能理解,但是却出现在抽取进程
Thomas

从错误来看,应该是column count不一致。源数据的表定义在哪里,用def文件么

暂无图片 评论
暂无图片 有用 0
打赏 0
有理想的咸鱼
题主
2024-02-29
我出问题的是抽取进程啊,也不需要def啊。。。。。
魔术师

你的表结构是不是发生了变化?

暂无图片 评论
暂无图片 有用 0
打赏 0
有理想的咸鱼
题主
2024-03-01
不是,我自己做的测试,有约束的时候没问题,删除唯一索引,就报错了
回答交流
Markdown


请输入正文
提交
相关推荐
JSON_OBJECTAGG,请问下,有没有跟这个函数类型功能的函数或方法?
回答 3
已采纳
看看这个例子:mysql&gt;SELECToid,attribute,valueFROMt3;±±±|oid|attribute|value|±±±|2|color|red||2|fabric|si
MySQL load data local infile 导入5kw数据太慢要怎么解决?
回答 2
1、去掉索引,导入完再建索引。2、如果没有备库,先关闭binlog。3、把双1参数调成异步刷盘,充分利用磁盘io。
如何利用/etc/init.d/mysql1和mariadb不同实例服务名称配置自启动
回答 2
已采纳
首先,你需要将两个MySQL和MariaDB实例的配置文件分别修改为以下内容:对于MySQL5实例:复制代码[mysqld]basedir/usr/local/mysqldatadir/var/lib
mysql5.7实例每次异常关闭后,重启报PID file already exists
回答 1
已采纳
判断一下文件是否存在,存在就删除或者直接在启动脚本里先删除一遍pid文件
MySQL 只单主写,什么配置的服务器大概什么样的负载量?
回答 1
MySQL只单主写,什么配置的服务器大概什么样的负MySQL只单主写,服务器的负载量取决于多个因素,例如硬件配置、数据库表的设计和数据量等。一般来说,如果服务器的硬件配置较低,那么它的负载量也会相应较
MySQL索引的创建原则
回答 2
已采纳
最适合创建索引的列是出现在WHERE或ON子句中的列,或连接子句中的列而不是出现在SELECT关键字后的列。索引列的基数越大,数据区分度越高,索引的效果越好。对于字符串进行索引,应该制定一个前缀长度,
MySQL 主从切换后主库的Executed_Gtid_Set 有两条信息,一条本地的uuid:1-3 一条原主库的信息uuid:1-3333 现在从库配置同步失败?
回答 2
https://cloud.tencent.com/developer/article/1626033这篇文章能够帮助到你
MySQL buffer pool的 free size 越来越小,正常吗?
回答 1
可能的。不断有数据加载到内存中。你的buffer是默认值,太小了请问这个监控工具是什么?
MYSQL 8.0.32 为什么ROOT 用户授权失败?
回答 3
首先,mysql中用户由两部分组成:用户名和白名单信息。从报错信息来看dkapp@’%‘这样的用户并不存在,所以提示你:不允许通过grant语句创建用户,正确的做法如下:1.先创建用户dkapp@’%
通过sql文件能看出是哪个版本的mysql导出的吗?
回答 1
可以的,mysqldump导出的文件开头有记录版本信息,比如表示mysqldump版本10.13(对应mysql5.7.33)server(数据库)版本:5.7.38log