具体实施方式
下面结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明的保护范围。
本发明实施例带自增量标识字段的数据表的处理方法及装置,要实现在不改变数据库设计的同时,保证复制后的表格内容与复制源是一致的,并可同时复制多张表格。
本发明实施例带自增量标识字段的数据表的处理方法及装置的基本思想是:利用“占位”的方式在目标数据表中增加空白记录(也称为无效记录或者垃圾记录),直至目标数据表的自增量标识字段的值与源记录的标识值相同(该记录称为有效记录),然后将源记录中的各个字段复制到目标数据表的有效记录中;表格复制过程中产生的空白无效记录被保留在一个“无效记录”数据结构中,待整个复制过程结束后,再将无效记录从目标数据表中删除。
如图1所示,本发明实施提供一种带自增量标识字段的数据表的处理方法,包括:
步骤11、读取源数据时,将源数据表中的各条记录按照其自增量标识字段的值由小到大进行排序;
步骤12、打开并清空目标数据表,将目标数据表中的自增量标识字段计数器复位;
步骤13、按照升序逐条获取所述源数据表中的各条记录的自增量标识字段的值,其中,每次获取当前记录的自增量标识字段的值之后,在目标数据表中增加空白的新记录,并判断所述目标数据表中新记录的自增量标识字段的值是否等于当前获取的自增量标识字段的值,如果相等,则将所述源数据表中当前记录的各个字段复制到所述目标数据表中新记录中,如果不相等,则将所述新记录的自增量标识字段的值作为无效值复制到无效记录表中,然后增加一条新的空白记录,重复前面的判断。
步骤14、对应清除所述目标数据表中自增量标识字段的值等于所述无效记录表中无效值的记录。
由上述本发明实施例提供的技术方案可以看出,利用“占位”的方式,在目标数据表中增加空白的新记录,直至目标数据表的自增量标识字段的值与源数据表的标识值相同,才将各个字段复制到目标表格的记录中,否则自增量标识字段的值被保留在无效记录表中,待整个复制过程结束后,可以快速完成无效记录的清理,实现数据表复制后的内容与复制源一致,克服了现有技术中由于自增量字段的值是自动增加的,复制后得到的表格中的自增量字段的值就变成连续的了,导致与原始表格自增量字段的值不一样的缺陷。
本发明实施提供带自增量标识字段的数据表的处理方法,还可以包括:
以“只读”方式打开所述源数据表,在此不作赘述。
简单说明,步骤11,以只读的方式打开源数据表,对源数据表按照“自增量标识”字段的值由小到大排序,保证复制过程中“自增量标识”字段的值越来越大,然后可以将指针指向源数据表的第一条记录。
本发明实施提供带自增量标识字段的数据表的处理方法,还可以包括:
以“读写”方式打开所述目标数据表,在此不作赘述。
步骤12,以读写方式打开目标数据表,将目标数据表清空,并将自增量标识字段计数器复位。也就是,当所述目标数据表已经有记录,则将所述已有记录清空,使所述目标数据表中记录的自增量标识字段计数器复位。可见,打开目标数据表时,如果目标数据表非空,进行清空,保证“自增量标识”字段的计数器复位,这样可以保证后续增加的第一条记录其自增量标识字段的值是从起始值开始的,每增加一条新记录时,该标识字段都会自动增加一个增量。
步骤13,由于对源数据表按照“自增量标识”字段的值由小到大排序,那么目标数据表的“自增量标识”字段的值不等于源数据表的“自增量标识”字段的值的情况,是目标数据表的“自增量标识”字段的值小于源数据表的“自增量标识”字段的值,则将该记录标识为无效记录并将无效记录的“自增量标识”字段的值保留到“无效记录”表中。
如果目标数据表的“自增量标识”字段的值等于源数据表的“自增量标识”字段的值,则将源数据表中的各个字段复制到目标数据表的新记录中,重复操作,直至源数据表中的所有记录都被复制到目标数据表的中。
本发明实施提供带自增量标识字段的数据表的处理方法,还可以包括:创建目标数据表,在此不作赘述。
步骤14,无效记录表可以是一个数据结构,占用动态内存,复制时创建,复制完成后清除,不保留在数据库中;也可以设计成数据库中的一张数据表,记录目的表的表名和该表无效记录的自增量标识字段的值。无效记录表中只保留无效记录的自增量标识字段的值,不仅减少资源占用,而且利用该字段可以快速完成无效记录的清理工作。
本发明实施提供带自增量标识字段的数据表的处理方法,还可以包括:创建无效记录表,在此不作赘述。
本发明实施提供带自增量标识字段的数据表的处理方法,不改变源数据表格,可以并发式地同时复制多张表格。尤其是编程实现时,通过简单循环,可以将同一源数据表复制成多个相同的目的表(同一个表格的多个备份);或者同时将多个不同的源数据表复制成多个不同的目标数据表(多源表同时复制),解决了通过数据库语句SET IDENTITY_INSERTOFF和SET IDENTITY_INSERT ON只能同时复制一张表格的问题。如,并行处理多个所述源数据表对应复制到多个目标数据表,并行处理所述源数据表对应复制到多个目标数据表。
如图2所示,本发明实施提供一种带自增量标识字段的数据表的处理装置,包括:
第一处理单元21,用于读取源数据时,将源数据表中的各条记录按照其自增量标识字段的值由小到大进行排序,打开并清空目标数据表,将目标数据表中的自增量标识字段计数器复位。
第二处理单元22,用于第一处理单元21进行排序后,按照升序逐条获取所述源数据表中的各条记录的自增量标识字段的值,每次获取当前记录的自增量标识字段的值之后,在目标数据表中增加空白的新记录,并判断所述目标数据表中新记录的自增量标识字段的值是否等于当前获取的自增量标识字段的值,如果相等,则将所述源数据表中当前记录的各个字段复制到所述目标数据表中新记录中,如果不相等,则将所述新记录的自增量标识字段的值作为无效值复制到无效记录表中。
第三处理单元23,对第二处理单元22得到的所述目标数据表,对应清除所述目标数据表中自增量标识字段的值等于所述无效记录表中无效值的记录。
由上述本发明实施例提供的技术方案可以看出,利用“占位”的方式,在目标数据表中增加空白的新记录,直至目标数据表的自增量标识字段的值与源数据表的标识值相同,才将各个字段复制到目标表格的记录中,否则自增量标识字段的值被保留在无效记录表中,待整个复制过程结束后,可以快速完成无效记录的清理,实现数据表复制后的内容与复制源一致,克服了现有技术中由于自增量字段的值是自动增加的,复制后得到的表格中的自增量字段的值就变成连续的了,导致与原始表格自增量字段的值不一样的缺陷。
简单说明,第一处理单元21,读取源数据时,对源数据表按照“自增量标识”字段的值由小到大排序,保证复制过程中“自增量标识”字段的值越来越大,然后可以将指针指向源数据表的第一条记录,打开并清空目标数据表,将目标数据表中的自增量标识字段计数器复位。
第二处理单元22,由于对源数据表按照“自增量标识”字段的值由小到大排序,那么通常目标数据表的“自增量标识”字段的值不等于源数据表的“自增量标识”字段的值的情况,是目标数据表的“自增量标识”字段的值小于源数据表的“自增量标识”字段的值,则将该记录标识为无效记录并将无效记录的“自增量标识”字段的值保留到“无效记录”表中,然后增加一条新的空白记录,重复前面的判断。
如果目标数据表的“自增量标识”字段的值等于源数据表的“自增量标识”字段的值,则将源数据表中的各个字段复制到目标数据表的新记录中,重复操作,直至源数据表中的所有记录都被复制到目标数据表的中。
本发明实施提供带自增量标识字段的数据表的处理装置,还可以包括:创建单元,用于创建目标数据表。在此不作赘述。
第三处理单元23,无效记录表中只保留无效记录的自增量标识字段的值,不仅减少资源占用,而且利用该字段可以快速完成无效记录的清理工作。
本发明实施提供带自增量标识字段的数据表的处理装置的创建单元,还可以用于创建无效记录表,在此不作赘述。
本发明实施提供带自增量标识字段的数据表的处理装置,所述第一处理单元21,还用于以“只读”方式打开所述源数据表;以“读写”方式打开所述目标数据表,当所述目标数据表已经有记录,则将所述已有记录清空,使所述目标数据表中记录的自增量标识字段的计数器复位。
可见,打开目标数据表时,如果目标数据表非空,进行清空,保证“自增量标识”字段的计数器复位,这样,每增加一条新记录时,该标识字段都会自动增加一个增量。
本发明实施提供带自增量标识字段的数据表的处理装置,不改变源数据表格,可以将同一源数据表复制成多个相同的目的表(同一个表格的多个备份);或者同时将多个不同的源数据表复制成多个不同的目标数据表(多源表同时复制)。
数据表的复制在数据库应用软件中经常用到,例如电信网的网管系统会定期对网管配置做备份,以备不时之需。这些配置数据多数是保存在不同的数据表中,并且大量使用了带自增量标识的数据表。传统的做法是利用数据库提供的备份功能进行备份,但当需要对个别的表格做备份时,数据库软件很难实现或者需要人工干预,同时也会面临前面提到的自增量标识不可控的问题,导致备份数据与原始数据出现差异。使用本发明提供的方法,网管系统可定期开启数据备份功能,对大量不同的表格进行自动复制,实现配置数据的异地或本地备份。其次,基于网络的数据库应用系统,有时会部属为多个实例同时运行,以实现业务和负载均衡,这类系统也会大量用到数据表的复制和同步,本发明同样适用此类系统。另外,单机版/网络版并存的应用,例如某公司的销售管理系统,驻外销售员在无法联网时,要通过单机版销售软件录制销售订单、制作销售合同;当具备联网条件时,再与公司的服务器进行同步,下载报价清单、上传销售订单等,此时也要大量使用数据表的复制和同步功能,本发明同样适用并能很好地解决问题。
下面以网管系统的告警数据表为例(为便于阐述本发明的作用,表格经过了简化,只保留了演示用的几个字段),演示本发明的实现方法。如图3所示,应用本发明实施带自增量标识字段的数据表的处理方法,包括:
31、以“只读”方式打开源表格T1(即源数据表),并按照“自增量标识”字段的值由小到大对源记录排序,然后将指针指向源表格T1的第一条记录。
表格T1:
EventID |
EventTime |
Owner |
Description |
Closer |
CloseDate |
1 |
2013-10-12 |
张三 |
机房温度过高 |
|
|
2 |
2013-10-18 |
张三 |
主机告警 |
|
|
5 |
2013-11-12 |
张三 |
局域网故障 |
|
|
一定要对源记录按照“自增量标识”字段的值由小到大排序,保证复制过程中“自增量标识”字段的值越来越大。
32、以“读写”方式打开目的表格B1(即目标数据表),如果目的表格中有记录,先将B1表格清空,并将自增量标识字段的计数器复位。
打开目的表格时,如果目标数据表非空,一定要清空,并保证“自增量标识”字段的计数器复位。
33、读取源表格T1中的一条记录,获取并记录当前记录的自增量字段的值。
34、在目的表格B1中增加空白的新记录。
35、判断新记录的“自增量标识”字段的值是否等于源记录的“自增量标识”字段的值。
351、如果新记录的“自增量标识”字段的值小于源记录的“自增量标识”字段的值,则将该记录标识为无效记录并将无效记录的“自增量标识”字段的值保留到“无效记录”表中,然后再增加一条新的空白记录并重复前面的判断。
352、如果新记录的“自增量标识”字段的值等于源记录的“自增量标识”字段的值,则将源记录中的各个字段复制到新记录中。
36、重复前面两个过程,直至源表格T1中的所有记录都被复制到目的表格B1中。
目标数据表B1:
EventID |
EventTime |
Owner |
Description |
Closer |
CloseDate |
1 |
2013-10-12 |
张三 |
机房温度过高 |
|
|
2 |
2013-10-18 |
张三 |
主机告警 |
|
|
3 |
|
|
|
|
|
37、遍历“无效记录”表的记录,利用“自增量标识”字段快速清除目的表格B1中的无效记录。
38、关闭目标数据表B1。
39、关闭源表格T1。
310、完成表格复制。
清除无效记录后的目的表格B1:
EventID |
EventTime |
Owner |
Description |
Closer |
CloseDate |
1 |
2013-10-12 |
张三 |
机房温度过高 |
|
|
2 |
2013-10-18 |
张三 |
主机告警 |
|
|
5 |
2013-11-12 |
张三 |
局域网故障 |
|
|
可见,目的表格B1与源表格T1一致。
由上述本发明实施例提供的技术方案可以看出,利用“占位”的方式,在目标数据表中增加空白的新记录,直至目标数据表的自增量标识字段的值与源数据表的标识值相同,才将各个字段复制到目标表格的记录中,否则自增量标识字段的值被保留在无效记录表中,待整个复制过程结束后,可以快速完成无效记录的清理,实现数据表复制后的内容与复制源一致,克服了现有技术中由于自增量字段的值是自动增加的,复制后得到的表格中的自增量字段的值就变成连续的了,导致与原始表格自增量字段的值不一样的缺陷。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明披露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求书的保护范围为准。