具体实施方式
为了使本技术领域的人员更好地理解本说明书中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本说明书保护的范围。
本说明书实施例提供了一种数据库连接异常处理方法及装置。
为了便于理解,首先对本说明书实施例中涉及到的一些概念进行介绍。
数据库实例(DataBase,DB):也可以称为“数据库”,是按照数据结构来组织、存储和管理数据的仓库。
DB服务端(DB Server):数据库实例所在的服务器端,为了便于描述,后续用“服务端”指代。
DB客户端(DB Client):业务调度方的应用端,为了便于描述,后续用“客户端”指代。
客户端与服务端中数据库的交互过程:客户端与数据库之间建立数据库连接,客户端在数据库连接上传输数据访问请求(例如业务请求),服务端在接收到数据访问请求后,从数据库中读取相应的数据,提供给客户端。
需要说明的是,数据访问请求必须在数据库连接上传输,如果客户端没有建立与数据库之间的数据库连接或者与数据库之间的数据库连接断开,则无法实现数据库中数据的访问。
接下来对本说明书实施例提供的一种数据库连接异常处理方法进行介绍。
需要说明的是,本说明书实施例提供的方法适用于客户端,该客户端可以运行在移动终端中,在实际应用中,该移动终端可以包括:智能手机、平板电脑、智能手表和个人数字助理等;或者,该客户端可以运行于计算机设备中,在实际应用中,该计算机设备可以包括:笔记本电脑、台式电脑和桌面机等;或者,该客户端可以运行于服务器中,本说明书实施例对此不作限定。
图1是本说明书的一个实施例的数据库连接异常处理方法的流程图,如图1所示,该方法可以包括以下步骤:步骤102、步骤104和步骤106,其中,
在步骤102中,按照预设第一时间间隔,定时发送目标数据库实例的连接检测请求。
本说明书实施例中,连接检测请求用于检测客户端与目标数据库实例之间的数据库连接状态,即用于数据库连接有效性的检测。
可选地,可以采用与应用端口保活心跳类似的检测方式,在这种情况下,连接检测请求用于对数据库端口进行访问。
优选地,考虑到数据库的特性,为了降低客户端资源和数据库资源的占用,连接检测请求可以为轻量级的查询请求,即保证对数据库访问的连通即可。
在一个例子中,该轻量级的查询请求可以用于请求访问数据库中某个小流量(访问量小)的业务表或配置表,例如,select*from数据库配置表limit1;或者该SQL查询请求为无意义的测试请求,例如,在Oracle中,执行select sysdate from dual测试,如果数据库连接正常,则可得到数据库的系统日期。
可见,相较于使用业务请求进行数据库连接有效性的检测,本说明书实施例中,使用轻量级的查询请求进行数据库连接有效性的检测,可以节约客户端资源和数据库资源。
本说明书实施例中,如果客户端仅连接着一个数据库实例,那么目标数据库实例即为该客户端连接的一个数据库实例;如果客户端连接着多个数据库实例,那么目标数据库实例可以为其中的一个数据库实例,也可以为其中的多个数据库实例。
考虑到通常情况下每个客户端可能连接着多个数据库实例,本说明书实施例中,可以对每个数据库实例均配置单独的连接状态检测机制,即针对每个数据库实例,均按照预设第一时间间隔,发送该数据库实例的连接检测请求。
这样,一方面,可以精确化地检测每个数据库实例的连接状态,及时发现连接状态存在异常的数据库实例,另一方面,在单个数据库实例的连接状态出现异常时,有针对性地定位到连接出现异常的数据库实例,并进行相应的处理,避免影响到其他数据库实例的运行。
可以理解的是,预设第一时间间隔关系着在数据库实例出现连接异常时,客户端能够在多久内发现,预设第一时间间隔越小,越能够尽早发现连接异常的情况。
本说明书实施例中,考虑到客户端的资源占用以及数据库资源自用的情况,可以设置预设第一时间间隔为200毫秒或者300毫秒,在这种情况下,1秒内对一个数据库实例进行3~5次连接状态的检测。或者,也可以根据实际需要,对预设第一时间间隔进行设置,本说明书实施例对此不作限定。
在步骤104中,如果检测到与目标数据库实例之间的数据库连接异常,则按照预设第二时间间隔,定时发送目标数据库实例的连接建立请求,其中,预设第二时间间隔小于预设第一时间间隔。
本说明书实施例中,可以根据目标数据库实例对连接检测请求的反馈情况(包括:反馈和未反馈),来确定是否检测到与目标数据库实例之间的数据库连接异常。
可选地,如果在发送连接检测请求的预设第一时长后,未接收到目标数据库实例对连接检测请求的反馈,则确定检测到与目标数据库实例之间的数据库连接异常。
在一个例子中,预设第一时长为200毫秒,客户端定时向服务端发送目标数据库实例的连接检测请求,该连接检测请求用于请求访问目标数据库实例中的业务表1,如果在发送连接检测请求后的200毫秒后,客户端未接收到目标数据库返回的业务表1,则确定检测到客户端与目标数据库实例之间的数据库连接异常。
本说明书实施例中,考虑到客户端第一次未接收到目标数据库实例对连接检测请求的反馈,有可能是网络状况不好导致的,为了避免这种情况下的误判,可以重试N次,例如,重试3~30次。
优选地,如果对发送的N个连接检测请求,均未接收到目标数据库实例对连接检测请求的反馈,则确定检测到与目标数据库实例之间的数据库连接异常。
在一个例子中,N为5,客户端定时向服务端发送目标数据库实例的连接检测请求,该连接检测请求用于请求访问目标数据库实例中的业务表2,如果在连续发送5个连接检测请求后,客户端均未接收到目标数据库返回的业务表2,则确定检测到客户端与目标数据库实例之间的数据库连接异常。
本说明书实施例中,在发现客户端与目标数据库实例的连接异常后,按照预设第二时间间隔,定时向服务端发送目标数据库实例的连接建立请求,即通过频繁地向服务端发送目标数据库实例的连接建立请求,来尽量保证在业务请求到达之前,恢复客户端与目标数据库实例的正常连接,从而减少对业务请求的影响。
本说明书实施例中,在检测到与目标数据库实例之间的数据库连接异常之后,可以选择断开与目标数据库实例之间的数据库连接,例如,客户端可以断开连接池中对目标数据库实例中的所有数据库连接,以节省连接池的空间;或者,也可以选择不断开与目标数据库实例之间的数据库连接。
具体的,在检测到与目标数据库实例之间的数据库连接异常之后,可以先断开与目标数据库实例之间的数据库连接,之后,再按照预设第二时间间隔,定时向服务端发送目标数据库实例的连接建立请求。
在这种情况下,连接建立请求用于请求与目标数据库实例建立新的数据库连接,这里提到的“新的数据库连接”是与之前建立的数据库连接,完全不同的数据库连接。
或者,在检测到与目标数据库实例之间的数据库连接异常之后,可以不断开与目标数据库实例之间的数据库连接,直接按照预设第二时间间隔,定时向服务端发送目标数据库实例的连接建立请求。
在这种情况下,可选地,连接建立请求可以用于请求与目标数据库实例建立新的数据库连接,这里提到的“新的数据库连接”是与之前建立的数据库连接,完全不同的数据库连接。
或者,也可以不建立新的数据库连接,而对之前建立的数据库连接进行重新连接(又可以称之为“重连”或“刷新”),具体的,客户端在之前建立的数据库连接上不停地发送连接建立请求(具体为查询请求),如果客户端接收到目标数据库实例对连接建立请求的反馈,则表明目标数据库实例(数据库实例通常具有修复机制)和数据库连接恢复正常,即数据库连接的重连成功。
考虑到客户端资源和数据库资源的占用情况,优先选择使用轻量级的查询请求替代业务请求,进行数据库连接的“刷新”,此时,连接建立请求为轻量级的查询请求。
在一个例子中,该轻量级的查询请求用于请求访问数据库中某个小流量(访问量小)的业务表或配置表,例如,select*from数据库配置表limit1;或者该SQL查询请求为无意义的测试请求,例如,在Oracle中,执行select sysdate from dual测试,如果数据库连接正常,则可得到数据库的系统日期。
相较于使用业务请求进行数据库连接有效性的检测,本说明书实施例中,使用轻量级的查询请求进行数据库连接的“刷新”,可以节约客户端资源和数据库资源。
此外,本说明书实施例中,当连接建立请求为轻量级的查询请求时,如果连接检测请求也为轻量级的查询请求,则可以复用连接检测请求进行数据库连接的“刷新”。
本说明书实施例中,可以根据数据库实例的数据库连接数以及业务量,设置预设第二时间间隔。
在一个例子中,如果数据库连接较少或业务量较小,则增加预设第二时间间隔;如果数据库连接较多或业务量较多,则减少预设第二时间间隔。例如,客户端的业务量较多,目标数据库实例有10个数据库连接,可以设置第二时间间隔为100毫秒。
此外,本说明书实施例中,在设置预设第二时间间隔时,还可以考虑连接建立请求的发送次数是否会超出数据库的资源承载上线,以避免大量的连接建立请求导致数据库再次失败。
在步骤106中,在接收到目标数据库实例对连接建立请求的反馈后,建立与目标数据库实例之间的数据库连接。
本说明书实施例中,在频繁发送目标数据库实例的连接建立请求的过程中,客户端仍然会定时发送目标数据库实例的连接检测请求,即对数据库连接状态有效性的检测仍旧保持进行。如果检测到数据库连接状态异常,则继续按照预设第二时间间隔,定时发送目标数据库实例的连接建立请求;如果检测到数据库连接状态恢复正常,则停止发送目标数据库实例的连接建立请求。
本说明书实施例中,如果连接建立请求用于请求建立新的数据库连接,那么客户端在接收目标数据库实例对连接建立请求的反馈后,建立与目标数据库实例之间新的数据库连接;如果连接建立请求用于“刷新”之前建立的数据库连接,那么客户端在接收目标数据库实例对连接建立请求的反馈后,确定之前建立的数据库连接恢复为可用状态。
为了便于理解,结合图2所示的应用场景图对本说明书实施例的技术方案进行描述,如图2所示,图2所示的应用场景图中包括:客户端220和服务端240,其中,服务端240中配置数据库实例1、数据库实例2和数据库实例3。
客户端220针对数据库实例1、数据库实例2和数据库实例3,均间隔200毫秒定时发送对应的连接检测请求,如果客户端220在预设时长内接收到数据库实例2和3对连接检测请求的反馈,而未接收到数据库实例1对连接检测请求的反馈,则确定数据库实例1的连接异常。
在确定数据库实例1的连接异常后,每间隔100毫秒发送数据库实例1的连接建立请求,同时继续发送数据库实例1、数据库实例2和数据库实例3的连接检测请求。
如果客户端220接收到数据库实例1对连接建立请求的反馈,则确定数据库实例1的连接恢复正常,停止发送数据库实例1的连接建立请求。
由上述实施例可见,该实施例中,客户端可以通过按照第一时间间隔,定时发送目标数据库的连接检测请求,来检测客户端与数据库之间的连接状态,当检测到连接异常后,通过频繁地发送目标数据库的连接建立请求,来恢复与数据库之间的正常连接。可见,本说明书实施例中,通过对每个数据库实例配置相应的连接状态检测机制,能够及时发现连接异常的数据库实例,针对连接异常的数据库实例,通过频繁地向其发送连接建立请求,来尽快恢复与数据库之间的正常连接,使得客户端的业务请求能够得到数据库的反馈,从而降低对业务请求的影响。
图3是本说明书的一个实施例的数据库连接异常处理装置的结构示意图,如图3所示,在一种软件实施方式中,数据库连接异常处理装置300可以包括:第一发送模块301、第二发送模块302和连接建立模块303,其中,
第一发送模块301,用于按照预设第一时间间隔,定时发送目标数据库实例的连接检测请求;
第二发送模块302,用于在检测到与所述目标数据库实例之间的数据库连接异常的情况下,按照预设第二时间间隔,定时发送所述目标数据库实例的连接建立请求,其中,所述预设第二时间间隔小于所述预设第一时间间隔;
连接建立模块303,用于在接收到所述目标数据库实例对所述连接建立请求的反馈后,建立与所述目标数据库实例之间的数据库连接。
由上述实施例可见,该实施例中,客户端可以通过按照第一时间间隔,定时发送目标数据库的连接检测请求,来检测客户端与数据库之间的连接状态,当检测到连接异常后,通过频繁地发送目标数据库的连接建立请求,来恢复与数据库之间的正常连接。可见,本说明书实施例中,通过对每个数据库实例配置相应的连接状态检测机制,能够及时发现连接异常的数据库实例,针对连接异常的数据库实例,通过频繁地向其发送连接建立请求,来尽快恢复与数据库之间的正常连接,使得客户端的业务请求能够得到数据库的反馈,从而降低对业务请求的影响。
可选地,作为一个实施例,数据库连接异常处理装置300,还可以包括:
第一确定模块,用于在发送所述连接检测请求的预设第一时长后,未接收到所述目标数据库实例对所述连接检测请求的反馈的情况下,确定检测到与所述目标数据库实例之间的数据库连接异常。
可选地,作为一个实施例,数据库连接异常处理装置300,还可以包括:
第二确定模块,用于在对发送的N个所述连接检测请求,均未接收到所述目标数据库实例对所述连接检测请求的反馈的情况下,确定检测到与所述目标数据库实例之间的数据库连接异常。
可选地,作为一个实施例,数据库连接异常处理装置300,还可以包括:
连接断开模块,用于在检测到与所述目标数据库实例之间的数据库连接异常的情况下,断开与所述目标数据库实例之间的数据库连接。
可选地,作为一个实施例,数据库连接异常处理装置300,还可以包括:
控制模块,用于在建立与所述目标数据库实例之间的数据库连接之后,停止发送所述目标数据库实例的连接建立请求。
可选地,作为一个实施例,所述连接检测请求可以为轻量级的查询请求。
可选地,作为一个实施例,所述连接建立请求可以为轻量级的查询请求。
图4是本说明书的一个实施例的电子设备的结构示意图,如图4所示,在硬件层面,该电子设备包括处理器,可选地还包括内部总线、网络接口、存储器。其中,存储器可能包含内存,例如高速随机存取存储器(Random-Access Memory,RAM),也可能还包括非易失性存储器(non-volatile memory),例如至少1个磁盘存储器等。当然,该电子设备还可能包括其他业务所需要的硬件。
处理器、网络接口和存储器可以通过内部总线相互连接,该内部总线可以是ISA(Industry Standard Architecture,工业标准体系结构)总线、PCI(PeripheralComponent Interconnect,外设部件互连标准)总线或EISA(Extended Industry StandardArchitecture,扩展工业标准结构)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图4中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
存储器,用于存放程序。具体地,程序可以包括程序代码,所述程序代码包括计算机操作指令。存储器可以包括内存和非易失性存储器,并向处理器提供指令和数据。
处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行,在逻辑层面上形成数据库连接异常处理装置。处理器,执行存储器所存放的程序,并具体用于执行以下操作:
按照预设第一时间间隔,定时发送目标数据库实例的连接检测请求;
如果检测到与所述目标数据库实例之间的数据库连接异常,则按照预设第二时间间隔,定时发送所述目标数据库实例的连接建立请求,其中,所述预设第二时间间隔小于所述预设第一时间间隔;
在接收到所述目标数据库实例对所述连接建立请求的反馈后,建立与所述目标数据库实例之间的数据库连接。
本说明书实施例提供一种数据库连接异常处理方法,可以通过按照第一时间间隔,定时发送目标数据库的连接检测请求,来检测客户端与数据库之间的连接状态,当检测到连接异常后,通过频繁地发送目标数据库的连接建立请求,来恢复与数据库之间的正常连接。可见,本说明书实施例中,通过对每个数据库实例配置相应的连接状态检测机制,能够及时发现连接异常的数据库实例,针对连接异常的数据库实例,通过频繁地向其发送连接建立请求,来尽快恢复与数据库之间的正常连接,使得客户端的业务请求能够得到数据库的反馈,从而降低对业务请求的影响。
可选地,作为一个实施例,检测与所述目标数据库实例之间的数据库连接异常包括:
如果在发送所述连接检测请求的预设第一时长后,未接收到所述目标数据库实例对所述连接检测请求的反馈,则确定检测到与所述目标数据库实例之间的数据库连接异常。
可选地,作为一个实施例,检测与所述目标数据库实例之间的数据库连接异常包括:
如果对发送的N个所述连接检测请求,均未接收到所述目标数据库实例对所述连接检测请求的反馈,则确定检测到与所述目标数据库实例之间的数据库连接异常。
可选地,作为一个实施例,还包括:
如果检测到与所述目标数据库实例之间的数据库连接异常,则断开与所述目标数据库实例之间的数据库连接。
可选地,作为一个实施例,在所述建立与所述目标数据库实例之间的数据库连接的步骤之后,还包括:
停止发送所述目标数据库实例的连接建立请求。
可选地,作为一个实施例,所述连接检测请求为轻量级的查询请求。
可选地,作为一个实施例,所述连接建立请求为轻量级的查询请求。
上述如本说明书图3所示实施例揭示的数据库连接异常处理装置执行的方法可以应用于处理器中,或者由处理器实现。处理器可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器可以是通用处理器,包括中央处理器(Central ProcessingUnit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(DigitalSignal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本说明书实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本说明书实施例公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。
该电子设备还可执行图1的方法,并实现数据库连接异常处理装置在图1所示实施例的功能,本说明书实施例在此不再赘述。
本说明书实施例还提供了一种计算机可读存储介质,该计算机可读存储介质存储一个或多个程序,该一个或多个程序包括指令,该指令当被包括多个应用程序的便携式电子设备执行时,能够使该便携式电子设备执行图1所示实施例的方法,并具体用于执行以下方法:
按照预设第一时间间隔,定时发送目标数据库实例的连接检测请求;
如果检测到与所述目标数据库实例之间的数据库连接异常,则按照预设第二时间间隔,定时发送所述目标数据库实例的连接建立请求,其中,所述预设第二时间间隔小于所述预设第一时间间隔;
在接收到所述目标数据库实例对所述连接建立请求的反馈后,建立与所述目标数据库实例之间的数据库连接。
总之,以上所述仅为本说明书的较佳实施例而已,并非用于限定本说明书的保护范围。凡在本说明书的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本说明书的保护范围之内。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。