一种PostgreSQL数据库的数据闪回查询及恢复方法、装置制造方法及图纸

技术编号:20272411 阅读:39 留言:0更新日期:2019-02-02 03:37
本发明专利技术公开了一种PostgreSQL数据库的数据闪回查询及恢复方法、装置,其中数据闪回查询方法包括:预设清理控制参数,基于MVCC机制在用户对数据库表进行更改或删除操作时,根据清理控制参数保留更改或删除的旧行数据;接收闪回查询语句,并根据预定义的语法解析规则进行语法解析,获得闪回查询指定的查询时间;根据查询时间在数据库表中查询,对保留的更改或删除的旧行数据进行可见性判断,返回符合条件的闪回查询数据。数据恢复方法基于数据闪回查询方法,将返回的数据作为恢复数据。

【技术实现步骤摘要】
一种PostgreSQL数据库的数据闪回查询及恢复方法、装置
本公开属于PostgreSQL数据库的
,涉及一种PostgreSQL数据库的数据闪回查询及恢复方法、装置。
技术介绍
本部分的陈述仅仅是提供了与本公开相关的
技术介绍
信息,不必然构成在先技术。PostgreSQL数据库是世界上最先进的开源数据库,近几年其发展比较迅速,被越来越多的应用到各个行业和领域。在数据库使用的生产场景中,通常会遇到数据丢失、错误操作等问题,PostgreSQL数据库通常的解决方法是利用预先做好的数据逻辑备份或物理备份进行数据恢复,而且恢复的程度取决于备份与恢复的策略。但这种方法代价高,数据备份不仅会占用额外的数据空间,数据备份或恢复的过程中还比较耗时,造成数据库性能下降,而且在某些情况下可能还必须暂停数据库服务才能完成恢复操作。在使用PostgreSQL数据库时,存在用户偶然地进行了更新或删除数据的误操作的情况,但是若用上述数据恢复方法进行数据恢复显得有些“大材小用”。闪回查询技术是数据库恢复技术中的一种重要机制,在数据库发生逻辑错误时,能够快速并且最低成本的恢复。然而,闪回查询技术仅能够在Oracle数据库中实现,目前PostgreSQL数据库还没有闪回机制,Oracle数据库中的闪回查询技术无法直接挪用至PostgreSQL数据库,由于二者数据库机制不同,存在技术壁垒。因此,用户在使用PostgreSQL数据库偶然地进行了更新或删除数据的误操作时,仍然没有有效的数据恢复方法。
技术实现思路
针对现有技术中存在的不足,解决用户在使用PostgreSQL数据库进行了更新或删除数据的误操作时没有有效的数据恢复方法的问题,本公开的一个或多个实施例提供了一种PostgreSQL数据库的数据闪回查询及恢复方法、装置,实现在不进行数据备份的前提下,在数据库本身启动的时完成对误操作数据的快速恢复。根据本公开的一个或多个实施例的一个方面,提供一种PostgreSQL数据库的数据闪回查询方法。一种PostgreSQL数据库的数据闪回查询方法,该方法包括:预设清理控制参数,基于MVCC机制在用户对数据库表进行更改或删除操作时,根据清理控制参数保留更改或删除的旧行数据;接收闪回查询语句,并根据预定义的语法解析规则进行语法解析,获得闪回查询指定的查询时间;根据查询时间在数据库表中查询,对保留的更改或删除的旧行数据进行可见性判断,返回符合条件的闪回查询数据。进一步地,所述清理控制参数包括旧行数据保存时间参数和旧行数据查询保证参数。所述旧行数据保存时间为PostgreSQL数据库进行数据闪回查询时数据库表的旧行数据保存的最长时间;所述旧行数据查询保证为PostgreSQL数据库进行数据闪回查询时是否保证所述旧行数据可以被闪回查询到。进一步地,所述保留的更改或删除的旧行数据包括执行自动清理数据库表的旧行数据时保留的更改或删除的旧行数据,具体方法步骤包括:判断所述清理控制参数中的旧行数据保存时间是否大于零,若是,进入下一步,否则,闪回功能关闭;对数据库表的旧行数据进行自动清理,对待清理数据库表的旧行数据进行逐行遍历,根据行数据的事物号获得提交时间,根据提交时间是否在旧行数据保存时间内判断每个数据表的行数据是否可以被清理;提交时间在旧行数据保存时间内,保留该行数据,否则自动清理该行数据。进一步地,所述保留的更改或删除的旧行数据包括执行手动清理数据库表的旧行数据时保留的更改或删除的旧行数据,具体方法步骤包括:判断所述清理控制参数中的旧行数据保存时间是否大于零,若是,进入下一步,否则,闪回功能关闭;对数据库表的旧行数据进行手动清理,根据清理控制参数中的旧行数据查询保证值判断是否可进行手动清理操作,若是,进行手动清理操作,否则进入下一步;对待清理数据库表的旧行数据进行逐行遍历,根据行数据的事物号获得提交时间,根据提交时间是否在旧行数据保存时间内判断每个数据表的行数据是否可以被清理;提交时间在旧行数据保存时间内,保留该行数据,否则清理该行数据。进一步地,该方法还包括进行闪回版本查询:接收闪回版本查询语句,并根据预定义的语法解析规则进行语法解析,获得闪回版本查询指定的查询时间;根据查询时间在数据库表中查询,对保留的更改或删除的旧行数据进行可见性判断,返回符合条件的闪回版本查询数据。进一步地,所述根据预定义的语法解析规则进行语法解析获得事务号或查询时间,当获得事务号时,根据事务号获取查询时间;根据闪回查询语句获得的所述查询时间包括闪回查询中指定查询的时间值,根据闪回版本查询语句获得的所述查询时间包括闪回版本查询中指定的开始时间和结束时间。进一步地,在该方法中,获得闪回查询指定的查询时间后,判断该查询时间是否在在旧行数据保存时间内,若是,进入下一步,否则报错无法进行闪回查询;遍历数据库表对象获取数据库表的行数据,并从行数据中获取插入新行时的事务号、修改行数据时的事务号和获取不同事务号对应的事务提交时间;判断返回符合条件的旧行数据是插入新行时的事务号已提交,且插入新行时的事务号对应的事务提交时间不大于闪回查询中指定查询的时间值,以及修改行数据时的事务号已提交,且修改行数据时的事务号对应的事务提交时间大于闪回查询中指定查询的时间值;返回符合条件的旧行数据作为闪回查询数据。进一步地,在该方法中,获得闪回版本查询中指定的开始时间和结束时间后,判断闪回版本查询中指定的开始时间和结束时间是否在在旧行数据保存时间内,若是,进入下一步,否则报错无法进行闪回查询;遍历数据库表对象获取数据库表的行数据,并从行数据中获取插入新行时的事务号、修改行数据时的事务号和获取不同事务号对应的事务提交时间;针对闪回版本查询中的时间段内的查询,判断返回符合条件的旧行数据是插入新行时的事务号已提交,且插入新行时的事务号对应的事务提交时间大于闪回版本查询中指定的开始时间且不大于闪回版本查询中指定的结束时间,以及修改行数据时的事务号等于插入新行时的事务号,且修改行数据时的事务号不是行锁时;针对闪回版本查询中的时间段开始时间之前存在的新行数据,判断返回符合条件的新行数据是插入新行时的事务号已提交,且插入新行时的事务号对应的事务提交时间不大于闪回查询中指定查询的时间值,以及修改行数据时的事务号已提交,且修改行数据时的事务号对应的事务提交时间大于闪回查询中指定查询的时间值;返回符合条件的旧行数据或新行数据作为闪回版本查询数据。根据本公开的一个或多个实施例的另一个方面,还提供一种计算机可读存储介质。一种计算机可读存储介质,其中存储有多条指令,所述指令适于由终端设备设备的处理器加载并执行以下处理:预设清理控制参数,基于MVCC机制在用户对数据库表进行更改或删除操作时,根据清理控制参数保留更改或删除的旧行数据;接收闪回查询语句,并根据预定义的语法解析规则进行语法解析,获得闪回查询指定的查询时间;根据查询时间在数据库表中查询,对保留的更改或删除的旧行数据进行可见性判断,返回符合条件的闪回查询数据。根据本公开的一个或多个实施例的另一个方面,还提供一种终端设备。一种终端设备,采用互联网终端设备,包括处理器和计算机可读存储介质,处理器用于实现各指令;计算机可读存储介质用于存储多条指令,所述指令适于由处理器加载本文档来自技高网...

【技术保护点】
1.一种PostgreSQL数据库的数据闪回查询方法,其特征在于,该方法包括:预设清理控制参数,基于MVCC机制在用户对数据库表进行更改或删除操作时,根据清理控制参数保留更改或删除的旧行数据;接收闪回查询语句,并根据预定义的语法解析规则进行语法解析,获得闪回查询指定的查询时间;根据查询时间在数据库表中查询,对保留的更改或删除的旧行数据进行可见性判断,返回符合条件的闪回查询数据。

【技术特征摘要】
1.一种PostgreSQL数据库的数据闪回查询方法,其特征在于,该方法包括:预设清理控制参数,基于MVCC机制在用户对数据库表进行更改或删除操作时,根据清理控制参数保留更改或删除的旧行数据;接收闪回查询语句,并根据预定义的语法解析规则进行语法解析,获得闪回查询指定的查询时间;根据查询时间在数据库表中查询,对保留的更改或删除的旧行数据进行可见性判断,返回符合条件的闪回查询数据。2.如权利要求1所述的一种PostgreSQL数据库的数据闪回查询方法,其特征在于,所述清理控制参数包括旧行数据保存时间参数和旧行数据查询保证参数。所述旧行数据保存时间参数为PostgreSQL数据库进行数据闪回查询时数据库表的旧行数据保存的最长时间;所述旧行数据查询保证参数为PostgreSQL数据库进行数据闪回查询时是否保证所述旧行数据可以被闪回查询到。3.如权利要求1所述的一种PostgreSQL数据库的数据闪回查询方法,其特征在于,所述保留的更改或删除的旧行数据包括执行自动清理数据库表的旧行数据时保留的更改或删除的旧行数据,具体方法步骤包括:判断所述清理控制参数中的旧行数据保存时间是否大于零,若是,进入下一步,否则,闪回功能关闭;对数据库表的旧行数据进行自动清理,对待清理数据库表的旧行数据进行逐行遍历,根据行数据的事物号获得提交时间,根据提交时间是否在旧行数据保存时间内判断每个数据表的行数据是否可以被清理;提交时间在旧行数据保存时间内,保留该行数据,否则自动清理该行数据。进一步地,所述保留的更改或删除的旧行数据包括执行手动清理数据库表的旧行数据时保留的更改或删除的旧行数据,具体方法步骤包括:判断所述清理控制参数中的旧行数据保存时间是否大于零,若是,进入下一步,否则,闪回功能关闭;对数据库表的旧行数据进行手动清理,根据清理控制参数中的旧行数据查询保证值判断是否可进行手动清理操作,若是,进行手动清理操作,否则进入下一步;对待清理数据库表的旧行数据进行逐行遍历,根据行数据的事物号获得提交时间,根据提交时间是否在旧行数据保存时间内判断每个数据表的行数据是否可以被清理;提交时间在旧行数据保存时间内,保留该行数据,否则清理该行数据。4.如权利要求1所述的一种PostgreSQL数据库的数据闪回查询方法,其特征在于,该方法还包括进行闪回版本查询:接收闪回版本查询语句,并根据预定义的语法解析规则进行语法解析,获得闪回版本查询指定的查询时间;根据查询时间在数据库表中查询,对保留的更改或删除的旧行数据进行可见性判断,返回符合条件的闪回版本查询数据。进一步地,所述根据预定义的语法解析规则进行语法解析获得事务号或查询时间,当获得事务号时,根据事务号获取查询时间;根据闪回查询语句获得的所述查询时间包括闪回查询中指定查询的时间值,根据闪回版本查询语句获得的所述查询时间包括闪回版本查询中指定的开始时间和结束时间。5.如权利要求4所述的一种PostgreSQL数据库的数据闪回查询方...

【专利技术属性】
技术研发人员:田兵黄永厚卢健范翊杨杰
申请(专利权)人:瀚高基础软件股份有限公司
类型:发明
国别省市:山东,37

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

1