一种ROWID映射表的存储/查询方法及装置制造方法及图纸

技术编号:22166692 阅读:27 留言:0更新日期:2019-09-21 10:29
本发明专利技术公开了一种ROWID映射表的存储/查询方法及装置,该方法包括:步骤S1,根据ROWID结构建立层次性的ROWID映射表存储结构,以存储源/目标端的ROWID映射表;步骤S2,于进行ROWID映射表的存储/查询时,根据源ROWID的数据对象编号OBJD于ROWID映射表存储结构定位到相应的目录;步骤S3,根据源ROWID的相对文件编号定位到相应的FNO文件;步骤S4,获取该FNO文件的索引区与数据区,根据源ROWID的块编号BLKNO定位到实际存储块;步骤S5,将目标ROWID根据源SLOT的顺序存储在存储块内/根据源ROWID的行编号SLOT号于存储块中查询相应的目标ROWID。

A Storage/Query Method and Device for ROWID Mapping Table

【技术实现步骤摘要】
一种ROWID映射表的存储/查询方法及装置
本专利技术涉及计算机数据备份容灾
,特别是涉及一种ROWID映射表的存储/查询方法及装置。
技术介绍
ORACLE数据库是一种使用非常广泛的数据库,ORACLE数据库中存储的每一行记录都有一个唯一的标识叫做ROWID,利用ROWID表示可以查询到数据库中的这条记录。ROWID分为四部分,共10个字节(80个二进制位),这四部分是:1.数据对象编号(OBJD):表明此行所属的数据库对象的编号,数据对象指的是表或者分区表的分区,每个数据对象在数据库建立的时候都被唯一分配一个编号,并且此编号唯一。数据对象编号占用32位。2.相对文件编号(FNO):表明该行记录所在的文件的编号,文件编号占10位。3.块编号(BLKNO):表明该行记录所在文件的块的编号,块编号占22位,即0到2^22。由于ORACLE内部存储空间分配的原因,记录行的BLKNO是并不是从0到2^22连续使用的,ORACLE会选择若干段连续的BLKNO使用。4.行编号(SLOT):表明该行记录在数据块中的位置,行编号需要16位。为方便描述,以下将源端数据库库和目标端数据库的记录的ROWID分别称为源ROWID以及目标ROWID。在进行ORACLE数据库复制时,需要将源库的记录同目标库的记录一一对应起来,才能将源数据库的记录变化正确地更新到目标数据库,目前常见的一种方式是采用ROWID映射,即将源ROWID和目标ROWID的对应关系存储下来,称之为ROWID映射表,在同步针对记录的更新和删除动作时首先根据源记录的ROWID查询目标ROWID,从而定位到目标记录。然而,现有技术中,ROWID映射表的存储方式使得它无法支持大量的映射条目和非常快速地查询。
技术实现思路
为克服上述现有技术存在的不足,本专利技术之目的在于提供一种ROWID映射表的存储/查询方法及装置,以使得ROWID映射表能够支持大量的ROWID映射条目以及支持快速查询,并且尽量减少文件空洞。为达上述目的,本专利技术提出本专利技术一种ROWID映射表的存储/查询方法,包括如下步骤:步骤S1,根据ROWID结构建立层次性的ROWID映射表存储结构,以用于存储源端与目标端的ROWID映射表,所述层次性的ROWID映射表存储结构包括目录,目录下的文件以及文件下的存储块;步骤S2,于进行ROWID映射表的存储/查询时,根据源ROWID的数据对象编号OBJD于ROWID映射表存储结构定位到相应的目录;步骤S3,在该目录下,根据源ROWID的相对文件编号FNO定位到相应的FNO文件;步骤S4,获取该FNO文件的文件索引区与数据区,根据源ROWID的块编号BLKNO定位到该块编号BLKNO对应的实际存储块;步骤S5,将目标ROWID根据源SLOT的顺序存储在存储块内/根据源ROWID的行编号SLOT号于存储块中查询相应的目标ROWID。优选地,所述ROWID映射表的存储结构的建立如下:根据ROWID为每个数据对象编号OBJD创建一个目录;在每个数据对象编号OBJD目录下为使用到的相对文件编号FNO创建一个文件;将所述FNO文件以块为单位存储,以用于存储相应块编号BLKNO对应的源端与备端rowid映射数据。优选地,所述FNO文件中存储的文件内部格式分为文件索引区和数据区,所述文件索引区用于标记块编号BLKNO的使用情况,以及定位块编号BLKNO对应的存储位置,所述数据区用于存放具体的映射块数据。优选地,所述文件索引区共16384个单元,每单元2字节,0表示未使用,其它数字表示这一组实际使用的存储空间组号;所述数据区以组为单位,共16384组,每组256块。优选地,步骤S4进一步包括:步骤S400,获取该FNO文件的文件索引区;步骤S401,以源BLKNO除以256取整为组号,定位索引数据,以获取用于存储ROWID映射表的存储组号;步骤S402,根据存储组号计算存储组在文件内的偏移;步骤S403,根据存储组偏移加组内偏移定位到该块编号BLKNO对应的实际存储块。优选地,于步骤S401中,以源BLKNO除以256为组号,定位索引数据,若索引数据不为0,则直接获得相应的存储组号,若索引数值为0,则说明该BLKNO所在的组尚未分配存储空间,遍历索引区所有索引数据,以找到一个未使用的存储组号。优选地,若索引数值为0,遍历索引区所有索引数据,查询之前记录的最大索引数据X,在最大索引数据X基础上加1作为存储组号,并更新该存储组号到索引数据,以将FNO文件写入磁盘。优选地,所述存储组在文件内的偏移为32768+(存储组号–1)*块大小*256。为达到上述目的,本专利技术还提供一种ROWID映射表的存储/查询装置,包括:ROWID映射表存储结构建立单元,用于根据ROWID结构建立层次性的ROWID映射表存储结构,以用于存储源端与目标端的ROWID映射表,所述层次性的ROWID映射表存储结构包括目录,目录下的文件以及文件下的存储块;目录定位单元,用于根据源ROWID的数据对象编号OBJD于ROWID映射表存储结构定位到相应的目录;FNO文件定位单元,用于在该目录下,根据源ROWID的相对文件编号FNO定位到相应的FNO文件;存储块定位单元,用于获取该FNO文件的文件索引区与数据区,根据源ROWID的块编号BLKNO定位到该块编号BLKNO对应的实际存储块;存储/查询单元,用于将目标ROWID根据源ROWID的行编号SLOT的顺序存储在存储块内/根据源ROWID的行编号SLOT号于存储块中查询相应的目标ROWID。优选地,所述存储块定位单元进一步包括:文件索引区获取单元,用于获取该FNO文件的文件索引区;存储组号获取单元,用于以源BLKNO除以256取整为组号,定位索引数据,以获取用于存储ROWID映射表的存储组号;偏移计算单元,用于根据存储组号计算存储组在文件内的偏移;块定位单元,用于根据存储组偏移加组内偏移定位到该块编号BLKNO对应的实际存储块。与现有技术相比,本专利技术一种ROWID映射表的存储/查询方法通过根据源端数据库的记录的源ROWID建立层次性的ROWID映射表存储结构,并于进行ROWID映射表的存储/查询时,根据源ROWID的数据对象编号OBJD于ROWID映射表存储结构定位到相应的目录,然后根据源ROWID的相对文件编号FNO定位到相应的FNO文件,获取该FNO文件的文件索引区与数据区,根据源ROWID的块编号BLKNO定位到该块编号BLKNO对应的实际存储块,最后将目标ROWID按源SLOT的顺序存储在存储块内/根据通过源ROWID的行编号SLOT号于存储块中查询相应的目标ROWID,使得本专利技术的ROWID映射表能够支持大量的ROWID映射条目以及支持快速查询,并且可尽量减少文件空洞。附图说明图1为本专利技术一种ROWID映射表的存储/查询方法的步骤流程图;图2为本专利技术实施例中ROWID映射表存储结构的结构示意图;图3为本专利技术实施例中文件索引区与数据区的结构示意图;图4为本专利技术一种ROWID映射表的存储/查询装置的系统架构图;图5为本专利技术具体实施例中存储块定位单元的结构图。具体实施方式以下通过特定的具体实例并结合附图说明本专利技术的实施方式,本领域技术人员可由本说明书所揭示本文档来自技高网
...

【技术保护点】
1.本专利技术一种ROWID映射表的存储/查询方法,包括如下步骤:步骤S1,根据ROWID结构建立层次性的ROWID映射表存储结构,以存储源端与目标端的ROWID映射表,所述层次性的ROWID映射表存储结构包括目录,目录下的文件以及文件下的存储块;步骤S2,于进行ROWID映射表的存储/查询时,根据源ROWID的数据对象编号OBJD于ROWID映射表存储结构定位到相应的目录;步骤S3,在该目录下,根据源ROWID的相对文件编号FNO定位到相应的FNO文件;步骤S4,获取该FNO文件的文件索引区与数据区,根据源ROWID的块编号BLKNO定位到该块编号BLKNO对应的实际存储块;步骤S5,将目标ROWID根据源SLOT的顺序存储在存储块内/根据源ROWID的行编号SLOT号于存储块中查询相应的目标ROWID。

【技术特征摘要】
1.本发明一种ROWID映射表的存储/查询方法,包括如下步骤:步骤S1,根据ROWID结构建立层次性的ROWID映射表存储结构,以存储源端与目标端的ROWID映射表,所述层次性的ROWID映射表存储结构包括目录,目录下的文件以及文件下的存储块;步骤S2,于进行ROWID映射表的存储/查询时,根据源ROWID的数据对象编号OBJD于ROWID映射表存储结构定位到相应的目录;步骤S3,在该目录下,根据源ROWID的相对文件编号FNO定位到相应的FNO文件;步骤S4,获取该FNO文件的文件索引区与数据区,根据源ROWID的块编号BLKNO定位到该块编号BLKNO对应的实际存储块;步骤S5,将目标ROWID根据源SLOT的顺序存储在存储块内/根据源ROWID的行编号SLOT号于存储块中查询相应的目标ROWID。2.如权利要求1所述的本发明一种ROWID映射表的存储/查询方法,其特征在于,所述ROWID映射表的存储结构的建立如下:根据ROWID为每个数据对象编号OBJD创建一个目录;在每个数据对象编号OBJD目录下为使用到的相对文件编号FNO创建一个文件;将所述FNO文件以块为单位存储,以用于存储相应块编号BLKNO对应的源端与备端rowid映射数据。3.如权利要求2所述的本发明一种ROWID映射表的存储/查询方法,其特征在于:所述FNO文件中存储的文件内部格式分为文件索引区和数据区,所述文件索引区用于标记块编号BLKNO的使用情况,以及定位块编号BLKNO对应的存储位置,所述数据区用于存放具体的映射块数据。4.如权利要求3所述的本发明一种ROWID映射表的存储/查询方法,其特征在于:所述文件索引区共16384个单元,每单元2字节,0表示未使用,其它数字表示这一组实际使用的存储空间组号;所述数据区以组为单位,共16384组,每组256块。5.如权利要求4所述的本发明一种ROWID映射表的存储/查询方法,其特征在于,步骤S4进一步包括:步骤S400,获取该FNO文件的文件索引区;步骤S401,以源BLKNO除以256取整为组号,定位索引数据,以获取用于存储ROWID映射表的存储组号;步骤S402,根据存储组号计算存储组在文件内的偏移;步骤S403,根据存储组偏移加组内偏移...

【专利技术属性】
技术研发人员:王岚李登科杨锐陈勇铨周华
申请(专利权)人:上海英方软件股份有限公司
类型:发明
国别省市:上海,31

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1