一种针对数据丢失的数据库数据快速恢复方法

文档序号:6607395阅读:341来源:国知局
专利名称:一种针对数据丢失的数据库数据快速恢复方法
技术领域
本发明涉及的是一种数据库数据恢复方法,尤其涉及一种针对数据丢失的数据库 数据快速恢复方法,属于信息安全领域。
背景技术
随着计算机应用的不断深入,数据库应用系统已成为人们处理日常事务的必备工 具。然而,随着数据库系统自身复杂性的提高以及外在网络环境攻击手段的日趋多样化,数 据库系统的管理与维护日益困难,由于人为攻击、操作失误以及突发灾难所造成的数据丢 失已经给数据库用户造成重大的损失,如何保障数据库应用系统的安全、可靠、连续运行以 及数据信息的完整性,已成为信息安全领域一个备受瞩目的研究方向。针对该问题,2004年,微软公司提出了数据库备份恢复的思想(公开号 CN1784677),并在公开号为CN1842789的专利文件中给出了在备份恢复过程进行快照查询 的方法。在此基础上,北京九州软件有限公司给出了数据库备份数据的压缩和检索方法 (公开号CN1851691),以减少备份恢复所需的系统开销。华为科技有限公司则在备份恢复 思想的基础上,提出了基于逻辑日志生成的数据库系统恢复方法(公开号CN101122924), 根据数据库系统日志信息对数据库实施恢复。

发明内容
本发明的目的在于提供一种可以快速解决数据库系统运行过程中由于外在攻击、 错误操作或突发灾难引起的数据丢失问题的数据库数据快速恢复方法。本发明的目的是这样实现的步骤一 SQL捕获器实时捕获数据库系统运行过程中产生的SQL交互信息,并将捕 获到的SQL信息按一定格式写入SQL日志文件中。步骤二 日志监视器监视SQL日志的变化,实时读取日志中新产生的SQL信息,交 由决策器分析决策。步骤三决策器根据“筛选算法”对不同类型的SQL信息进行分析,将可能需要恢 复的SQL信息交付到SQL信息栈,供快速恢复器调用。步骤四数据库系统需要恢复时,快速恢复器取出SQL信息栈中的SQL信息,根据 不同的SQL操作类型,调用相应的“快速恢复算法”对系统实施快速恢复。步骤五恢复完成后,同步器更新备份库表,使备份数据与原始数据保持同步。本发明面向数据库应用系统,提出了一种针对数据丢失的数据库数据快速恢复方 法。该方法通过SQL捕获器、SQL日志、日志监视器、决策器、SQL信息栈、快速恢复器、备份 库表及同步器实现对数据库数据的快速恢复。首先,SQL捕获器实时捕获数据库系统的SQL 交互信息,并将捕获到的SQL信息写入SQL日志。其次,日志监视器实时监视SQL日志的变 化,将捕获到的SQL信息交由决策器处理;决策器对接受到的SQL信息进行分析后,将可能 引起数据丢失的SQL信息提交到SQL信息栈,供快速恢复器调用。当数据丢失发生时,快速恢复器检查SQL信息栈的SQL信息,根据快速恢复算法对系统实施快速恢复。恢复完成后, 同步器更新备份库表,使其中的数据与原始库表保持一致。


图1本发明的实现原理图;图2SQL捕获流程图;图3筛选方法流程图;图4快速恢复方法流程图。
具体实施例方式下面结合附图举例对本发明做更详细地描述图1说明了本发明的实现原理,给出了一种针对数据丢失的数据库数据快速恢复 方法步骤一 SQL捕获器实时捕获数据库系统运行过程中产生的SQL交互信息,并将捕 获到的SQL信息按一定格式写入SQL日志文件中。步骤二 日志监视器监视SQL日志的变化,实时读取日志中新产生的SQL信息,交 由决策器分析决策。步骤三决策器根据“筛选算法”对不同类型的SQL信息进行分析,将可能引起数 据丢失的SQL信息交付到SQL信息栈,供快速恢复器调用。步骤四当数据丢失发生时,快速恢复器取出SQL信息栈中的SQL信息,根据不同 的SQL操作类型,调用相应的“快速恢复算法”对系统实施快速恢复。步骤五恢复完成后,同步器更新备份库表,使备份数据与原始数据保持同步。1、SQL 捕获器SQL捕获器负责实时捕获数据库系统运行过程中产生的SQL交互信息。通过使用 SQL拦截技术,可以实现对数据库系统SQL交互的有效捕获。如图2所示,一次完整的SQL 捕获过程可以描述如下(I)SQL执行语句;(2)加载SQL拦截驱动;(3)拦截SQL语句,写日 志;(4)调用应用程序真正的驱动(如OraclhMysql等),执行SQL。下面给出SQL捕获器 拦截和记录数据库应用程序JDBC语句的工厂方法public class P6LogFactory extends P6CoreFactory{public Connection g etConnection(Connection conn) {return new P6LogConnection(this, conn);}public PreparedStatement getPreparedStatement(PreparedStatemen t real,P6Connectionconn,String pO) {return new P6LogPreparedStatement (this,real,conn,pO);}public Statement getStatement(Statement statement,P6Connection conn) {
4
public CallableStatement getCalIableStatement(CalIableStatemen t real, P6Connectionconn, String pO) {return new P6LogCallableStatement (this, real, conn, pO);}public ResultSet getResultSet (ResultSet real, P6Statement statement, StringpreparedQuery, String query){return new P6LogResultSet(this, real,statement,preparedQuery, query);}}2、SQL 日志SQL日志按照一定格式存储了 SQL捕获器捕获到的SQL信息,是进行数据库数据恢 复的依据。为了便于快速恢复,下面给出了 SQL日志中存储SQL信息的一种实现方式。struct sqlformat{Time time ;/* 发生时间,如 hh:mm: ss*/int categories ;ASQL 类型,error, info,batch,debug,statement 等 */String sql ;/*SQL 语句信息 */}3、日志监视器日志监视器监视SQL日志的变化,实时读取SQL日志中新产生的SQL信息,交由决 策器处理。以下给出了 Eclipse环境下实现日志监视器的关键代码。public class ReadLogThread extends Thread{/氺操作监视线程
*/public void run() {String url = " C:/ProgramFiles/ApacheSoftwareFoundation/Tomcat 6. 0/bin/spy. log";FileReader fr = new FileReader (url);BufferedReader br = new BufferedReader (fr);String temp =〃 〃 ;/* 临时保存读取 的SQL信息 */while (true){
temp = br. readLine () ;/氺 i卖取 H 志氺/}}}4、决策器决策器对日志监视器交付的SQL信息进行处理,根据“筛选算法”将可能需要恢 复的SQL信息压入SQL信息栈。例如,对于一些异常信息、说明信息、或者查询信息,不会 造成数据丢失,因此可以直接忽略;而对于SQL更新操作,由于更改了数据信息,是潜在的 数据丢失原因,因此需要放入信息栈处理。“筛选算法”工作流程如图3所示,以下给出了 Eclipse环境下实现决策器的关键代码。if ((temp ! = null) &&temp. contains (〃 error" ))/ 氺易 U 除 sql
异常信息*/{temp = br. readLine ();}if ((temp ! = null) &&temp. contains (〃 info" ))/* 剔除 sql
说明信息*/{temp = br. readLine ();}if (((temp ! = null)&&temp. contains (" insert" )))
据操作*/{DAOFactory. getAdminDAO(). insertLastRecordtoAdmin_bf();}if(((temp ! = null)&&temp. contains ( " update " )) | |((temp ! = null)&&temp. contains(〃 delete"))){DAOFactory. getSqlrecordDAO (). insert (sqlr) ; /* 更新或删除操作, SQL进栈*/}5、SQL 信息栈SQL信息栈保存了一段时间内的历史SQL信息,当需要对系统进行恢复时,快速恢 复器逐条取出信息栈中的SQL记录进行恢复,直到恢复完成或者栈中记录为空。6、同步器及备份库表备份库表中存储了原始库表的完整数据信息,从而保证了数据的可恢复性。同步 器负责维持原始库表与备份库表的一致性,当SQL信息栈为空或者恢复完成时,同步器刷 心备份库表,使其与原始库表保持数据同步。7、快速恢复器
当数据库系统由于数据的误插入、误修改、误删除等原因造成数据丢失时,由快速 恢复器负责对系统实施快速恢复。首先,快速恢复器取出SQL信息栈中的SQL信息记录,检 查SQL操作的类型,如查询操作、更新操作等。接着,快速恢复器调用“快速恢复算法”,其工 作流程如图4所示,根据不同的SQL操作类型执行相应的恢复策略。例如,由于误删操作造 成了数据丢失,则快速恢复器提取该误删操作对应的数据记录id,从备份库表取出原数据, 重新插入。最后,恢复完成后,快速恢复器调用同步器更新备份库表,保持备份数据与原始 数据的一致性。以下给出了 Eclipse环境下实现快速恢复器的关键代码。if(str_sql. contains(" delete" ) | | str_sql. contains(" update")){DAOFactory. getSqlrecordDAO (). getLastRecord () ;/* 取出栈
顶信息*/DAOFactory. getAdmin_bfDA0(). getRecordToAdmin(sql_id) ; /* .出H
恢复数据id*/DAOFactory. getLeavewordDAO(). updateByAdminID(sql_id) ;/* Utit^o 原数据表*/DAOFactory. getSqlrecordDAO (). deleteLastRecord () ; /* 栈顶出 栈*/}if (isInconsistentO){DAOFactory. getLeavewordDAO(). updateByAdminID(sql_id);}If (stacklsEmptyO)/* 判断操作栈 是否为空 */{DAOFactory. getAdmin_bfDA0(). copyFromAdmin() ;/*调用同步 器*/} 本发明给出了一种针对数据丢失的数据库数据快速恢复方法,可以快速解决数据 库系统运行过程中由于外在攻击、错误操作或突发灾难而引起的数据丢失问题,对丢失数 据的恢复时间由原来的十几分钟甚者几十分钟,缩短到十几秒钟以内。
权利要求
一种针对数据丢失的数据库数据快速恢复方法,其特征包括如下步骤步骤一SQL捕获器实时捕获数据库系统运行过程中产生的SQL交互信息,并将捕获到的SQL信息写入SQL日志文件中;步骤二日志监视器监视SQL日志的变化,实时读取日志中新产生的SQL信息,交由决策器分析决策;步骤三决策器对不同类型的SQL信息进行分析,将可能引起数据丢失的SQL信息交付到SQL信息栈,供快速恢复器调用;步骤四当数据丢失发生时,快速恢复器取出SQL信息栈中的SQL信息,根据不同的SQL操作类型,调用相应的恢复策略对系统实施快速恢复;步骤五恢复完成后,同步器更新备份库表,使备份数据与原始数据保持同步。
全文摘要
本发明提供的是一种针对数据丢失的数据库数据快速恢复方法。通过SQL捕获器、SQL日志、日志监视器、决策器、SQL信息栈、快速恢复器、备份库表及同步器实现对数据库数据的快速恢复。SQL捕获器实时捕获数据库系统的SQL交互信息,并将捕获到的SQL信息写入SQL日志;日志监视器实时监视SQL日志的变化,将捕获到的SQL信息交由决策器处理;决策器对接受到的SQL信息进行分析后,将可能引起数据丢失的SQL信息提交到SQL信息栈,供快速恢复器调用;当数据丢失发生时,快速恢复器检查SQL信息栈的SQL信息,调用相应的恢复策略对系统实施快速恢复。恢复完成后,同步器更新备份库表,使其中的数据与原始库表保持一致。
文档编号G06F17/30GK101923573SQ20101024795
公开日2010年12月22日 申请日期2010年8月9日 优先权日2010年8月9日
发明者周晓耕, 王慧强, 王海峰, 郑业青 申请人:哈尔滨工程大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1