一种内存数据库快速数据恢复方法

文档序号:6363560阅读:482来源:国知局
专利名称:一种内存数据库快速数据恢复方法
技术领域
本发明涉及一种内存数据库快速数据恢复方法,用于解决当内存数据库发生异常、内存数据丢失之后,能够通过本方法,快速从磁盘文件中恢复数据,确保数据不丢失。
背景技术
随着电信业、金融业不断的发展,业务扩展越来越广,各种新业务层出不穷,数据量也越来越大,对数据访问的响应速度要求也越来越高。大量的用户资料数据、用户消费数据都需要存放在内存数据库中,但是由于内存的非持久性,一旦内存数据库进程或者所在主机发生异常停止,内存中的数据就将全部丢失。当内存数据库重新启动之后,如何确保数据能够恢复到异常之前的状态,成为内存数据库安全的关键技术。目前,一般的内存数据库采用定时备份内存数据的方式,比如每小时备份一次,这样,当内存数据发生异常,可以从最近一次的备份数据进行恢复,但是,从最近一次备份到系统发生异常的这一段时间,内存数据库发生的修改操作都会丢失,仅靠内存数据库自身的机制是无法恢复的,只能通过具体的业务程序重做那一段时间的业务来恢复数据,既费时又容易造成人为错误。另外,有的内存数据库会实时记录每次操作的SQL语句,这样如果系统发生异常, 可以通过重做从最近一次备份到系统发生异常的这一段时间的SQL语句来恢复数据。由于 SQL语句本身需要进行解析,并重新在内存中查找需要操作的记录,在数据量巨大的电信业务系统中,难以在短时间内恢复全部数据。

发明内容
本发明所要解决的技术问题是提供一种新的内存数据库快速数据恢复方法,当内存数据库系统发生异常停止后,能够在相对较短的时间内,将内存数据库重新启动,并使各内存表数据能够恢复到异常前的状态,确保数据完全不丢失。本发明解决上述技术问题的技术方案如下内存数据库快速数据恢复方法,包括如下步骤步骤I :内存数据库在正常运行时,定时将内存数据全部写入全量文件;步骤2 :外部应用程序每次对内存数据库进行增删改操作时,立即将操作的流水日志写入增量文件;步骤3 :—旦内存数据库出现异常停止,在内存数据库重新启动时,首先加载最近一次的全量文件到内存中;步骤4:然后再将全量文件时间点之后的所有增量日志记录,按顺序逐条追加到内存中,最终使数据恢复到异常前的状态。本发明的有益效果是定时(比如每隔I天,或者每小时)将内存数据全部写入指定文件(全量文件),可以让内存数据库从最近一次备份时间点开始恢复,避免在恢复时需要对之前所有的增量文件进行重做。在每次对内存数据库进行增删改操作时,都立即将操作的流水日志写入增量文件,这样可以确保每次对内存的修改在磁盘上都留有记录,可以有效防止内存数据的突然丢失。进一步,在增量文件中,每一条记录的修改都含有对应记录的内存坐标,这样省去解析SQL的时间消耗,可以直接根据坐标快速定位到对应的内存记录,实现快速恢复。进一步,在重做增量文件时,严格按顺序逐条追加到内存中,可以确保最终使数据恢复到异常前的状态。


图I为本发明的内存数据存储方式及增量文件格式示意图;图2为本发明的具体处理流程图。
具体实施例方式以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。本发明的内存数据库快速数据恢复方法,包括如下步骤步骤I :内存数据库在正常运行时,定时将内存数据全部写入全量文件;步骤2 :外部应用程序每次对内存数据库进行增删改操作时,立即将操作的流水日志写入增量文件;步骤3 :—旦内存数据库出现异常停止,在内存数据库重新启动时,首先加载最近一次的全量文件到内存中;步骤4:然后再将全量文件时间点之后的所有增量日志记录,按顺序逐条追加到内存中,最终使数据恢复到异常前的状态。首先,内存数据库中的数据组织形式如图I所示,每个表的内存数据以100000 条为一个单位,每条记录对应一个唯一的内存块序号和在指定内存块中的记录编号。增量文件每隔10分钟生成一个新文件,文件命名为ALL. yyyymmddhhmiOO,例如 ALL. 20101021080000,ALL. 20101021081000等;增量文件的每条记录格式如图I所示,记录了每条修改记录的内存坐标及操作类型。图2给出了内存数据库在异常停止之后,重新启动时的操作流程图,首先采用多线程方式将各个内存表的全量文件加载到内存,然后从最后一次备份的时间点开始,逐条读取增量文件中的内存坐标,定位到指定记录之后,再根据操作标志以及各字段的取值去修改对应的内存记录,使内存数据恢复到异常前的状态。以下为采用本发明方法的配置文件信息,本文件配置的是进程运行时使用的基本信息,采用INI文件格式。[SYS-INF0]
INSTANCE= iMDB
PORT= 3847
LOAD-THRNUM = 20 LOG-TIME= 600
秒数)
EXP-TIME

LOG-BAK-TIME = 12 REDO日志
LOG-SEG-CHAR =' SHM-INIT-SIZE = 100 SHM-EXT-SIZE = 70 [FILE-SYSTEM]
DATA-DIR= /data/t_c
LOG_DATA_DIR =
#实例名称 #监听端口号
#数据加载时使用的最大线程数 #每多长时间一个增量文件(REDO日志)(间隔
00, 12 #当系统时间的“时”在此列表时,导出全量文
#每次导出全量文件后,保留之前多少小时的
#RED0日志分隔符(尽量使用不常用的字符)
#共享内存初始大小(单位M)
#共享内存扩展大小(单位M)
#全量文件目录
=/data/t-data.log/# 增量文件目录以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种内存数据库快速数据恢复方法,包括步骤I:内存数据库在正常运行时,定时将内存数据全部写入全量文件;步骤2 :外部应用程序每次对内存数据库进行增删改操作时,立即将操作的流水日志写入增量文件;步骤3: —旦内存数据库出现异常停止,在内存数据库重新启动时,首先加载最近一次的全量文件到内存中;步骤4:然后再将全量文件时间点之后的所有增量日志记录,按顺序逐条追加到内存中,最终使数据恢复到异常前的状态。
2.根据权利要求I所述的内存数据库快速数据恢复方法,其特征在于内存数据需要定时写入全量文件,定时的时间是每隔I天或I小时。
3.根据权利要求I所述的内存数据库快速数据恢复方法,其特征在于增量文件为 REDO日志,需要实时写,任何增删改的操作,一旦成功,就必须立即写增量文件。
4.根据权利要求I所述的内存数据库快速数据恢复方法,其特征在于增量文件中,每条操作流水记录中,都含有每天变更记录对应的内存坐标,表示本次修改是操作了哪个内存块的哪条记录,以便在数据恢复时能够快速定位。
5.根据权利要求I所述的内存数据库快速数据恢复方法,其特征在于数据恢复时,将全量文件时间点之后的所有增量日志记录,严格按顺序重新操作一遍,确保数据能够和发生异常前的状态完全一致。
全文摘要
内存数据库如果由于各种原因异常中断,会导致内存数据全部丢失。本发明涉及一种内存数据库快速数据恢复方法,首先,内存数据库在正常运行时,定时(比如每隔1天或者1小时)将内存数据全部写入指定文件(全量文件);其次,外部应用程序每次对内存数据库进行增删改操作时,立即将操作的流水日志写入增量文件,增量文件包含每条变更记录对应的内存坐标;一旦内存数据库出现异常停止,在重新启动时,首先加载最近一次的全量文件到内存中;然后再将全量文件时间点之后的所有增量日志记录,按顺序逐条追加载到内存中,最终使数据恢复到异常前的状态。由于每条记录操作的流水日志中都含有坐标信息,可以在内存中快速定位到这条记录,实现快速恢复。
文档编号G06F11/14GK102609337SQ20121001753
公开日2012年7月25日 申请日期2012年1月19日 优先权日2012年1月19日
发明者王金山 申请人:北京神州数码思特奇信息技术股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1