一种数据库系统的故障处理方法和装置制造方法及图纸

技术编号:18444913 阅读:55 留言:0更新日期:2018-07-14 10:22
一种数据库系统的故障处理方法和装置,故障处理装置在数据库系统执行查询处理时,对数据库对象进行在线检测,发现所述数据库对象存在故障;自动对所述数据库对象执行隔离处理。本申请通过自动故障检测和隔离,可以减轻运维的代价并降低对应用程序的影响。

A fault handling method and device for database system

A fault processing method and device for the database system. When the fault processing device performs the query processing in the database system, the database object is detected online, and the database object is found to have fault, and the database object is automatically isolated and processed. This application can reduce the cost of operation and maintenance and reduce the impact on applications by automatic fault detection and isolation.

【技术实现步骤摘要】
一种数据库系统的故障处理方法和装置
本专利技术涉及数据库,更具体地,涉及一种数据库系统的故障处理方法和装置。
技术介绍
数据库系统是数据库管理系统的简称,典型的产品如Oracle、MySQL等。数据库对象指数据库系统中的逻辑实体,例如表、索引、存储过程等。在大型互联网公司、云计算等数据中心环境中,数据库安装的实例数以万计,因此数据库中的对象出现故障的数量也会较多。例如,在MySQL等数据库产品中,常常会因为各种原因导致部分数据库对象的故障,从而影响业务的正常运行。典型的例子如某个辅助索引损坏而导致查询报错。相关技术中,数据库系统内的故障对象检测有两种方式,一种是数据库内部实现的。数据库产品(例如MySQL)在执行查询时会访问数据库对象,会对其中的系统数据或用户数据做不同程度的一致性检查,如果发现数据库对象故障(典型的情况包括系统数据或用户数据损坏等),系统会给出一个错误信息,以通知应用程序。但是系统并不会对故障对象做隔离,也不会主动尝试修复。在下次访问到该故障对象时,系统还是会报错,这种处理方式对系统管理员以及应用程序非常不友好。另一种故障对象检测的方法是在数据库外部实现的,通过数据库系统之外的模块如高可用模块在外部检测数据库是否提供服务,并做出主备切换以及数据库的重做。它在云计算以及大型互联网公司的大规模部署环境中都有应用。但是,由于故障的检测是数据库外做的,不能及时发现故障,也不具备故障隔离能力。另外,故障的修复粒度很粗,只能重做整个数据库,消耗的时间和系统资源都比较多。某些系统也会提供检查数据库对象是否故障的命令,例如MySQL的CHECKTABLE命令。但这类命令需要人工或由应用程序来调度执行,执行这些命令的时机不容易选择,不能够及时发现故障。并且,命令检查的越详细,所需的资源就越多,还会影响到并发执行的查询。因此,多数情况下,这些命令会被调度到系统的低峰期执行,以减少对业务的影响。现有技术中,故障修复是由系统管理员通过专门的命令来处理,典型的办法是删除并重建对象,这会造成数据库对象在修复期间不可使用。
技术实现思路
有鉴于此,本专利技术实施例提供一种数据库系统的故障处理方法,包括:在数据库系统执行查询处理时,对数据库对象进行在线检测,发现所述数据库对象存在故障;自动对所述数据库对象执行隔离处理。本专利技术实施例还提供一种数据库系统的故障处理装置,包括在线检测模块和自动隔离模块,其中:所述在线检测模块设置为:在执行查询处理时对数据库对象进行在线检测,发现所述数据库对象存在故障时通知所述自动隔离模块;所述自动隔离模块设置为:收到所述在线检测模块的所述通知后,自动对所述数据库对象执行隔离处理。本专利技术实施例还提供一种数据库系统的故障处理装置,包括存储器和处理器,其中:所述存储器设置为:保存程序代码;所述处理器设置为:读取所述存储器保存的程序代码以执行以下处理:在数据库系统执行查询处理时,对数据库对象进行在线检测,发现所述数据库对象存在故障时,自动对所述数据库对象执行隔离处理。上述方案通过自动故障检测和隔离,可以减轻运维的代价并降低对应用程序的影响。附图说明图1是本专利技术实施例一故障处理方法的流程图;图2是本专利技术实施例一故障处理装置的模块图;图3是本专利技术实施例二数据库语句执行过程的流程图;图4是本专利技术实施例二中一个示例性的故障处理方法的流程图。具体实施方式为使本专利技术的目的、技术方案和优点更加清楚明白,下文中将结合附图对本专利技术的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。实施例一本实施例提供一种数据库系统的故障处理方法,如图1所示,包括:步骤110,在数据库系统执行查询处理时,对数据库对象进行在线检测,发现所述数据库对象存在故障;数据库系统中访问数据的主要操作包括:增加(INSERT)、删除(DELETE)、修改(UPDATE)和查询(SELECT),简称增删改查。SELECT对应于通用计算机领域中的读操作,增、删、改对应于写操作。除查询操作外,增删改也会触发系统内部的查询处理。例如:假设表上带有主键索引,INSERT一条记录时为了确保主键索引的唯一性,需要通过内部的查询操作确保主键的取值是唯一的。DELETE和UPDATE时,必须要通过内部的查询操作找出符合条件的记录,才能对它们做删除或更新。数据库中最主要的两类对象是表和索引,还可以是存储过程对象。数据库系统进行在线检测时,根据运行上下文环境以及操作的数据库对象类型随时进行检查。例如,对于数据库中的表对象,要在打开表时检查它的元信息(例如表名、列的个数、类类型等)是否通过一致性检查,在读取数据页面时检查数据页面的循环冗余校验(CyclicRedundancyCheck,CRC)信息、元信息、记录内容等是否通过一致性检查。如果一致性检查不通过,则发现所述数据库对象存在故障。本实施例中,在发现所述数据库对象存在故障之后,还包括:如果所述数据库对象的故障属于所述数据库系统定义的需尝试在线修复的故障,先尝试在线修复所述故障,修复成功继续执行查询,修复失败再执行步骤120;如果所述数据库对象的故障不属于所述数据库系统定义的需尝试在线修复的故障,则不再进行故障修复,直接执行步骤120。也就是说,在线修复指发现到故障后马上进行修复,修复成功继续原来的业务流程,修复失败再进行相应的故障处理。本实施例中,需尝试在线修复的故障是数据库系统事先定义的,包括读取所述数据库对象的数据页面时发现的部分故障,如循环冗余校验CRC错误。数据库对象的每一页面上可以有自己的CRC信息,可用于检查和修复该页面的信息。有些故障类型,如打开数据库对象时发现表的元信息错误,读取数据库对象的数据页面时发现页面的元信息错误,不能在线修复,则在隔离之后再进行自动修复。步骤120,对所述数据库对象执行隔离处理;本实施例中,发现数据库对象故障后,数据库系统除可以给应用报错,显示相应的错误号和错误信息,记录故障审计日志等处理外,还可以对所述数据库对象执行隔离处理,包括:将所述数据库对象以及所述数据库系统内存中引用所述数据库对象的数据结构标记为失效。在标记时,以记录表的元信息的系统表INFORMATION_SCHEMA.TABLES为例,可以在其中增加一列TABLE_STATUS来标记对象状态为正常或故障,还可以再增加一列STATUS_COMMENT记录故障原因。步骤130,对所述数据库对象的故障进行自动修复处理。本实施例中,所述自动修复处理包括:在所述数据库系统内部对所述数据库对象的故障进行自动修复;或者,将所述数据库对象的故障记录在系统状态中,触发所述数据库系统之外的模块进行自动修复。需说明的是,本实施例隔离前的在线修复和隔离后的自动修复处理的数据粒度不同。隔离前的在线修复是对数据页面等细粒度的数据对象进行修复,而隔离后的自动修复是对整个表、索引等粗粒度的数据对象进行修复。在数据库系统内部进行自动修复处理时,可以先判断发现故障的数据库对象的类型,对不同类型采取不同的修复方式。例如,针对数据库中的索引对象,先创建一个同样定义的索引,但赋予一个由系统自动产生的唯一的新名字,在新索引创建成功并可用后,将新旧索引的名字互换。旧的对象定义以及对应的数据默认都保本文档来自技高网
...

【技术保护点】
1.一种数据库系统的故障处理方法,包括:在数据库系统执行查询处理时,对数据库对象进行在线检测,发现所述数据库对象存在故障;自动对所述数据库对象执行隔离处理。

【技术特征摘要】
1.一种数据库系统的故障处理方法,包括:在数据库系统执行查询处理时,对数据库对象进行在线检测,发现所述数据库对象存在故障;自动对所述数据库对象执行隔离处理。2.如权利要求1所述的故障处理方法,其特征在于:发现所述数据库对象存在故障之后,所述方法还包括:如果所述数据库对象的故障属于所述数据库系统定义的需尝试在线修复的故障,先尝试在线修复所述故障,修复成功继续执行查询,修复失败则自动对所述数据库对象执行隔离处理;如果所述数据库对象的故障不属于所述数据库系统定义的需尝试在线修复的故障,则自动对所述数据库对象执行隔离处理。3.如权利要求2述的故障处理方法,其特征在于:所述需尝试在线修复的故障包括读取所述数据库对象的数据页面时发现的部分故障,所述部分故障包括循环冗余校验CRC错误。4.如权利要求1或2或3所述的故障处理方法,其特征在于:所述隔离处理包括:将所述数据库对象以及所述数据库系统内存中引用所述数据库对象的数据结构标记为失效。5.如权利要求1或2或3所述的故障处理方法,其特征在于:自动对所述数据库对象执行隔离处理之后,所述方法还包括:对所述数据库对象的故障进行自动修复处理。6.如权利要求5所述的故障处理方法,其特征在于:所述自动修复处理包括:在所述数据库系统内部对所述数据库对象的故障进行自动修复;或者将所述数据库对象的故障记录在系统状态中,触发所述数据库系统之外的模块进行自动修复。7.一种数据库系统的故障处理装置,其特征在于,包括在线检测模块和自动隔离模块,其中:所述在线检测模块设置为:在执行查询处理时对数据库对象进行在线检测,发现所述数据库对象存在故障时通知所述自动隔离模块;所述自动隔离模块设置为:收到所述在线检测模块的所述通知后,自动对所述数据库对象执...

【专利技术属性】
技术研发人员:张文亮
申请(专利权)人:阿里巴巴集团控股有限公司
类型:发明
国别省市:开曼群岛,KY

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

1