一种实现数据库访问的方法、系统和装置的制作方法

文档序号:6563710阅读:222来源:国知局

专利名称::一种实现数据库访问的方法、系统和装置的制作方法
技术领域
:本发明涉及应用数据库的技术,特别是涉及一种实现数据库访问的方法、系统和装置。
背景技术
:随着应用数据库技术的发展,各行各业使用数据库为人们提供服务业务的情况越来越广泛,比如银行业务系统等。需要访问数据库的系统称为应用系统,当需要访问数据库时,所述应用系统通过数据访问服务系统(DAS)对数据库进行操作,达到访问的目的,这里所述数据库操作通常包括增加、删除、更新或查询等。现有技术中,如果数据库发生故障,比如无法与数据库连接等,应用系统就不能实现数据库访问,所有与数据库相关的业务都将瘫痪,这无疑给运营商、设备商和终端用户带来较大的损失,不利于业务的推广。
发明内容本发明提供一种实现数据库访问的方法、系统和装置,可以在数据库发生故障的情况下,先直接向应用系统返回操作成功的信息,当数据库恢复正常时,才实现对数据库的操作,从而可以增强用户的体验效果,提高重新访问数据库的效率。针对本发明的第一个目的,提出的技术方案为一种实现数据库访问的方法,该方法包括以下步骤A、应用系统向数据访问服务系统DAS发送数据库操作指令,DAS根据与数据库进行连接的结果确定出数据库发生故障;B、所述DAS保存所述数据库操作指令,并向应用系统返回数据库操作成功的信息;C、所述DAS实时检测数据库是否恢复正常,如果恢复正常,则根据事先保存的数据库操作指令对数据库进行操作。上述方案中,步骤A所述确定数据库发生故障的方法为所述DAS发起对数据库的连接,如果连接失败,则确定数据库发生故障;或者,在所述步骤A之前进一步包括设置数据库状态变量,并定时对数据库进行连接测试,如果连接失败,则将数据库状态变量设置为表示故障的值,否则设置为表示正常的值;步骤A所述确定数据库发生故障的方法为DAS查询数据库状态变量,并根据数据库状态变量确定数据库发生故障。上述方案中,步骤C所述实时检测数据库是否恢复正常的方法为所述DAS发起对数据库的连接,如果连接失败,则重新发起对数据库的连接;如果连接成功,则确定数据库恢复正常;或者,所述步骤A之前进一步包括预先设置数据库状态变量,并定时对数据库进行连接测试,如果连接失败,则将数据库状态变量设置为表示故障的值,否则设置为表示正常的值;步骤C所述实时检测数据库是否恢复正常的方法为DAS实时查询数据库状态变量,如果数据库状态变量为表示正常的值,则确定数据库恢复正常。上述方案中,预先建立用于保存操作指令的日志文件,步骤A所述保存数据库操作指令为将数据库操作指令保存在建立的日志文件中。上述方案中,所述数据库操作指令为增加、删除或更新。上述方案中,预先在应用系统本地建立用于保存静态数据的单表数据文件,并定时将数据库中静态数据保存到单表数据文件中,当应用系统需要查询数据库时,该方法进一步包括X1、所述应用系统向DAS发送查询指令,DAS根据与数据库进行连接的结果确定数据库发生故障;X2、所述DAS根据查询指令查询本地的单表数据文件,并将查询结果返回给应用系统。针对第二个发明目的,本发明提出的技术方案为一种实现数据库访问的系统,该系统包括应用系统、DAS、数据库和第一存储模块,其中,所述应用系统,用于向数据访问系统DAS发送数据库操作指令,并接收从DAS返回的信息;DAS,用于接收来自应用系统的数据库操作指令,与数据库进行连接和操作,将数据库操作指令保存在第一存储模块中,并向应用系统返回操作成功的信息;第一存储模块,用于保存数据库操作指令。上述方案中,所述DAS包括DAS指令分析模块,用于分析来自应用系统的数据库操作指令,从连接池模块中获取连接失败信息,保存数据库操作指令,向应用系统返回数据库操作成功的信息;连接池模块,用于检测与数据库的连接,将连接失败信息传输给DAS指令分析模块,建立与数据库的连接并传输给业务线程池;业务线程池模块,用于分配线程,从连接池模块中获取连接,对数据库进行操作。上述方案中,该系统进一步包括用于保存单表数据文件的第二存储模块;所述应用系统进一步用于向DAS发送查询指令,并接收返回的查询结果;所述DAS进一步用于查询第二存储模块中单表数据文件,并返回查询结果。针对第三个发明目的,本发明提出的技术方案为一种实现数据库访问的装置,所述装置为DAS,所述DAS包括DAS指令分析模块,用于分析来自应用系统的数据库操作指令,从连接池模块中获取连接失败信息,并保存数据库操作指令;连接池模块,用于检测与数据库的连接,将连接失败信息传输给DAS指令分析模块,建立与数据库的连接并传输给业务线程池;业务线程池模块,用于分配线程,从连接池模块中获取连接,对数据库进行操作。综上所述,本发明提出一种实现数据库访问的方法和系统,在数据库发生故障的情况下,可以先保存数据库操作指令,等待数据库恢复正常,一旦恢复正常,DAS就立即利用保存的数据库操作指令对数据库进行访问,实现对数据库的增加、删除或更新等操作。而如果需要查询某静态数据,则可以直接在DAS本地进行查询并返回结果。这样,可以达到增强用户体验效果的目的,进一步地,由于可以由DAS自动对数据库进行重新访问,无需应用系统干预,可以提高重新访问数据库的效率。图1是本发明方法的流程图;图2是本发明实施例中的用例示意图;图3是实施例中实现数据库访问的流程图;图4是实施例中重新访问数据库的流程图;图5是实施例中查询单表数据的流程图;图6是本发明系统的基本结构示意图;图7是数据访问服务系统DAS的内部结构示意图。具体实施例方式为使本发明的目的、技术方案和优点更加清楚,下面将结合附图及具体实施例对本发明作进一步地详细描述。本发明的基本思想是不管数据库是否发生故障,当数据访问系统(DAS)接收到来自应用系统的数据库操作指令时,都返回操作成功的信息并保存该数据库操作指令。如果数据库发生故障,则DAS在数据库恢复正常之后,再根据保存的数据库操作指令进行操作。图1是本发明的流程图。如图1所示,在数据库发生故障的情况下,本发明包括以下步骤步骤101应用系统向DAS发送数据库操作指令,DAS根据与数据库进行连接的结果确定数据库发生故障。本步骤中,所述DAS确定数据库发生故障可以有两种方法一种是当接收到数据库操作指令时,DAS就发起对数据库的连接,如果连接失败,则可以确定数据库发生故障。另外一种是预先设置数据库状态变量,并定时对数据库进行连接测试,如果连接失败,则将数据库状态变量设置为表示故障的值,否则设置为表示正常的值;此后,如果接收到数据库操作指令,DAS就可以直接查询数据库状态变量,根据数据库状态变量确定数据库发生故障。步骤102所述DAS保存所述数据库操作指令,并向应用系统返回数据库操作成功的信息。步骤103所述DAS实时检测数据库是否恢复正常,如果恢复正常,则根据事先保存的数据库操作指令对数据库进行操作。本步骤中,所述实时联测数据库是否恢复正常的方法也可以有两种方法一种方法是DAS发起对数据库的连接,如果连接失败,则返回发起对数据库连接的步骤;如果连接成功,则确定数据库恢复正常。也就是说,DAS不断地与数据库进行连接,一旦连接成功,就可以在后续的步骤中对数据库进行操作。另外一种方法是预先设置数据库状态变量,并定时对数据库进行连接测试,如果连接失败,则将数据库状态变量设置为表示故障的值,否则设置为表示正常的值。那么,DAS可以实时查询数据库状态变量,如果数据库状态变量为表示正常的值,则确定数据库恢复正常。需要注意的是,本发明所述的方法适合于改变数据库内容的操作,比如增加、删除或更新。实际应用中,如果需要查询数据库,即本身不改变数据库内容,但需要数据库返回被查询的数据或记录,就可以利用以下方法进行查询预先在应用系统本地建立用于保存静态数据的单表数据文件,并定时将数据库中静态数据保存在单表数据文件中,当应用系统需要查询数据库时,X1、所述应用系统向DAS发送查询指令,DAS根据与数据库进行连接的结果确定数据库发生故障;X2、所述DAS根据查询指令查询本地的单表数据文件,并将查询结果返回给应用系统。所述的静态数据指预先定义的用户信息等数据,这些静态数据可以保存在单表中,查询比较简单,即无需根据多个表进行联合查询。在这种情况下,就可以将用户常用的一些静态数据定时导出,保存到所述单表数据文件,如果数据库发生故障,DAS可以直接查询所述的单表数据文件。为了更好地说明本发明方案,下面用实施例进行详细描述。本实施例中,DAS预先建立了两种文件,一个是保存数据库操作指令的日志文件Filel,另一个是保存静态数据的单表数据文件File2,数据库名称为DB1。图2是本实施例针对数据库故障模式的用例图。如图2所示,应用系统可以对数据库进行增加、删除或更新等操作,当数据库故障时,包括将操作指令保存到日志文件中;应用系统还可以对数据库进行查询,当数据库故障时,将查询单表数据文件;当数据库恢复正常时,可以调用事先保存的日志文件,读取日志文件中的操作指令。另外,本实施例中,DAS预先设置数据库状态变量,并定时对数据库进行连接测试,如果连接失败,则将数据库状态变量设置为表示故障的值,否则设置为表示正常的值。那么,DAS可以查询数据库状态变量,根据数据库状态变量确定数据库是否发生故障或者是否恢复正常。图3是本实施例对数据库进行操作的流程图。如图3所示,本实施例包括以下步骤步骤301应用系统向DAS发送数据库操作指令。实际应用中,如果有多个数据库,需要在数据库操作指令中指示需要操作的数据库名称、记录ID以及修改内容等参数。向DAS发送携带有这些参数的数据库操作指令可以这样实现预先建立用于设置操作指令的各项属性或参数的命令请求类、执行操作指令的命令执行类,然后利用命令请求类和命令执行类实现向DAS发送数据库操作指令。比如预先建立命令请求类CmdRequest和命令执行类DASCommand,其中,DASCommand类还可以包括执行(execute)方法。当需要发送数据库操作指令时,可以先构造一个CmdRequest类的对象request,并在request对象中设置调用SQL或者命令SQL的标签(Label)以及数据库名称、记录ID以及修改内容等参数;再构造一个DASCommand类的对象command,并携带上述各参数调用command对象中的execute方法,即调用command.execute(request)。实际应用中,为了与现有的数据库访问技术兼容,还可以事先设置数据库访问模式变量redo,所述的数据库操作指令中还将携带该数据库访问模式变量。比如数据库访问模块分为正常模式和故障模式,如果将redo设置为“true”,则表示用户选择故障模式对数据库进行操作,在数据库发生故障的情况下,保存该操作命令,并在以后重新调用该操作命令,也就是本发明所述的方法;如果将redo设置为“false”,则表示用户选择正常模式对数据库进行操作,即按照现有技术进行操作。步骤302DAS查询数据库状态变量,确定数据库发生故障。本步骤中,所述数据库状态变量可以设置为“1”或“0”,其中“1”表示故障,而“0”表示正常;也可以设置为“true”或“false”,其中,“true”表示正常,“false”表示“故障”。当然,实际应用中,还可以用其他方法表示数据库状态,只要DAS可以识别即可。当然,实际应用中,当接收到操作指令时,DAS还需要对操作指令进行分析,即对操作指令进行解析,至于如果解析则属于现有技术,此处不再赘述。步骤303DAS将数据库发生故障的信息返回给应用系统。为了便于管理员了解数据库运行情况,DAS还可以将数据库发生故障的信息返回给应用系统作为日志保存。当然,如果不需要记录数据库操作的过程,也可以不返回数据发生故障的信息,即可以省略本步骤。步骤304DAS将数据库操作指令保存在日志文件Filel中。本步骤所述的日志文件的格式可以采用标签的形式表示,以更新用户数据中用户ID号为1000的记录为例,日志文件的格式可以为<FaultLog><logtime>2006072812:34:33.123</logtime><datasource>DB1</datasource><SQL>updatet_userinfosetlevel=:levelwhereuserid=:</SQL><params><paramindex=“1”name=“”value=”1”/><paramindex=“2”name=“”value=”1000”/></params></FaultLog>也就是说,通过日志文件,就可以将数据库操作指令中需要执行的操作、参数等情况记录下来,等到数据库恢复正常之后,再对数据库进行操作。步骤305DAS向应用系统返回数据库操作成功的信息。需要注意的是,本步骤向应用系统返回数据库操作成功的信息与步骤303不同。为了增前用户的体验,可以将本步骤操作成功的信息呈现给用户,而数据库故障的信息则不必呈现给用户,只是作为数据库操作的过程记录下来。步骤306DAS实时查询数据库状态变量,根据数据库状态变量确定数据库是否恢复正常,如果恢复正常,则根据事先保存的数据库操作指令对数据库进行操作。本步骤中,如果数据库恢复正常,就可以调用保存在日志文件Filel中的数据库操作指令,重新对数据库进行访问。图4是数据库故障恢复后DAS重新访问数据库的流程图。如图4所示重新访问数据库的方法包括以下步骤步骤401DAS将数据库恢复正常的信息通知给应用系统。与步骤303相同,为了便于管理员了解数据库运行情况,DAS可以将数据库恢复正常的信息返回给应用系统作为日志保存。当然,如果不需要了解数据库运行情况,也可以不返回数据库恢复正常的信息,即可以省略本步骤。步骤402DAS分配空闲线程。本实施例中,由于要对数据库进行访问,则需要为访问数据库分配一个空闲线程,即为执行数据库操作指令分配一个空闲线程。步骤403DAS日志文件Filel中读取并分析事先保存的数据库操作指令。步骤404DAS从自身的连接池中获取已经与数据库建立的空闲连接。步骤405分配的空闲线程利用与数据库的连接,将所述数据库操作指令提交给数据库执行,即实现对数据库的访问。之后,如果数据库操作成功,还可以返回操作成功的信息,DAS再删除日志文件中的数据库操作指令。如果日志文件中有多个数据库操作指令,DAS将逐一读取并执行每一条操作指令,即重复执行步骤401~步骤405。另外,本发明是采用线程等技术来实现对数据库的访问,实际应用中,也可以不采用步骤401~步骤405的方法,只要数据库可以执行日志文件中的数据库操作指令即可。本实施例中,还事先建立了用于保存静态数据的单表数据文件File2,DAS可以定时根据数据库中静态数据刷新单表数据文件File2。图5是本实施例查询静态数据的方法的流程图。如图5所示,该方法包括以下步骤步骤501应用系统将查询指令发送给DAS。本步骤所述的查询指令也属于一种数据库操作指令,在实际应用中,还可能需要携带数据库名称、表名或视图名、查询条件等参数。与上述步骤301相似,本步骤也需要利用DASCommand类实现指令的发送。但与步骤301不同的是,所述DASCommand类需包括一个用于单表查询的打开表(opentable)方法,向DAS发送携带有上述参数的查询指令可以这样实现先构造一个DASCommand类的对象command,并携带上述各参数调用command对象中的opentable方法,即调用command.opentable(参数)。步骤502DAS查询数据库状态变量,确定数据库发生故障。实际应用中,当接收到查询指令时,DAS还需要对查询指令进行解析。步骤503DAS将数据库发生故障的信息返回给应用系统。本步骤与步骤303相似,如果不需要记录数据库操作的过程,也可以不返回数据发生故障的信息,即可以省略本步骤。步骤504DAS根据查询指令查询所述单表数据文件File2。本步骤中,DAS将根据表名、查询条件等查询File2中的数据或记录。步骤505DAS将查询结果返回给应用系统。如果查询成功,DAS需要将查询到的数据或记录返回给应用系统;如果查询失败,则返回失败信息。应用本实施例方案,可以在数据库发生故障的情况下,先保存数据库操作指令,等待数据库恢复正常,一旦恢复正常,DAS就利用保存的数据库操作指令对数据库进行访问,实现对数据库的增加、删除或更新等操作。而如果需要查询某静态数据,则可以直接在DAS本地进行查询并返回结果。这样,不但可以增强用户的体验效果,而且,由于可以由DAS自动对数据库进行重新访问,无需应用系统干预,提高了重新访问数据库的效率。针对实现数据库访问的方法,本发明还提出了一种实现数据库访问的系统。图6显示了实现数据库访问的系统的基本结构示意图。如图6所示,该系统包括应用系统601,用于向DAS602发送数据库操作指令,并接收从DAS602返回的信息;DAS602,用于接收来自应用系统601的数据库操作指令,与数据库603进行连接和操作,将数据库操作指令保存在第一存储模块604,并向应用系统601返回操作成功的信息;数据库603,用于保存数据;第一存储模块604,用于保存数据库操作指令。图7是DAS的内部结构示意图。如图7所示,所述DAS602包括DAS指令分析模块6021,用于分析来自应用系统601的数据库操作指令,从连接池模块6022中获取连接失败信息,将数据库操作指令保存到第一存储模块604,向应用系统返回数据库操作成功得信息;连接池模块6022,用于检测与数据库603的连接,将连接失败信息传输给DAS指令分析模块6021,建立与数据库603的连接并传输给业务线程池6023;业务线程池模块6023,用于分配线程,从连接池模块6022中获取连接,对数据库603进行操作。应用系统601将数据库操作指令发送给DAS指令分析模块6021,DAS指令分析模块6021对数据库操作指令进行分析,并从连接池模块6022获得连接失败信息,将数据库操作指令保存到第一存储模块604中,再向应用系统601返回数据库操作成功的信息;当连接池模块6022检测到与数据库603的连接正常时,将通知业务线程池模块6023,业务线程池模块6023分配一个空闲线程,利用连接池模块6022中的空闲连接,从第一存储模块604中提取事先保存的数据库操作指令,提交给数据库603执行,即实现数据库访问。这里所述的第一存储模块604可以放置在DAS602,放置在应用系统601,或单独放置。另外,该系统还可以进一步包括用于保存单表数据文件的第二存储模块,这里所述单表数据文件需要定时从数据库603中导出;与第一存储模块604相似,所述的第二存储模块也可以放置在DAS602,放置在应用系统601,或单独放置。此时,所述应用系统601进一步用于向DAS602发送查询指令,并接收返回的查询结果;所述DAS602进一步用于查询第二存储模块中单表数据文件,并返回查询结果。综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。权利要求1.一种实现数据库访问的方法,其特征在于,该方法包括以下步骤A、应用系统向数据访问服务系统DAS发送数据库操作指令,DAS根据与数据库进行连接的结果确定出数据库发生故障;B、所述DAS保存所述数据库操作指令,并向应用系统返回数据库操作成功的信息;C、所述DAS实时检测数据库是否恢复正常,如果恢复正常,则根据事先保存的数据库操作指令对数据库进行操作。2.根据权利要求1所述的方法,其特征在于,步骤A所述确定数据库发生故障的方法为所述DAS发起对数据库的连接,如果连接失败,则确定数据库发生故障;或者,在所述步骤A之前进一步包括设置数据库状态变量,并定时对数据库进行连接测试,如果连接失败,则将数据库状态变量设置为表示故障的值,否则设置为表示正常的值;步骤A所述确定数据库发生故障的方法为DAS查询数据库状态变量,并根据数据库状态变量确定数据库发生故障。3.根据权利要求1所述的方法,其特征在于,步骤C所述实时检测数据库是否恢复正常的方法为所述DAS发起对数据库的连接,如果连接失败,则重新发起对数据库的连接;如果连接成功,则确定数据库恢复正常;或者,所述步骤A之前进一步包括预先设置数据库状态变量,并定时对数据库进行连接测试,如果连接失败,则将数据库状态变量设置为表示故障的值,否则设置为表示正常的值;步骤C所述实时检测数据库是否恢复正常的方法为DAS实时查询数据库状态变量,如果数据库状态变量为表示正常的值,则确定数据库恢复正常。4.根据权利要求1所述的方法,其特征在于,预先建立用于保存操作指令的日志文件,步骤A所述保存数据库操作指令为将数据库操作指令保存在建立的日志文件中。5.根据权利要求1至4任一项所述的方法,其特征在于,所述数据库操作指令为增加、删除或更新。6.根据权利要求5所述的方法,其特征在于,预先在应用系统本地建立用于保存静态数据的单表数据文件,并定时将数据库中静态数据保存到单表数据文件中,当应用系统需要查询数据库时,该方法进一步包括X1、所述应用系统向DAS发送查询指令,DAS根据与数据库进行连接的结果确定数据库发生故障;X2、所述DAS根据查询指令查询本地的单表数据文件,并将查询结果返回给应用系统。7.一种实现数据库访问的系统,其特征在于,该系统包括应用系统、DAS、数据库和第一存储模块,其中,所述应用系统,用于向数据访问系统DAS发送数据库操作指令,并接收从DAS返回的信息;DAS,用于接收来自应用系统的数据库操作指令,与数据库进行连接和操作,将数据库操作指令保存在第一存储模块中,并向应用系统返回操作成功的信息;第一存储模块,用于保存数据库操作指令。8.根据权利要求7所述的系统,其特征在于,所述DAS包括DAS指令分析模块,用于分析来自应用系统的数据库操作指令,从连接池模块中获取连接失败信息,保存数据库操作指令,向应用系统返回数据库操作成功的信息;连接池模块,用于检测与数据库的连接,将连接失败信息传输给DAS指令分析模块,建立与数据库的连接并传输给业务线程池;业务线程池模块,用于分配线程,从连接池模块中获取连接,对数据库进行操作。9.根据权利要求7或8所述的系统,其特征在于,该系统进一步包括用于保存单表数据文件的第二存储模块;所述应用系统进一步用于向DAS发送查询指令,并接收返回的查询结果;所述DAS进一步用于查询第二存储模块中单表数据文件,并返回查询结果。10.一种实现数据库访问的装置,所述装置为DAS,其特征在于,所述DAS包括DAS指令分析模块,用于分析来自应用系统的数据库操作指令,从连接池模块中获取连接失败信息,并保存数据库操作指令;连接池模块,用于检测与数据库的连接,将连接失败信息传输给DAS指令分析模块,建立与数据库的连接并传输给业务线程池;业务线程池模块,用于分配线程,从连接池模块中获取连接,对数据库进行操作。全文摘要本发明提供一种实现数据库访问的方法、系统和装置,具体为在数据库发生故障的情况下,应用系统向数据访问服务系统(DAS)发送数据库操作指令,DAS根据与数据库进行连接的结果确定数据库发生故障;所述DAS保存所述数据库操作指令,并向应用系统返回数据库操作成功的信息;所述DAS实时检测数据库是否恢复正常,如果恢复正常,则根据事先保存的数据库操作指令对数据库进行操作。应用本发明方案,不但可以达到增强用户体验效果的目的,进一步地,由于可以由DAS自动对数据库进行重新访问,无需应用系统干预,从而可以提高重新访问数据库的效率。文档编号G06F11/00GK1963821SQ20061016187公开日2007年5月16日申请日期2006年12月5日优先权日2006年12月5日发明者金琦超,朱仲楚申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1