如何同步内存数据和oracle数据库同步数据

查看: 4508|回复: 3
sql server2005的订阅与发布功能实现数据同步效果
TA的每日心情开心6&小时前签到天数: 221 天[LV.7]常住居民III
数据库同步方式有很多种,这里以SQL Server 2005 为例利用数据库发布和订阅的方式来演示数据库的同步技术。由于就有一台计算机,只能在同一个服务器下两个不同的数据库之间进行数据同步进行演示。
首先我们在SQL Server 中建立两数据库 Lx_Data1 和 LxData2,并在两数据库中分别建立表t_student,脚本如下:CREATE TABLE t_student
(
Id INT NOT NULL,
Name NVARCHAR(10) NULL,
Age TINYINT NULL,
School NVARCHAR (20) NULL,
Class NVARCHAR (10) NULL,
Score FLOAT NULL,
CONSTRAINT PK_Student_Id PRIMARY KEY CLUSTERED (Id)
)复制代码发布订阅分为两个步骤:1、发布。2订阅。首先在数据源数据库服务器上对需要同步的数据进行发布,然后在目标数据库服务器上对上述发布进行订阅。发布可以发布一张表的部分数据,也可以对整张表进行发布,还可以是存储过程等等。下面来演示一下这两个操作过程:发布
注意:发布的时候SQL Server 需要有实际的服务器名称才能连接到服务器。不支持通过服务器别名、IP地址或者其他备用名称进行连接。因此如果当前的SQL Server的连接是IP地址的话,最好断开连接,以实际的服务器名称重新进行登录。
关于这个可以看我另外一个文章
发布的具体过程如下:
1、展开SQL Server 2008 服务器下的 【复制】 节点,会发现有【本地发布】和【本地订阅】两个节点,右击【本地发布】节点,选择【新建发布】:
4412.jpg (10.12 KB, 下载次数: 32)
15:06 上传
2、如果服务器第一次进行发布设置,会弹出【发布向导】对话框,设置【分发服务器】,选择第一个:
4311.jpg (58.62 KB, 下载次数: 31)
15:06 上传
3、点击【下一步】会询问我们【启动SQL SERVER代理】的方式,由于是演示,我选则的是 手动方式:
1840.jpg (51.98 KB, 下载次数: 29)
15:06 上传
4、点击【下一步】,会出现设置【快照文件夹】对话框,我们选择默认:
0290.jpg (59.12 KB, 下载次数: 34)
15:06 上传
5、点击【下一步】,选择要发布的数据库,我们选择 数据库 Lx_Data1:
2537.jpg (46.38 KB, 下载次数: 39)
15:06 上传
6、点击【下一步】,选择【发布类型】,我们选择 【事务发布】。这里要说明一下如果您对此对话框里面的各种发布类型不是很理解,请点击这里
4292.jpg (83.42 KB, 下载次数: 34)
15:06 上传
7、点击【下一步】,选择数据库中的发布对象,我们的这个例子数据库只有一个表 t_student,我们选择这个表:
4285.jpg (45.16 KB, 下载次数: 30)
15:06 上传
以后有新的表和数据库时可以再添加的
8、点击【下一步】,进入【筛选表行】对话框:
2251.jpg (49.69 KB, 下载次数: 29)
15:06 上传
9、如果需要筛选表行点击【添加】就会出现如下的筛选器对话框:
3394.jpg (51.08 KB, 下载次数: 32)
15:06 上传
10、我们不做筛选,要全部同步,点击【取消】后,直接【下一步】,进入【快照代理】设置对话框:
4430.jpg (52.14 KB, 下载次数: 33)
15:06 上传
11、这里有两个选择一个是立即创建快照,一个是指定一个计划(比如可以指定xxx天xxx时间运行),我们选择第一个,并点击【下一步】进入【代理的安全性】设置:
2832.jpg (51.17 KB, 下载次数: 29)
15:06 上传
12、点击【安全性设置】,我们选择 SQL SERVER 用户:
4120.jpg (51.43 KB, 下载次数: 35)
15:06 上传
13、点击【确定】 后,返回 【代理安全性】设置对话框,继续点击【下一步】:
3349.jpg (36.16 KB, 下载次数: 30)
15:06 上传
14、点击【下一步】,我们给发布进行命名为:“Lx_Data1_Publisher” :
2063.jpg (84.3 KB, 下载次数: 34)
15:06 上传
15、点击【完成】,就会创建发布,并会显示创建发布的结果:
4040.jpg (52.9 KB, 下载次数: 32)
15:06 上传
发布完成后,我们要进行订阅,过程如下:
1、右键点击【本地订阅】节点,打开,【新建订阅向导】对话框:
1475.jpg (38.6 KB, 下载次数: 34)
15:06 上传
2、我们选择发布服务器 Lx-PC 中的数据库发布 Lx_Data1_Publisher,然后点击【下一步】:
5140.jpg (57.8 KB, 下载次数: 28)
15:06 上传
3、在【分发代理位置】对话框中,选择第一项,点击【下一步】:
5883.jpg (47.85 KB, 下载次数: 34)
15:06 上传
4、在【订阅服务器】对话框中,我们选择订阅数据库 Lx_Data2,然后点击【下一步】:
0219.jpg (54.44 KB, 下载次数: 29)
15:06 上传
5、在【分发代理安全性】对话框中,我们点击“...”,进入安全性设置,我们选则的是 SQL 帐户:
0943.jpg (70.44 KB, 下载次数: 38)
15:06 上传
6、输入帐号和密码后,点击【确定】,返回【安全性设置】对话框,点击【下一步】:
3533.jpg (41.81 KB, 下载次数: 33)
15:06 上传
7、我们选择默认的“连续运行”,点击【下一步】,进入【初始化订阅】对话框:
5529.jpg (50.29 KB, 下载次数: 30)
15:06 上传
8、初始化时间,选择 “立即” 初始化,点击【下一步】:
1533.jpg (37.46 KB, 下载次数: 33)
15:06 上传
9、不创建脚本文件,点击【下一步】:
2287.jpg (61.2 KB, 下载次数: 33)
15:06 上传
10、点击【完成】,就会创建订阅,并显示创建结果:
0981.jpg (43.1 KB, 下载次数: 30)
15:06 上传
至此,服务器的发布和订阅都已经创建成功了。我们来测试一下,此时两个数据库表中都没有任何数据,向Lx_Data1中的 t_student 表中插入两条数据:use Lx_Data1
go
insert into t_student values (1,'史泰龙',22,'纽约小学','一班',92)
insert into t_student values (2,'施瓦辛格',23,'华盛顿小学','一班',90)复制代码然后我们查看两个数据库的结果:use Lx_Data1
go
select * from t_student
use Lx_Data2
go
select * from t_student复制代码结果我们会发现数据已经同步了,如下图:
1515.jpg (20.85 KB, 下载次数: 28)
15:06 上传
&&&&&&&&&&&&&&&&
TA的每日心情开心6&小时前签到天数: 221 天[LV.7]常住居民III
这个做数据同步与备份还是非常好的,大家可以动手试试的。
&&&&&&&&&&&&&&&&
TA的每日心情开心6&小时前签到天数: 221 天[LV.7]常住居民III
数据库复制涉及
  发布服务器:数据的来源服务器,维护源数据,决定哪些数据将被分发,检测哪些数据发生了修改,并将这些信息提交给分发服务器。
  分发服务器:分发服务器负责把从发布服务器拿来的数据传送至订阅服务器。
  订阅服务器:订阅服务器就是发布服务器数据的副本,接收维护数据。
  订阅类型
  推订阅:推订阅是指由发布服务器将所有发生修改过的数据复制给订阅者,这种在数据同步性价比较高的场合,推荐使用推订阅。
  拉订阅:拉订阅是指订阅服务器在经过一段时间就会向发布服务器要求复制出版数据库发生的变化的数据。
  发布,分发,订阅可以部署在独立的服务器上面也可以部署在一台sql server 上面,然而分开部署肯定能提高性能。
  复制代理:
  (1)快照代理
  快照代理在分发者上创建并存储快照文件,任务是:在分发数据库中准备已发布表的架构和初始数据以及其他对象、存储快照文件并记录出版数据库和订阅服务器之间的同步信息,快照代理运行在分发者服务器上,并与出版者相连接。每一个出版物都有自己的快照代理。与各种类型的复制一起使用。
  (2)日志阅读代理
  日志读取器代理与事务性复制一起使用。它将发布服务器上的事务日志中标记为复制的事务移至分发数据库中。使用事务性复制发布的每个数据库都有自己的日志读取器代理,该代理运行于分发服务器上并与发布服务器连接(分发服务器与发布服务器可以是同一台计算机)。
  (3)分发代理
  分发代理与快照复制和事务性复制一起使用。它将初始快照应用于订阅服务器,并将分发数据库中保存的事务移至订阅服务器。分发代理既可以运行于分发服务器(对于推送订阅),也可运行于订阅服务器(对于请求订阅)。
  (4)合并代理:& &
  合并代理与合并复制一起使用。它将初始快照应用于订阅服务器,并移动和协调所发生的增量数据更改。每个合并订阅都有自己的合并代理,该代理同时连接到发布服务器和订阅服务器并对它们进行更新。合并代理既可以运行于分发服务器(对于推送订阅),也可以运行于订阅服务器(对于请求订阅)。默认情况下,合并代理将订阅服务器上的更改上载到发布服务器,然后将发布服务器上的更改下载到订阅服务器。
  (5)队列阅读代理
  队列读取器代理与包含排队更新选项的事务性复制一起使用。该代理运行于分发服务器,并将订阅服务器上所做更改移回至发布服务器。与分发代理和合并代理不同,只有一个队列读取器代理的实例为给定分发数据库的所有发布服务器和发布提供服务。
  复制类型:
  SQL SEVER提供了三大类复制类型:快照复制、事务复制、合并复制。可以在实际应用中使用相应的复制类型,每一种复制类型都在不同程序上实现数据的一致性。
  (1)快照复制
  如其名字所言,快照复制指在某一时刻给出版数据库中的出版数据照相,然后将数据复制到订阅者服务器。快照复制实现较为简单,其所复制的只是某一时刻数据库的瞬间数据,快照复制是将整个出版物传送给订阅者,就是在某一时刻将出版数据进行一次“照相”,生成一个描述出版数据库中数据的当前状态的一个文件,然后在相应的时间将其复制到订阅都的数据库上,快照复制并不是不停的监视出版数据库中发生的变化情况,它是对出版数据库进行一次扫描,把所有出版数据中的数据从源数据库送至目标数据库,而不仅仅是变化的数据。如果数据量很大,那么要复制的数据就很多。因此对网络资源要求很高,不仅要有较快的传输速度,而且要保证传输的可靠性。
  快照复制是最为简单的一种复制类型,能够在出版者和订阅者之间保证数据的一致性。快照复制通常使用在以下场合:
  在一定时间内出现大量的更改的操作,但数据总量不大,变化周期较长。
  (2)事务复制
  快照复制是将整个数据集发送给订阅服务器,由于体积大而造成复制周期较长,会形成复制滞后问题。那么事务复制使用事务日志来生成将复制到订阅服务器的事务,因为它只复制事务也就是变化,所以滞后也比快照复制低得多,因为将不断地在订阅服务器处得到及时应用。
  事务复制有三个组件:快照代理,它生成架构,数据以及跟踪复制过程所需的数据;
  分发代理:它分发快照和随后的命令;
  日志读取器代理:它读取发布数据的事务日志。
  在事务复制中,当出版数据库发生变化时,这种变化就会立即传递给订阅者。并在较短时间内完成(几秒),而不是像快照复制那样要经过很长一段时间间隔。因此,事务复制是一种接近实时地从源到目标分发数据的方法。由于某种原因事务复制的频率较高。所以必须保证在订阅者与出版者之间要有可靠的网络连接。
  (3)合并复制
  合并复制是为移动用户设计的,可以在发布服务器或是订阅服务器处执行修改,在合并代理运行时,这些修改将同步,多用于发布服务器与订阅服务都修改数据的情况下。工作原理如下:在要复制的每个表上实现触发器,并使用包含GUID列唯一标识要复制的表中的每一行。对其中的任何一个表进行修改时,都会将更改将记录一个数据表中,在合并代理运行时,它收集数据表中的GUID,这些GUID指出了在发布服务器和订阅服务器处修改过的行。对于只在发布服务器或是订阅端修改的数据则直接进行相应操作,如INSERT,UPDATE,DELETE,如果双方都有GUID则按照用户指定的方式解决冲突,默认发布服务器伏先。
&&&&&&&&&&&&&&&&
该用户从未签到
写的非常好啊!~
&&&&&&&&&&&&&&&&
( 豫ICP备号-1)&&新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
白手起家, 积分 156, 距离下一级还需 44 积分
论坛徽章:0
现在在A(Linux)主机上面运行着一个程序Program1能够对本地的Mysql进行插入,更新的操作
同时在B(Linux)主机上面运行另一个程序Program2,而且Program2要实时的更新自己内存中的信息,该信息来源于主机A的更新Mysql的数据信息,
这样主机B的数据库最好采用内存数据库,及内存文件系统等方案,但是采用什么方式或内存数据库才能和远程的Mysql进行数据同步呢?
请高手指教
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
丰衣足食, 积分 964, 距离下一级还需 36 积分
论坛徽章:1
B 不能直接去连A 吗
白手起家, 积分 156, 距离下一级还需 44 积分
论坛徽章:0
B可以直接连A
B可以直接连A
丰衣足食, 积分 964, 距离下一级还需 36 积分
论坛徽章:1
那直接去连呀, 干嘛还搞同步
白手起家, 积分 156, 距离下一级还需 44 积分
论坛徽章:0
B的事情非常多,如果频繁的连接查询,系统性能就会降低非常大。
丰衣足食, 积分 964, 距离下一级还需 36 积分
论坛徽章:1
那就单向复制吧&&
插入在A,查询在B.
白手起家, 积分 1, 距离下一级还需 199 积分
论坛徽章:0
请问这种情况下,用什么内存数据库?一种内存数据库同步数据的方法和装置的制作方法
专利名称一种内存数据库同步数据的方法和装置的制作方法
技术领域本发明涉及通讯和计算机领域,特别是涉及通讯和计算机领域中一种内存数据库同步数据的方法和装置。
背景技术 呼叫中心(Call Center)是指以电话接入为主的呼叫响应中心,它为用户提供各种电话响应服务。呼叫中心发展到今天,已能够为客户提供语音、传真、eMail(电子邮件)、Internet(互联网)接入等,向用户提供全方位的服务。随着呼叫中心规模和业务量的发展,很多模块均需要频繁快速地访问数据库,商用数据库的查询性能可能不满足这部分模块的实时快速访问要求,部分模块频繁的或大数据量的数据库访问,使得数据库性能下降,造成整个呼叫中心的性能下降,因此在呼叫中心中使用内存数据库系统已经成为一种趋势。对于部分需要频繁快速访问的数据,可从商用数据库中同步到内存数据库中,基于内存数据库基础上作查询、数据加工处理等。
对于内存数据库数据的同步,较好的一种方法是专利文献(中国专利公开号CN 1426244A)中采用的主备内存区方式,应用只访问内存主内存区,新的数据同步到备内存区,当同步完成后,立即切换主备区,应用就可以访问新的内存区,新的数据继续同步到备内存区。这种方式能够快速地处理数据同步。
但是这种方法并不完全适用于基于查询事务的内存数据库的同步,基于查询事务的内存数据库存在两个重要特性,一个是并发性,指在内存库上存在并发的连续的查询事务,一个是完整性,指一个查询事务的查询可以包含多张表的数据,多张表的数据应该是一致的。在内存库上存在并发的连续的查询事务,因此备内存数据库完成刷新后不会等待主内存库上的查询事务全部完成,就会强制切换主备内存库,完成主备内存库倒换,此时仍然有部分查询事务未完成,它们现在所处的位置位于备内存库中,当新的数据同步到备内存库中时,就会破坏这些查询事务的数据完整性。
本发明所要解决的技术问题是提供一种内存数据库同步数据的方法和装置,解决现有技术查询事务不能保证完整性和数据一致性的问题。
为达到上述目的,本发明提供了一种内存数据库同步数据的方法,其特点在于,各内存数据库具有主用、备用和留守三种状态,所有的数据同步都在处于备用状态的内存数据库上进行;备用状态的内存数据库上的数据同步完成后,进行一次切换,原来处于主用状态的内存数据库切换为留守状态,原来处于备用状态的内存数据库切换为主用状态,所有的新的查询事务都在处于主用状态的内存数据库上执行,切换时未完成的查询事务在处于留守状态的内存数据库上执行;处于留守状态的内存数据库上的查询事务执行完后,进行二次切换,处于留守状态的内存数据库切换为备用状态。
上述内存数据库同步数据的方法,其特点在于,所述各内存数据库是通过指针确定为所述主用、备用或留守状态。
上述内存数据库同步数据的方法,其特点在于,所述内存数据库为两个,且所述两个内存数据库中的一个处于主用状态,另一个处于备用或留守状态。
为了更好的实现本发明的目的,本发明又提供了一种内存数据库同步数据的方法,利用数据加载模块和浮动指针管理模块将商用数据库的数据同步到两个内存数据库,其特点在于,包括如下步骤步骤一、设置浮动指针管理模块使其通过设置三种不同指针指定内存数据库的工作状态;步骤二、数据加载模块向浮动指针管理模块申请备用内存数据库的地址,得到备用内存数据库地址后,开始同步新数据到备用内存数据库;步骤三、数据加载模块判断同步是否正确完成,是则执行步骤五,否则执行步骤四;步骤四、同步失败,忽略本次同步,结束;步骤五、向浮动指针管理模块发出通知消息;浮动指针管理模块进行一次切换,将原来的备份内存数据库指定为主用内数据存库,并且同时将原来的主用内数据存库指定为留守内存数据库;新的查询事务在主内存数据库上执行,原有的未完成的查询事务继续在留守内存数据库上执行;步骤六、当留守内存数据库上的所有的查询事务都完成后,向浮动指针管理模块发出通知消息,浮动指针管理模块进行二次切换,将留守内存数据库指定为备用内存数据库。
上述内存数据库同步数据的方法,其特点在于,在步骤一中所述的指针为主用内存数据库指针、备用内存数据库指针和留守内存数据库指针。
上述内存数据库同步数据的方法,其特点在于,在所述步骤一中,所述内存数据库中的一个为主用内存数据库,另一个为备用内存数据库或留守内存数据库。
上述内存数据库同步数据的方法,其特点在于,所述备用内存数据库指针和留守内存数据库指针在同一时刻只有一个有效,另外一个指向为空。
上述内存数据库同步数据的方法,其特点在于,所述主用内存数据库指针、备用内存数据库指针和留守内存数据库指针设置在所述浮动指针管理模块的维护信息块中。
为了更好的实现本发明的目的,本发明还提供了一种内存数据库同步数据的装置,连接商用数据库,其特点在于,包括浮动指针管理模块、第一内存数据库、第二内存数据库和数据加载模块;浮动指针管理模块通过指针,将两个内存数据库分别指定为主用内存数据库、备用内存数据库或留守内存数据库;数据加载模块连接商用数据库和浮动指针管理模块,用于将数据同步到备用内存数据库;数据加载模块完成数据同步后,浮动指针管理模块进行一次切换,将原来的备份内存数据库指定为主用内数据存库,并且同时将原来的主用内数据存库指定为留守内存数据库;新的查询事务在主内存数据库上执行,原有的未完成的查询事务继续在留守内存数据库上执行;当留守内存数据库上的所有的查询事务都完成后,浮动指针管理模块进行二次切换,将留守内存数据库指定为备用内存数据库。
上述内存数据库同步数据的装置,其特点在于,所述浮动指针管理模块中包括一个维护信息块,所述指针设置在所述维护信息块中。
上述内存数据库同步数据的装置,其特点在于,所述指针包括主用内存数据库指针、备用内存数据库指针和留守内存数据库指针。
上述内存数据库同步数据的装置,其特点在于,所述备用内存数据库指针和留守内存数据库指针在同一时刻只有一个有效,另外一个指向为空。
本发明的技术效果在于
本发明提供的内存数据库同步数据的方法和装置,采用内存数据库二次切换的技术,各内存数据库具有主用、备用和留守三种状态。所有的新的查询事务都在主内存库上执行,数据同步在备用数据库上进行,而在切换时未完成的查询事务在留守数据库上执行。利用本发明的二次切换方法,不论在查询事务执行期间是否发生了内存数据库的状态切换,均能保证查询事务的完整性,从而本发明能够保证内存数据库同步数据时,所有的查询事务都能保证完整性和数据一致性。
图1是本发明的数据同步的模块示意图;图2是本发明的数据同步的过程示意图;图3A、3B、3C是本发明的一个具体例子的分析示意图。
具体实施例方式
下面结合附图和实施例详细说明本发明的方法。
如图1所示,浮动指针管理模块100具有地址维护信息块,维护信息块中有主用内存数据库指针、备用内存数据库指针和留守内存数据库指针,分别指向内存数据库A101和内存数据库B102的地址。内存数据库A101和内存数据库B102不能同时为主内存数据库,当其中一个为主内存数据库(即处于主用状态),另一个内存数据库只能作备用数据库或留守数据库。因此备用内存数据库指针和留守内存数据库指针同一时刻只有一个有效,另外一个指向为空。浮动指针管理模块100通过数据加载模块103连接商用数据库104。
如图2所示,本发明的数据同步的过程包括如下步骤步骤201、浮动指针管理模块具有地址维护信息块,维护信息块中有主用内存数据库指针、备用内存数据库指针和留守内存数据库指针,分别指向内存数据库A和内存数据库B的地址。
步骤202、数据加载模块向浮动指针管理模块申请备内存数据库地址,得到备用内存数据库地址后,开始同步新的数据数据到备内存库。
步骤203、判断同步加载是否成功,是则执行步骤205,否则执行步骤204。
步骤204、同步没有完成,忽略本次同步,同步失败。
步骤205、同步完成且没有错误,向浮动指针管理模块发出通知消息。浮动指针管理模块进行一次切换,备内存数据库切入主用状态,并且同时将原来的主内数据存库切入留守状态。新的查询事务在主内存数据库上执行,原有的未完成的查询事务继续在留守内存数据库上执行。
步骤206、当留守内存数据库上的所有的查询事务都完成后,向浮动指针管理模块发出通知消息,浮动指针管理模块进行二次切换,将留守内存数据库切入备用内存数据库。
步骤207、数据同步成功。
对于数据加载模块103来说,需要得到当前的备用内存库指针指向的地址。数据加载模块向浮动指针管理模块申请该地址,浮动指针管理模块根据当前的备用内存数据库指针取出内存库地址。
如果当前内存数据库A和内存数据库B都不处于备用状态,备用内存数据库指针指向为空,则无法取出地址,数据加载模块暂停加载。如果能够得到该地址,数据加载模块开始从商用数据库同步到该内存数据库上。当数据加载完成后,向浮动地址管理模块发送消息,浮动地址管理模块进行一次切换,使主用内存数据库的状态变为留守状态,如果此时在原主用内存数据库上的查询事务未完成,就会随之在留守内存数据库上继续查询,同时备用内存数据库的状态变为主用,同时各指针的指向分别发生改变。
留守内存数据库指针指向的内存数据库处于留守状态,既不能同步数据,也不能提供给新的查询事务使用。当留守内存数据库上的原有的查询事务完成后,向浮动地址管理模块发送消息,浮动地址管理模块进行二次切换,使得留守数据库的状态变为备用,同时备用内存数据库指针和留守内存数据库指针的指向分别发生改变。
对于查询事务来说,在查询开始时,首先向浮动指针管理模块申请得到当前主内存数据库指针指向的地址,然后再此地址上开始查询事务,如果在查询过程中所在的数据库发生了切换,进入了留守状态,对查询事务不会产生影响,查询事务仍然在此内存数据库地址上进行查询,直到查询完成。
请参阅图3A、图3B和图3C,它是一个具体案例处理流程。现在以呼叫中心的CTIServer模块301向数据查询和鉴权模块302(Auserver)请求对操作员登陆的鉴权认证为例,来说明如何利用二次切换保证该查询事务的完整性。
步骤1呼叫中心系统管理模块303(ZXCCMAN)修改了多个表的数据,修改的数据写入了商用数据库。
步骤2ZXCCMAN需要通知AUserver模块重新同步商用数据库中的数据。ZXCCMAN向AUServer模块的数据加载请求接口发送消息。
步骤3数据加载请求接口通知数据加载管理对象,数据加载管理对象开始数据同步流程。
步骤4数据加载管理对象向浮动指针申请备用内存库地址,由于此时备内存指针指向的是内存数据库B,因此数据加载管理对象得到内存数据库B的地址。
步骤5数据加载管理对象从数据库中提取表的数据步骤6数据加载管理对象完成了内存数据库中表f1,f2的数据同步,并开始表f3的同步。
步骤7假设此时CTIServer向AUserver发送对操作员的登陆进行鉴权认证的请求,请求提交到AUserver的查询和鉴权接口。
步骤8查询和鉴权接口向浮动指针申请主用内存库地址,由于此时备内存指针指向的是内存数据库A,因此数据加载管理对象得到内存数据库A的地址。
步骤9查询和鉴权接口将鉴权请求数据和内存数据库A的地址传递给鉴权函数库。
步骤10鉴权函数调用操作员登陆认证函数,该函数需要访问多个内存数据库表,包括表f2,f3。现在认证函数开始访问内存数据库A的表f2。
步骤11此时数据库完成了对内存数据库B的同步,通知浮动指针管理对象,浮动指针管理进行一次切换内存数据库指针。主库指针指向内存数据库B,备库指针指向空(NULL),留守库指针指向内存数据库A。
步骤12认证函数仍然在内存数据库A查询表f3。
步骤13,14,15即使此时有同步数据库的请求发到数据加载管理对象,由于此时备库指针指向NULL,此时同步数据不能进行。
步骤16,17认证函数完成在内存数据库A上的查询向CTIServer返回结果。
步骤18当内存数据库A上所有的查询事务执行完后,通知浮动指针管理对象,进行二次切换内存数据库指针。备库指针指向内存数据库A,留守库指针指向空(NULL)。由于备库指针现在不为空,数据加载管理对象可以再次开始数据同步流程。
通过以上分析,通过使用内存数据库的二次切换方法保证了查询事务的完整性。不论在查询事务执行期间是否发生了内存数据库的状态切换,均能保证查询事务的完整性。并且上述操作都是内存中指针指向的改变和状态标记的改变,不会影响系统效率。
以上所述仅为本发明的较佳实施例,并非用来限定本发明的实施范围;凡是依本发明所作的等效变化与修改,都被本发明的专利范围所涵盖。
1.一种内存数据库同步数据的方法,其特征在于,各内存数据库具有主用、备用和留守三种状态,所有的数据同步都在处于备用状态的内存数据库上进行;备用状态的内存数据库上的数据同步完成后,进行一次切换,原来处于主用状态的内存数据库切换为留守状态,原来处于备用状态的内存数据库切换为主用状态,所有的新的查询事务都在处于主用状态的内存数据库上执行,切换时未完成的查询事务在处于留守状态的内存数据库上执行;处于留守状态的内存数据库上的查询事务执行完后,进行二次切换,处于留守状态的内存数据库切换为备用状态。
2.根据权利要求1所述内存数据库同步数据的方法,其特征在于,所述各内存数据库是通过指针确定为所述主用、备用或留守状态。
3.根据权利要求2所述内存数据库同步数据的方法,其特征在于,所述内存数据库为两个,且所述两个内存数据库中的一个处于主用状态,另一个处于备用或留守状态。
4.一种内存数据库同步数据的方法,用于利用数据加载模块和浮动指针管理模块将商用数据库的数据同步到至少两个内存数据库,其特征在于,包括如下步骤步骤一、设置浮动指针管理模块使其通过设置三种不同指针指定内存数据库的工作状态;步骤二、数据加载模块向浮动指针管理模块申请备用内存数据库的地址,得到备用内存数据库地址后,开始同步新数据到备用内存数据库;步骤三、数据加载模块判断同步是否正确完成,是则执行步骤五,否则执行步骤四;步骤四、同步失败,忽略本次同步,结束;步骤五、向浮动指针管理模块发出通知消息;浮动指针管理模块进行一次切换,将原来的备份内存数据库指定为主用内数据存库,并且同时将原来的主用内数据存库指定为留守内存数据库;新的查询事务在主内存数据库上执行,原有的未完成的查询事务继续在留守内存数据库上执行;步骤六、当留守内存数据库上的所有的查询事务都完成后,向浮动指针管理模块发出通知消息,浮动指针管理模块进行二次切换,将留守内存数据库指定为备用内存数据库。
5.根据权利要求4所述内存数据库同步数据的方法,其特征在于,在步骤一中所述的指针为主用内存数据库指针、备用内存数据库指针和留守内存数据库指针。
6.根据权利要求4或5所述内存数据库同步数据的方法,其特征在于,在所述步骤一中,所述内存数据库中的一个为主用内存数据库,另一个为备用内存数据库或留守内存数据库。
7.根据权利要求5所述内存数据库同步数据的方法,其特征在于,所述备用内存数据库指针和留守内存数据库指针在同一时刻只有一个有效,另外一个指向为空。
8.根据权利要求5或7所述内存数据库同步数据的方法,其特征在于,所述主用内存数据库指针、备用内存数据库指针和留守内存数据库指针设置在所述浮动指针管理模块的维护信息块中。
9.一种内存数据库同步数据的装置,连接商用数据库,其特征在于,包括浮动指针管理模块、第一内存数据库、第二内存数据库和数据加载模块;浮动指针管理模块通过指针,将两个内存数据库分别指定为主用内存数据库、备用内存数据库或留守内存数据库;数据加载模块连接商用数据库和浮动指针管理模块,用于将数据同步到备用内存数据库;数据加载模块完成数据同步后,浮动指针管理模块进行一次切换,将原来的备份内存数据库指定为主用内数据存库,并且同时将原来的主用内数据存库指定为留守内存数据库;新的查询事务在主内存数据库上执行,原有的未完成的查询事务继续在留守内存数据库上执行;当留守内存数据库上的所有的查询事务都完成后,浮动指针管理模块进行二次切换,将留守内存数据库指定为备用内存数据库。
10.根据权利要求9所述内存数据库同步数据的装置,其特征在于,所述浮动指针管理模块中包括一个维护信息块,所述指针设置在所述维护信息块中。
11.根据权利要求10所述内存数据库同步数据的装置,其特征在于,所述指针包括主用内存数据库指针、备用内存数据库指针和留守内存数据库指针。
12.根据权利要求11所述内存数据库同步数据的装置,其特征在于,所述备用内存数据库指针和留守内存数据库指针在同一时刻只有一个有效,另外一个指向为空。
本发明公开了一种内存数据库同步数据的方法,各内存数据库具有主用、备用和留守三种状态,所有的数据同步都在处于备用状态的内存数据库上进行;备用状态的内存数据库上的数据同步完成后,进行一次切换,原来处于主用状态的内存数据库切换为留守状态,原来处于备用状态的内存数据库切换为主用状态,所有的新的查询事务都在处于主用状态的内存数据库上执行,切换时未完成的查询事务在处于留守状态的内存数据库上执行;处于留守状态的内存数据库上的查询事务执行完后,进行二次切换,处于留守状态的内存数据库切换为备用状态。本发明利用二次切换方法,内存数据库同步数据时,所有的查询事务都能保证完整性和数据一致性。
文档编号G06F11/14GK
公开日日 申请日期日 优先权日日
发明者游波, 何兵, 周涛, 邓宇 申请人:中兴通讯股份有限公司

我要回帖

更多关于 数据库如何主从同步 的文章

 

随机推荐