本发明涉及数据库技术领域,尤其涉及一种基于ORACLE多节点RAC日志基于SCN对齐读取的方法及系统。
背景技术:
ORACLE RAC由两个或两个以上实例组成,且共享同一个存储中的数据库数据文件;基于RAC的异构同步搭建时,传统的方法必须要求节点之间系统时间是对齐的,因为在抽取每个RAC节点日志时,需要基于时间戳来对齐每个节点上的日志,把节点之间相同时间戳的日志组合在一起再按SCN排序以后方可进行日志解析。但是,每个RAC集群中的任一实例都有其单独的日志管理系统并处于不同实体服务器,且各自拥有不同的系统时间。如图1所示,当时间同步服务未部署,或者节点之间系统时间出现误差的情况下,如何排序节点之间日志中的日志来获取准确的事务执行顺序,成为RAC数据库同步到其他数据库管理系统(异构数据库同步系统)需要解决的一个问题。
技术实现要素:
有鉴于此,本发明提出一种基于ORACLE多节点RAC日志基于SCN对齐读取的方法及系统。
一种基于ORACLE多节点RAC日志基于SCN对齐读取的方法,其包括如下步骤:
S1、建立一个合并SCN链表,SCN链表上包含SCN值以及每个SCN值对应的节点掩码标记;
S2、每个RAC节点上的日志读取线程,在读取日志时,每当日志集满一个时间戳,则按照SCN值排序,将排序后的日志添加到步骤S1中创建的SCN链表中,将SCN链表中所有SCN小于等于SCN序列中最大SCN值对应的设置该节点掩码标记,标识此节点上对应此SCN的日志已读取完成;
S3、当发现SCN链表第一个SCN节点上已读标记掩码设置已包含所有RAC节点时,从SCN链表上摘下SCN节点对应的日志数据,进行日志分析发送到目的端。
在本发明所述的基于ORACLE多节点RAC日志基于SCN对齐读取的方法中,
所述步骤S1包括:
分别在源端、目的端部署数据库同步系统,源端仅在RAC其中一个节点部署;
创建一个合并SCN链表,SCN链表上包含SCN值以及每个SCN值对应的节点掩码标记,并以SCN值为顺序排列。
在本发明所述的基于ORACLE多节点RAC日志基于SCN对齐读取的方法中,
所述步骤S2包括:
对应每个RAC节点,生成日志读取线程,读取每个RAC节点的日志;
判读每个RAC节点的日志是否集满一个时间戳,即读取到下一个日志操作完成时间变化为止;
每个RAC节点将同一时间戳完成的日志,按照SCN值进行排序;
每个RAC节点分别将排序后的日志加入SCN链表,并设置各自节点在此SCN值上已读取的掩码标记。
在本发明所述的基于ORACLE多节点RAC日志基于SCN对齐读取的方法中,
所述步骤S3包括:
通过每个RAC节点分别将排序后的日志加入SCN链表,并设置各自节点在此SCN值上已读取的掩码标记,以引起SCN链表状态变更;
判读SCN链表第一个SCN节点掩码标记是否已完全设置,如果未完成则继续监测SCN链表状态变更,如果已完成则进入下一步;
从SCN链表中删除第一个SCN节点;
将删除的SCN节点进行日志分析后发送到目的端。
本发明还提供一种基于ORACLE多节点RAC日志基于SCN对齐读取的系统,其包括如下步骤:
链表创建单元,用于建立一个合并SCN链表,SCN链表上包含SCN值以及每个SCN值对应的节点掩码标记;
排序单元,用于每个RAC节点上的日志读取线程,在读取日志时,每当日志集满一个时间戳,则按照SCN值排序,将排序后的日志添加到链表创建单元中创建的SCN链表中,将SCN链表中所有SCN小于等于SCN序列中最大SCN值对应的设置该节点掩码标记,标识此节点上对应此SCN的日志已读取完成;
分析发送单元,用于当发现SCN链表第一个SCN节点上已读标记掩码设置已包含所有RAC节点时,从SCN链表上摘下SCN节点对应的日志数据,进行日志分析发送到目的端。
在本发明所述的基于ORACLE多节点RAC日志基于SCN对齐读取的方法中,
所述链表创建单元包括:
分别在源端、目的端部署数据库同步系统,源端仅在RAC其中一个节点部署;
创建一个合并SCN链表,SCN链表上包含SCN值以及每个SCN值对应的节点掩码标记,并以SCN值为顺序排列。
在本发明所述的基于ORACLE多节点RAC日志基于SCN对齐读取的方法中,
所述排序单元包括:
对应每个RAC节点,生成日志读取线程,读取每个RAC节点的日志;
判读每个RAC节点的日志是否集满一个时间戳,即读取到下一个日志操作完成时间变化为止;
每个RAC节点将同一时间戳完成的日志,按照SCN值进行排序;
每个RAC节点分别将排序后的日志加入SCN链表,并设置各自节点在此SCN值上已读取的掩码标记。
在本发明所述的基于ORACLE多节点RAC日志基于SCN对齐读取的方法中,
所述分析发送单元包括:
通过每个RAC节点分别将排序后的日志加入SCN链表,并设置各自节点在此SCN值上已读取的掩码标记,以引起SCN链表状态变更;
判读SCN链表第一个SCN节点掩码标记是否已完全设置,如果未完成则继续监测SCN链表状态变更,如果已完成则进入下一步;
从SCN链表中删除第一个SCN节点;
将删除的SCN节点进行日志分析后发送到目的端。
实施本发明提供的基于ORACLE多节点RAC日志基于SCN对齐读取的方法及系统与现有技术相比具有以下有益效果:
能够有效地解决当时间同步服务未部署,或者节点之间系统时间出现误差的情况下,如何排序节点之间日志中的日志来获取准确的事务执行顺序的技术问题。
附图说明
图1是现有技术中RAC的异构同步搭建时,节点之间系统时间未对其齐的示意图;
图2是基于ORACLE多节点RAC日志基于SCN对齐读取的方法流程图。
具体实施方式
如图2所示,一种基于ORACLE多节点RAC日志基于SCN对齐读取的方法,其包括如下步骤:
S1、建立一个合并SCN链表,SCN链表上包含SCN值以及每个SCN值对应的节点掩码标记;
建立一个合并SCN链表是为了合并多个RAC节点的日志,其中SCN值必须为严格的递增序列、节点掩码标记用来记录哪些节点对应此SCN的日志已被读取。
S2、每个RAC节点上的日志读取线程,在读取日志时,每当日志集满一个时间戳,则按照SCN值排序(设此SCN序列中最大SCN值为SCNmax),将排序后的日志添加到步骤S1中创建的SCN链表中,将SCN链表中所有SCN小于等于SCNmax对应的设置该节点掩码标记,标识此节点上对应此SCN的日志已读取完成;
备注:集满一个时间戳,即下一个操作的完成时间data_time已改变,同一操作完成时间的所有日志集合。
特别需要注意的是,每个RAC节点的日志合并到SCN链表之前,需要按照SCN顺序增长的方式加入到SCN链表中;并且,当节点的某个SCN值SCNX进入SCN链表后,需要把SCN链表中所有SCN值小于SCNX对应设置该节点SCN已读掩码标记。
S3、当发现SCN链表第一个SCN节点上已读标记掩码设置已包含所有RAC节点时,从SCN链表上摘下SCN节点对应的日志数据,进行日志分析发送到目的端。
在本发明实施例中,源端为RAC的数据库实时同步系统至少包含日志捕获模块、传输模块、执行模块,日志捕获模块中又包含了读取、分析功能。本实施例主要应用于RAC日志分析,以RAC日志中标识的改变日期时间作为合并标志,再按SCN排序,最后将排序后的日志用于数据库的同步。
在本发明所述的基于ORACLE多节点RAC日志基于SCN对齐读取的方法中,
所述步骤S1包括:
分别在源端、目的端部署数据库同步系统,源端仅在RAC其中一个节点部署;
创建一个合并SCN链表,SCN链表上包含SCN值以及每个SCN值对应的节点掩码标记,并以SCN值为顺序排列。
在本发明所述的基于ORACLE多节点RAC日志基于SCN对齐读取的方法中,
所述步骤S2包括:
对应每个RAC节点,生成日志读取线程,读取每个RAC节点的日志;
判读每个RAC节点的日志是否集满一个时间戳,即读取到下一个日志操作完成时间变化为止;
每个RAC节点将同一时间戳完成的日志,按照SCN值进行排序;
每个RAC节点分别将排序后的日志加入SCN链表,并设置各自节点在此SCN值上已读取的掩码标记。
在本发明所述的基于ORACLE多节点RAC日志基于SCN对齐读取的方法中,
所述步骤S3包括:
通过每个RAC节点分别将排序后的日志加入SCN链表,并设置各自节点在此SCN值上已读取的掩码标记,以引起SCN链表状态变更;
判读SCN链表第一个SCN节点(SCNmin)掩码标记是否已完全设置,如果未完成则继续监测SCN链表状态变更,如果已完成则进入下一步;
从SCN链表中删除第一个SCN节点(SCNmin);
将删除的SCN节点进行日志分析后发送到目的端。
本发明还提供一种基于ORACLE多节点RAC日志基于SCN对齐读取的系统,其包括如下步骤:
链表创建单元,用于建立一个合并SCN链表,SCN链表上包含SCN值以及每个SCN值对应的节点掩码标记;
排序单元,用于每个RAC节点上的日志读取线程,在读取日志时,每当日志集满一个时间戳,则按照SCN值排序,将排序后的日志添加到链表创建单元中创建的SCN链表中,将SCN链表中所有SCN小于等于SCN序列中最大SCN值对应的设置该节点掩码标记,标识此节点上对应此SCN的日志已读取完成;
分析发送单元,用于当发现SCN链表第一个SCN节点上已读标记掩码设置已包含所有RAC节点时,从SCN链表上摘下SCN节点对应的日志数据,进行日志分析发送到目的端。
在本发明所述的基于ORACLE多节点RAC日志基于SCN对齐读取的方法中,
所述链表创建单元包括:
分别在源端、目的端部署数据库同步系统,源端仅在RAC其中一个节点部署;
创建一个合并SCN链表,SCN链表上包含SCN值以及每个SCN值对应的节点掩码标记,并以SCN值为顺序排列。
在本发明所述的基于ORACLE多节点RAC日志基于SCN对齐读取的方法中,
所述排序单元包括:
对应每个RAC节点,生成日志读取线程,读取每个RAC节点的日志;
判读每个RAC节点的日志是否集满一个时间戳,即读取到下一个日志操作完成时间变化为止;
每个RAC节点将同一时间戳完成的日志,按照SCN值进行排序;
每个RAC节点分别将排序后的日志加入SCN链表,并设置各自节点在此SCN值上已读取的掩码标记。
在本发明所述的基于ORACLE多节点RAC日志基于SCN对齐读取的方法中,
所述分析发送单元包括:
通过每个RAC节点分别将排序后的日志加入SCN链表,并设置各自节点在此SCN值上已读取的掩码标记,以引起SCN链表状态变更;
判读SCN链表第一个SCN节点掩码标记是否已完全设置,如果未完成则继续监测SCN链表状态变更,如果已完成则进入下一步;
从SCN链表中删除第一个SCN节点;
将删除的SCN节点进行日志分析后发送到目的端。
实施本发明提供的基于ORACLE多节点RAC日志基于SCN对齐读取的方法及系统与现有技术相比具有以下有益效果:
能够有效地解决当时间同步服务未部署,或者节点之间系统时间出现误差的情况下,如何排序节点之间日志中的日志来获取准确的事务执行顺序的技术问题。
可以理解的是,对于本领域的普通技术人员来说,可以根据本发明的技术构思做出其它各种相应的改变与变形,而所有这些改变与变形都应属于本发明权利要求的保护范围。