OGG SQLServer到Oracle同步  在线初始化

2024-01-26 17:30

本文主要是介绍OGG SQLServer到Oracle同步  在线初始化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Goldengate进行异构数据库同步时,初始化通常是一个比较困难的问题,OGG自带的Initial Load功能不能进行在线初始化,也就是不能保证数据是读一致性的。也不能与后续的增量数据进行无缝衔接。从SQLServer向Oracle进行数据初始化时我们可以借助中间库来实现。先用SQLServer的备份恢复功能,恢复一个中间库,再用OGG Intial Load功能从中间库中进行数据初始化。中间库是静态数据,这个数据的状态是某个LSN时间点的状态。OGG的CSN其实与SQLServer的LSN是同一个值。然后我们可以在Oracle目标端使用aftercsn功能从中间库LSN时间点开始应用数据。实现无缝初始化。

其他异构数据库的在线初始化也可以参考本文中的方法。

OGG CSN

对于 SQLServer的trail来说它的取值为:

从解释中来看当源端为SQL Server时 Goldengate的CSN取值是从数据库中取的。并且该值会为三段第一个值代表虚拟日志文件号,第二段为虚拟日志中的段号,第三段为日志记录号:

虚拟日志文件号:日志文件中的段号:日志记录号

 

例如:

0X00000d7e:0000036b:01bd

0000003454:0000000875:00445

0Xd7e:36b:1bd

3454:875:445

3454000000087500445

不同的SQL Server版本可能返回给OGG的CSN值不同,大体会为上面几种。

SQL Server LSN号

SQL Server LSN(Log Sequence Number),这个LSN也是会为三段。

  • the first part is the VLF sequence number.
  • the middle part is the offset to the log block
  • the last part is the slot number inside the log block

LSN与CSN的关系

OGG官方文档中并没有说明SQLServer LSN与CSN有什么关系。但从这他们两个的结构来看像是同一个值。

 

分析OGG trail文件中的trail并用APEX SQL分析SQL Server 的日志,分析同一条数据变化进行对比:

OGG trail中LOGCSN:

SQLServer中LSN:

 

 

提取CSN和LSN:

CSN: 00000025:0000013d:0003

LSN: 00000025:0000013D:0002

 

  1. LSN中的字母是大写的,而CSN中的值为小写。(该值为16进制值,可以忽略大小写)
  2. 最后一段CSN要比LSN大1个值。(实际测试中可以实验一下看看取哪个值作为aftercsn值比较合适)

在MOS文章中也说到了LSN和CSN是一样的值。

Oracle GoldenGate Best Practices: Instantiation from a SQL Server Source Database (Doc ID 1310946.1)

 

SQLServer在线初始化

使用OGG把SQLServer的数据同步到Oracle时面临的一个问题就是数据如何在线初始化。如果可以停业务那么可以使用initial Load的方式,采用离线初始化的方式。如果业务不能停,那么在线初始化就是个问题。

我们可以结合SQLServer 备份创建一个中间库,然后使用这个静止的中间库中进行数据库初始化。这样初始化到目标端的数据是状态一致的。然后在目标端启动应用进程时通过aftercsn的方式启动。 其中csn的值就是中间库恢复时的lsn。

 

参考:

https://docs.oracle.com/goldengate/1212/gg-winux/GWUAD/wu_csn.htm#GWUAD752

http://rusanu.com/2012/01/17/what-is-an-lsn-log-sequence-number/
Oracle GoldenGate Best Practices: Instantiation from a SQL Server Source Database (Doc ID 1310946.1)

 

山东神仓信息技术有限公司   专业技术服务,值得您信赖!

技术交流请加Goldengate技术交流群:315085903

 

 

这篇关于OGG SQLServer到Oracle同步  在线初始化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/647525

相关文章

MySQL中删除重复数据SQL的三种写法

《MySQL中删除重复数据SQL的三种写法》:本文主要介绍MySQL中删除重复数据SQL的三种写法,文中通过代码示例讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下... 目录方法一:使用 left join + 子查询删除重复数据(推荐)方法二:创建临时表(需分多步执行,逻辑清晰,但会

Oracle的to_date()函数详解

《Oracle的to_date()函数详解》Oracle的to_date()函数用于日期格式转换,需要注意Oracle中不区分大小写的MM和mm格式代码,应使用mi代替分钟,此外,Oracle还支持毫... 目录oracle的to_date()函数一.在使用Oracle的to_date函数来做日期转换二.日

详谈redis跟数据库的数据同步问题

《详谈redis跟数据库的数据同步问题》文章讨论了在Redis和数据库数据一致性问题上的解决方案,主要比较了先更新Redis缓存再更新数据库和先更新数据库再更新Redis缓存两种方案,文章指出,删除R... 目录一、Redis 数据库数据一致性的解决方案1.1、更新Redis缓存、删除Redis缓存的区别二

oracle数据库索引失效的问题及解决

《oracle数据库索引失效的问题及解决》本文总结了在Oracle数据库中索引失效的一些常见场景,包括使用isnull、isnotnull、!=、、、函数处理、like前置%查询以及范围索引和等值索引... 目录oracle数据库索引失效问题场景环境索引失效情况及验证结论一结论二结论三结论四结论五总结ora

Mysql 中的多表连接和连接类型详解

《Mysql中的多表连接和连接类型详解》这篇文章详细介绍了MySQL中的多表连接及其各种类型,包括内连接、左连接、右连接、全外连接、自连接和交叉连接,通过这些连接方式,可以将分散在不同表中的相关数据... 目录什么是多表连接?1. 内连接(INNER JOIN)2. 左连接(LEFT JOIN 或 LEFT

Oracle Expdp按条件导出指定表数据的方法实例

《OracleExpdp按条件导出指定表数据的方法实例》:本文主要介绍Oracle的expdp数据泵方式导出特定机构和时间范围的数据,并通过parfile文件进行条件限制和配置,文中通过代码介绍... 目录1.场景描述 2.方案分析3.实验验证 3.1 parfile文件3.2 expdp命令导出4.总结

mysql重置root密码的完整步骤(适用于5.7和8.0)

《mysql重置root密码的完整步骤(适用于5.7和8.0)》:本文主要介绍mysql重置root密码的完整步骤,文中描述了如何停止MySQL服务、以管理员身份打开命令行、替换配置文件路径、修改... 目录第一步:先停止mysql服务,一定要停止!方式一:通过命令行关闭mysql服务方式二:通过服务项关闭

SQL Server数据库磁盘满了的解决办法

《SQLServer数据库磁盘满了的解决办法》系统再正常运行,我还在操作中,突然发现接口报错,后续所有接口都报错了,一查日志发现说是数据库磁盘满了,所以本文记录了SQLServer数据库磁盘满了的解... 目录问题解决方法删除数据库日志设置数据库日志大小问题今http://www.chinasem.cn天发

mysql主从及遇到的问题解决

《mysql主从及遇到的问题解决》本文详细介绍了如何使用Docker配置MySQL主从复制,首先创建了两个文件夹并分别配置了`my.cnf`文件,通过执行脚本启动容器并配置好主从关系,文中还提到了一些... 目录mysql主从及遇到问题解决遇到的问题说明总结mysql主从及遇到问题解决1.基于mysql

MySQL的索引失效的原因实例及解决方案

《MySQL的索引失效的原因实例及解决方案》这篇文章主要讨论了MySQL索引失效的常见原因及其解决方案,它涵盖了数据类型不匹配、隐式转换、函数或表达式、范围查询、LIKE查询、OR条件、全表扫描、索引... 目录1. 数据类型不匹配2. 隐式转换3. 函数或表达式4. 范围查询之后的列5. like 查询6