物化视图刷新方法和装置、存储介质以及处理器与流程

文档序号:13004848阅读:514来源:国知局
本发明涉及数据库架构设计和优化领域,具体而言,涉及一种物化视图刷新方法和装置、存储介质以及处理器。
背景技术
::oracle数据库提供的物化视图(materializedview,简称为mv)技术在数据已执行和提供查询性能方面应用广泛,物化视图在拥有海量数据的数据仓库业务中的应用场景中,物化视图发挥的作用是提高统计任务的查询效率,比如有三个超过5亿条数据的表,要经常做三表关联查询,这样的查询需要很长的时间,此时通过物化视图的方式将这种查询的结果集提前准备好,当用户再次查询时就会极大的提高查询效率。但是,由于物化视图每次全量刷新时会产生大量的redo日志,导致主数据库向备份数据库传递的日志量急剧增加,备份数据库的旧通道被日志应用全部占满,从而使备份数据库的数据无法实时和主数据库同步,这无疑会影响在备份数据库上进行的业务查询的数据正确性。因此,既能够让物化视图发挥查询优化的作用,同时又能够有效的减少它产生redo日志的数量,这是当前需要解决的一个问题。默认情况下,物化视图的刷新可以分成了两部完成:(1)删除物化视图基表中原来的数据;(2)将新的数据结果集插入到物化视图基表中。通常(1)中的删除操作使用oracle传统的delete方式进行,如果物化视图基表的数据量非常大,这个过程将会产生大量的日志,例如在生产环境中,基表的数据大概在5亿左右,这个操作每秒产生的日志量在30m左右,由于物化视图产生大量的日志,给业务带来了比较大的影响。图1是根据现有技术的adg架构的示意图,如图1所示,在生产环境中,可以使用oracle11gr2的adg方式来实现数据的容灾,adg架构还有另外一个用途,就是一部分读数据的业务可以分到备份数据库上执行,有效的减少了主数据库的压力,这是一种很常见的读写分离架构。由于物化视图刷新过程产生的日志太多,将会产生以下两个问题:1、备份数据库需要消耗大量的io来恢复数据,生产环境中备份数据库io经常达到100%。2、数据无法保证及时恢复到备份数据库中,导致业务查询数据不准确。针对相关技术中物化视图在刷新过程中将会产生大量日志的问题,目前尚未提出有效的解决方案。技术实现要素:本发明实施例提供了一种物化视图刷新方法和装置、存储介质以及处理器,以至少解决相关技术中物化视图在刷新过程中将会产生大量日志的技术问题。根据本发明实施例的一个方面,提供了一种物化视图刷新方法,包括:利用第一任务对第一物化视图进行第一刷新操作,其中,在第一刷新操作过程中第二物化视图中存储有数据,第一物化视图与第二物化视图为基于目标基表所创建的相同的物化视图;在第一任务对第一物化视图进行第一刷新操作之后,利用第二任务对第二物化视图进行第二刷新操作,其中,在第二刷新操作过程中第一物化视图中存储有第一刷新操作后的数据。进一步地,在利用第一任务对第一物化视图进行第一刷新操作之前,该方法还包括:利用第二任务对第二物化视图进行初始化刷新操作,其中,在初始化刷新操作之后第二物化视图中存储有初始化刷新操作后的数据。进一步地,在利用第一任务对第一物化视图进行第一刷新操作之前,该方法还包括:基于目标基表创建第一物化视图和第二物化视图;在第一物化视图和第二物化视图上创建目标视图,其中,目标视图用于指示查询第一物化视图和第二物化视图合并后的数据;创建第一任务和第二任务,其中,第一任务用于对第一物化视图进行第一刷新操作,第二任务用于对第二物化视图进行第二刷新操作。进一步地,在第一刷新操作过程中,和/或在第二刷新操作过程中,该方法还包括:利用目标视图查询目标基表中的数据,其中,在第一刷新操作过程中利用目标视图查询第二物化视图中存储的数据,在第二刷新操作过程中利用目标视图查询第一物化视图中存储的数据。进一步地,在第二任务对第二物化视图进行第二刷新操作之后,该方法还包括:返回执行利用第一任务对第一物化视图进行第一刷新操作的步骤。进一步地,在第一任务对第一物化视图进行第一刷新操作之后,在预定时间段之后利用第二任务对第二物化视图进行第二刷新操作;在第二任务对第二物化视图进行第二刷新操作之后,在预定时间段之后再利用第一任务对第一物化视图进行第一刷新操作。根据本发明实施例的另一方面,还提供了一种物化视图刷新装置,包括:第一刷新单元,用于利用第一任务对第一物化视图进行第一刷新操作,其中,在第一刷新操作过程中第二物化视图中存储有数据,第一物化视图与第二物化视图为基于目标基表所创建的相同的物化视图;第二刷新单元,用于在第一任务对第一物化视图进行第一刷新操作之后,利用第二任务对第二物化视图进行第二刷新操作,其中,在第二刷新操作过程中第一物化视图中存储有第一刷新操作后的数据。进一步地,该装置还包括:初始化刷新单元,用于在利用第一任务对第一物化视图进行第一刷新操作之前,利用第二任务对第二物化视图进行初始化刷新操作,其中,在初始化刷新操作之后第二物化视图中存储有初始化刷新操作后的数据。根据本发明实施例的另一方面,还提供了一种存储介质,所述存储介质包括存储的程序,其中,所述程序运行时执行上述任一项所述的方法。根据本发明实施例的另一方面,还提供了一种处理器,所述处理器用于运行程序,其中,所述程序运行时执行上述任一项所述的方法。在本发明实施例中,采用利用第一任务对第一物化视图进行第一刷新操作,其中,在第一刷新操作过程中第二物化视图中存储有数据,第一物化视图与第二物化视图为基于目标基表所创建的相同的物化视图;在第一任务对第一物化视图进行第一刷新操作之后,利用第二任务对第二物化视图进行第二刷新操作,其中,在第二刷新操作过程中第一物化视图中存储有第一刷新操作后的数据的方式,通过利用第一任务和第二认为交替对第一物化视图和第二物化视图进行刷新操作,在对第一物化视图刷新时用户可以查询到第二物化视图中的数据,对第二物化视图刷新时用户可以查询到第一物化视图中的数据,达到了在不影响物化视图正常使用的基础上对物化视图进行刷新时减少产生的日志的目的,进而解决了相关技术中物化视图在刷新过程中将会产生大量日志的技术问题,从而实现了减少物化视图刷新过程产生的日志量的技术效果。附图说明此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:图1是根据现有技术的adg架构的示意图;图2是根据本发明实施例的物化视图刷新方法的流程图;图3是根据本发明优选实施例的物化视图刷新过程的示意图;以及图4是根据本发明实施例的物化视图刷新装置的示意图。具体实施方式为了使本
技术领域
:的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。根据本发明实施例,提供了一种物化视图刷新方法的方法实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。图2是根据本发明实施例的物化视图刷新方法的流程图,如图2所示,该方法包括如下步骤:步骤s102,利用第一任务对第一物化视图进行第一刷新操作,其中,在第一刷新操作过程中第二物化视图中存储有数据,第一物化视图与第二物化视图为基于目标基表所创建的相同的物化视图;步骤s104,在第一任务对第一物化视图进行第一刷新操作之后,利用第二任务对第二物化视图进行第二刷新操作,其中,在第二刷新操作过程中第一物化视图中存储有第一刷新操作后的数据。上述步骤通过利用第一任务和第二认为交替对第一物化视图和第二物化视图进行刷新操作,在对第一物化视图刷新时用户可以查询到第二物化视图中的数据,对第二物化视图刷新时用户可以查询到第一物化视图中的数据,达到了在不影响物化视图正常使用的基础上对物化视图进行刷新时减少产生的日志的目的,进而解决了相关技术中物化视图在刷新过程中将会产生大量日志的技术问题,从而实现了减少物化视图刷新过程产生的日志量的技术效果。需要说明的是,第一物化视图与第二物化视图为基于同一个基表所创建的物化视图,在基于同一个基表创建的第一物化视图和第二物化视图初始化为空。第一任务用于对第一物化视图进行刷新操作,第二任务用于对第二物化视图进行刷新操作,其中,第一任务与第二任务可以按照预定时间间隔交替执行。此处需要说明的是,本发明实施例中的“第一”以及“第二”只用于名称上的区别,并不限定执行的先后顺序。在利用第一任务对第一物化视图进行第一刷新操作之前,本发明实施例可以先基于目标基表创建第一物化视图和第二物化视图;并在第一物化视图和第二物化视图上创建目标视图,其中,目标视图可以为一个常规视图,可以用于指示查询第一物化视图和第二物化视图合并后的数据;创建第一任务和第二任务,其中,第一任务用于对第一物化视图进行第一刷新操作,第二任务用于对第二物化视图进行第二刷新操作。上述创建第一物化视图、第二物化视图以及目标视图、创建第一任务以及第二任务之后,本发明实施例即完成了初始化过程。之后,本发明实施例可以首先利用第二任务对第二物化视图进行初始化刷新操作,以实现更新第二物化视图中存储的数据的目的。需要说明的是,第二任务对第二物化视图执行刷新操作过程所使用的删除操作可以为delete操作,由于第一物化视图和第二物化视图初始化创建之后均为空,因此,在第二任务对第二物化视图执行刷新操作之后,第二物化视图中存储有数据,第一物化视图为空,也就是说,在初始化刷新操作之后第二物化视图中存储有初始化刷新操作后的数据。在对第二物化视图执行初始化刷新操作之后,第二物化视图中存储有初始化刷新操作后的数据,第一物化视图为空,之后本发明实施例可以执行步骤s102所示的利用第一任务对第一物化视图进行第一刷新操作,需要说明的是,第一任务对第一物化视图执行第一刷新操作过程中所使用的删除操作可以为truncate操作。在第一任务使用truncate方式对第一物化视图进行第一刷新操作过程中,第一物化视图中的数据为空,由于之前已经对第二物化视图执行了初始化刷新操作,所以在第一刷新过程中第二物化视图中存储有数据,该数据为初始化刷新操作后的数据。也就是说,在第一任务对第一物化视图进行第一刷新操作过程中,用户可以查询到第二物化视图中的数据,以实现保证物化视图正常使用的目的。在第一任务对第一物化视图进行第一刷新操作之后,本发明实施例可以执行步骤s104所示的利用第二任务对第二物化视图进行第二刷新操作,需要说明的是,第二任务对第二物化视图执行第二刷新操作过程中所使用的删除操作可以为truncate操作。在第二任务使用truncate方式对第二物化视图进行第二刷新操作过程中,第二物化视图中的数据为空,由于之前第一任务已经对第一物化视图执行了第一刷新操作,所以在第二刷新过程中第一物化视图中存储有数据,该数据为第一刷新操作后的数据。也就是说,在第二任务对第二物化视图进行第二刷新操作过程中,用户可以查询到第一物化视图中的数据,以实现保证物化视图正常使用的目的。需要说明的是,本发明实施例在执行完上述刷新流程之后,还可以继续返回步骤s102执行利用第一任务对第一物化视图进行第一刷新操作的步骤,如此反复便可以实现利用第一任务和第二任务交替对第一物化视图和第二物化视图进行刷新操作,且保证在任意时刻用户均可以查询到其中一个物化视图中的全部数据,进而达到了在不影响物化视图正常使用的情况下,利用truncate方式对物化视图进行刷新以减少日志量的效果。作为一种可选的实施例,本发明实施例第一任务和第二任务可以按照预定时间间隔交替执行,具体地,在第一任务对第一物化视图进行第一刷新操作之后,本发明实施例可以在预定时间段之后利用第二任务对第二物化视图进行第二刷新操作;在第二任务对第二物化视图进行第二刷新操作之后,本发明实施例在预定时间段之后再利用第一任务对第一物化视图进行第一刷新操作。需要说明的是,本发明实施例对预定时间段不做具体限定,其可以根据实际需求设定或者调整,例如,预定时间段可以为1小时。作为一种可选的实施例,本发明实施例用户可以在对物化视图进行刷新过程中查询数据,用户查询数据时可以利用初始化过程中所创建的目标视图进行查询。具体地。本发明实施例可以在第一刷新操作过程中,和/或在第二刷新操作过程中,利用目标视图查询目标基表中的数据,需要说明的是,由于在第一刷新过程中,第一物化视图为空,第二物化视图中存储有数据,因此在第一刷新操作过程中利用目标视图可以查询到第二物化视图中存储的数据。同理,由于在第二刷新过程中,第二物化视图为空,第一物化视图中存储有数据,因此在第二刷新操作过程中可以利用目标视图查询到第一物化视图中存储的数据。需要说明的是,采用本发明上述实施例,使用truncate方式对物化视图进行刷新可以有效地减少物化视图刷新过程所产生的日志,而且利用两个任务交替对同一个基表的两个物化视图进行刷新操作,通过常规视图便可以在任意时刻查询到其中一个物化视图中的全部数据。本发明上述实施例能够实现在不影响物化视图正常使用的前提下,有效地减少物化视图刷新过程中所产生的日志的效果。本发明还提供了一种优选实施例,该优选实施例提供了一种有效减少物化视图产生redo日志的方法。该方法可以有效的减少物化视图产生的日志量,同时不影响物化视图的正常使用。下面将对本发明优选实施例所提供的有效减少物化视图产生redo日志的方法进行详细介绍,具体地:基于oracle物化视图的使用手册,发现刷新物化视图时,除了用delete操作删除旧的数据(这是产生最多归档的操作)外,oracle还提供了另外一种清空物化视图的方式,就是truncate,这个操作基本上不会产生redo日志。truncate操作虽然可以极大的减少日志产生的数量,但是同样会遇到一个问题,即当物化视图truncate掉旧数据之后,在重新把新的数据刷新进来之前,此时物化视图里面是没有数据的,也就是说使用truncate操作刷新物化视图时,对用户是无法做到透明操作的。例如,使用truncate操作刷新物化视图的方式,刷新过程需要7分钟,这意味着在这七分钟时间里,用户是无法从物化视图中查询到任何数据的,这个是业务无法接受的,这种方式也是不可行的。为了使用truncate方式获得减少日志量的目标,又要满足用户查询数据的需要,本发明优选实施例提供了一种有效减少物化视图产生redo日志的方法,该方法既可以通过truncate方式刷新物化视图来减少产生的日志量,又可以达到用户可以在日志刷新过程中查询到数据的目标。该方法具体可以包括以下过程:1、基于一套基表,创建两个完全相同的物化视图mv1和mv2。2、在两个物化视图上,创建一个常规视图view,内容是对两个物化视图做union。3、创建两个任务(joba和jobb)来运行两个物化视图的刷新操作,2个小时运行一次,两个job交叉运行,刷新选项使用truncate方式。4、joba首先用delete方式对mv1执行第一次刷新全部数据。5、一个小时后jobb使用truncate方式对mv2执行刷新操作,在jobb执行刷新操作过程中,可以通过view的方式查询两个物化视图的union,由于joba有全部数据,jobb没有数据,所以此时用户查询到的是mv1中所有的数据。6、jobb执行成功后,joba立即使用truncate方式对mv1进行刷新操作,此时也只有一个物化视图mv2中有全部的数据,另外一个物化视图mv1为空。7、如此反复,两个job交替执行,一个job执行完后立刻对另一个job的物化视图进行删除数据操作,保证view视图查询到的总是一个物化视图中的数据。图3是根据本发明优选实施例的物化视图刷新过程的示意图,如图3所示,常规视图view是两个物化视图mv1以及mv2的union,数据表table1、table2以及table3分别是物化视图mv1以及mv2进行数据刷新后得到的数据表。用户可以通过常规视图view查询两个物化视图mv1以及mv2中的数据,其中,用户在某个时刻通过常规视图view查询数据所得到的数据为物化视图mv1中的全部数据,或者为物化视图mv2中的全部数据。下表1可以对本发明优选实施例的物化视图刷新过程进行示意,如表1所示,joba用于对物化视图mv1进行刷新操作,jobb用于对物化视图mv1进行刷新操作,且joba与jobb按照预定时间间隔(例如1小时)交替执行。表1joba(mv1)jobb(mv2)1:00刷新mv1mv2空2:00mv1有数据刷新mv2,mv2为空3:00刷新mv1,mv1为空mv2有数据4:00mv1有数据刷新mv2,mv2为空5:00刷新mv1,mv1为空mv2有数据如表1所示,在1:00joba对物化视图mv1进行刷新操作,joba执行完后mv1中有数据,mv2为空;在2:00jobb使用truncate方式对mv2进行刷新操作,此时mv2为空,mv1中有数据,用户可以查询到mv1中的全部数据,jobb执行完后mv2中有数据;在3:00joba使用truncate方式对mv1进行刷新操作,此时mv1为空,mv2中有数据,用户可以查询到mv2中的全部数据,joba执行完后mv1中有数据;如此反复,在4:00jobb使用truncate方式对mv2进行刷新操作,此时mv2为空,mv1中有数据,用户可以查询到mv1中的全部数据,jobb执行完后mv2中有数据;在5:00joba使用truncate方式对mv1进行刷新操作,此时mv1为空,mv2中有数据,用户可以查询到mv2中的全部数据,joba执行完后mv1中有数据。本发明优选实施例的有效减少物化视图产生redo日志的方法可以实现以下技术效果:1、通过在两个物化视图上面创建一个新的视图的方式,实现了总是保证有一个物化视图有数据给用户查询使用。2、最新的物化视图刷新成功后,将旧的物化视图数据删除掉,保证用户查询到最新的数据。3、在最新的物化视图刷新过程中,有一份旧的数据用于用户查询,避免了用户查不到数据的情况出现。根据本发明实施例,还提供了一种物化视图刷新装置的装置实施例,需要说明的是,该物化视图刷新装置可以用于执行本发明实施例中的物化视图刷新方法,本发明实施例中的物化视图刷新方法可以在该物化视图刷新装置中执行。图4是根据本发明实施例的物化视图刷新装置的示意图,如图4所示,该装置可以包括:第一刷新单元42,用于利用第一任务对第一物化视图进行第一刷新操作,其中,在第一刷新操作过程中第二物化视图中存储有数据,第一物化视图与第二物化视图为基于目标基表所创建的相同的物化视图;第二刷新单元44,用于在第一任务对第一物化视图进行第一刷新操作之后,利用第二任务对第二物化视图进行第二刷新操作,其中,在第二刷新操作过程中第一物化视图中存储有第一刷新操作后的数据。需要说明的是,该实施例中的第一刷新单元42可以用于执行本申请实施例中的步骤s102,该实施例中的第二刷新单元44可以用于执行本申请实施例中的步骤s104。上述模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例所公开的内容。可选地,该装置还可以包括:初始化刷新单元,用于在利用第一任务对第一物化视图进行第一刷新操作之前,利用第二任务对第二物化视图进行初始化刷新操作,其中,在初始化刷新操作之后第二物化视图中存储有初始化刷新操作后的数据。可选地,该装置还可以包括:第一创建单元,用于在利用第一任务对第一物化视图进行第一刷新操作之前,基于目标基表创建第一物化视图和第二物化视图;第二创建单元,用于在第一物化视图和第二物化视图上创建目标视图,其中,目标视图用于指示查询第一物化视图和第二物化视图合并后的数据;第三创建单元,用于创建第一任务和第二任务,其中,第一任务用于对第一物化视图进行第一刷新操作,第二任务用于对第二物化视图进行第二刷新操作。可选地,该装置还可以包括:查询单元,用于在第一刷新操作过程中,和/或在第二刷新操作过程中,利用目标视图查询目标基表中的数据,其中,在第一刷新操作过程中利用目标视图查询第二物化视图中存储的数据,在第二刷新操作过程中利用目标视图查询第一物化视图中存储的数据。可选地,该装置还可以包括:返回执行单元,用于在第二任务对第二物化视图进行第二刷新操作之后,返回执行利用第一任务对第一物化视图进行第一刷新操作的步骤。可选地,第二刷新单元44用于在第一任务对第一物化视图进行第一刷新操作之后,在预定时间段之后利用第二任务对第二物化视图进行第二刷新操作;第一刷新单元42用于在第二任务对第二物化视图进行第二刷新操作之后,在预定时间段之后再利用第一任务对第一物化视图进行第一刷新操作。通过上述单元,该装置可以达到在不影响物化视图正常使用的基础上对物化视图进行刷新时减少产生的日志的目的,进而解决了相关技术中物化视图在刷新过程中将会产生大量日志的技术问题,从而实现了减少物化视图刷新过程产生的日志量的技术效果。为了实现上述目的,根据本发明的另一方面,本发明实施例还提供了一种存储介质,所述存储介质包括存储的程序,其中,在所述程序运行时控制所述存储介质所在设备执行上述所述的物化视图刷新方法。为了实现上述目的,根据本发明的另一方面,本发明实施例还提供了一种处理器,所述处理器用于运行程序,其中,所述程序运行时执行上述所述的物化视图刷新方法。上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。以上所述仅是本发明的优选实施方式,应当指出,对于本
技术领域
:的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1