CN116339755A - 数据库对象的安装方法、装置、设备和介质 - Google Patents
数据库对象的安装方法、装置、设备和介质 Download PDFInfo
- Publication number
- CN116339755A CN116339755A CN202310246441.9A CN202310246441A CN116339755A CN 116339755 A CN116339755 A CN 116339755A CN 202310246441 A CN202310246441 A CN 202310246441A CN 116339755 A CN116339755 A CN 116339755A
- Authority
- CN
- China
- Prior art keywords
- database
- script
- installation
- objects
- target object
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000009434 installation Methods 0.000 title claims abstract description 182
- 238000000034 method Methods 0.000 title claims abstract description 128
- 238000013515 script Methods 0.000 claims abstract description 171
- 238000003860 storage Methods 0.000 claims abstract description 41
- 230000006870 function Effects 0.000 claims description 71
- 230000008569 process Effects 0.000 claims description 36
- 238000004590 computer program Methods 0.000 claims description 20
- 238000011161 development Methods 0.000 claims description 14
- 230000015654 memory Effects 0.000 claims description 12
- 238000010586 diagram Methods 0.000 description 14
- 238000004519 manufacturing process Methods 0.000 description 14
- 238000012795 verification Methods 0.000 description 12
- 238000011900 installation process Methods 0.000 description 9
- 238000004891 communication Methods 0.000 description 5
- 230000008901 benefit Effects 0.000 description 3
- 230000014509 gene expression Effects 0.000 description 3
- 238000013508 migration Methods 0.000 description 3
- 230000005012 migration Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 238000011981 development test Methods 0.000 description 2
- 238000010801 machine learning Methods 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 238000005192 partition Methods 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 238000013475 authorization Methods 0.000 description 1
- 238000009960 carding Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000001627 detrimental effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000002349 favourable effect Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 238000004321 preservation Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000004904 shortening Methods 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
- 230000001502 supplementing effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/61—Installation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开提供了一种数据库对象的安装方法,涉及数据库技术领域,可用于金融领域或其他领域。该方法包括:获取数据库对象清单;从数据库对象清单中提取出预定类型的数据库对象,得到至少一个目标对象;根据每个目标对象的类型,获取每个目标对象对应的预安装对象的创建脚本,其中,预安装对象与对应的目标对象类型相同且同名,预安装对象的创建脚本中不包含对其他数据库对象的依赖;在数据库中执行预安装对象的创建脚本,以在数据库中安装预安装对象;以及在所有的预安装对象安装完成之后,以利用目标对象覆盖预安装对象的安装方式,在数据库中执行数据库脚本。本公开还提供了一种数据库对象的安装装置、设备、存储介质和程序产品。
Description
技术领域
本公开涉及数据库技术领域,可用于金融领域或其他领域,更具体地涉及一种数据库对象的安装方法、装置、设备、介质和程序产品。
背景技术
在数据库对象的安装过程中,诸如包(package)、存储过程(Stored procedure)或自定义函数等数据库对象,在编译检查过程中会检查数据库对象的具体实现中所依赖的其他数据库对象。如果编译检查过程中发现某个数据库对象依赖的其他数据库对象还未安装,则该数据库对象也将安装失败。
这种由于依赖冲突导致数据库对象安装失败的问题,在复杂业务系统的数据库搭建过程中影响非常显著,尤其在异构数据库迁移过程中。因为复杂业务系统的数据库中数据库对象数量多,依赖关系异常复杂。如果在数据库中直接执行数据库脚本进行数据库对象的安装,过程中不可避免会出现大量数据库对象因为依赖冲突而安装失败的问题。针对此问题,相关技术中要么需要多次重复安装才能安装完全部数据库对象,这会导致安装过程低效不可控;要么需要人工提前梳理数据库对象的依赖关系,然后根据依赖关系顺序安装数据库对象,需要投入大量人力,且容易发生差错。
发明内容
鉴于上述问题,本公开实施例提供了一种高效可控的数据库对象的安装方法、装置、设备、介质和程序产品。
本公开实施例的第一方面,提供了一种数据库对象的安装方法。所述方法包括:获取数据库对象清单,所述数据库对象清单中的数据库对象来自于数据库脚本;从所述数据库对象清单中提取出预定类型的数据库对象,得到至少一个目标对象;根据每个所述目标对象的类型,获取每个所述目标对象对应的预安装对象的创建脚本,其中,所述预安装对象与对应的所述目标对象类型相同且同名,所述预安装对象的创建脚本中不包含对其他数据库对象的依赖;在数据库中执行所述预安装对象的创建脚本,以在所述数据库中安装所述预安装对象;以及在所有的所述预安装对象安装完成之后,以利用所述目标对象覆盖所述预安装对象的安装方式,在所述数据库中执行所述数据库脚本。
根据本公开的实施例,所述预定类型包括以下至少之一:包、存储过程和自定义函数。
根据本公开的实施例,所述根据每个所述目标对象的类型,获取每个所述目标对象对应的预安装对象的创建脚本包括:当所述目标对象为包时,获取所述数据库脚本中所述目标对象的包声明创建脚本,其中,以所述目标对象的包声明创建脚本作为所述预安装对象的创建脚本。
根据本公开的实施例,所述根据每个所述目标对象的类型,获取每个所述目标对象对应的预安装对象的创建脚本包括:当所述目标对象为存储过程或者自定义函数时,获取所述数据库脚本中所述目标对象的创建脚本;从所述目标对象的创建脚本中,截取对所述目标对象进行声明的语句,得到所述预安装对象的创建脚本中的声明部分;以及在所述预安装对象的创建脚本中的声明部分的基础上拼接预设的实现体模板语句,以得到所述预安装对象的创建脚本;其中,所述实现体模板语句是按照与所述目标对象同一类型的数据库对象的编写格式预先设置的语句。
根据本公开的实施例,所述在所述预安装对象的创建脚本中的声明部分的基础上拼接预设的实现体模板语句,以得到所述预安装对象的创建脚本还包括:当所述目标对象为自定义函数时,从所述目标对象的创建脚本中解析所述目标对象的返回数据的数据类型;以及在拼接所述实现体模板语句的同时,以所述目标对象的返回数据的数据类型,填充所述实现体模板语句中的临时变量的数据类型。
根据本公开的实施例,在所述以利用所述目标对象覆盖所述预安装对象的安装方式,在所述数据库中执行所述数据库脚本之后还包括:从所述数据库中用于保存数据库对象的第一系统视图中搜索所述实现体模板语句;以及当搜索不到所述实现体模板语句时,确定所述数据库中所述目标对象的安装无遗漏。
根据本公开的实施例,所述以利用所述目标对象覆盖所述预安装对象的安装方式,在所述数据库中执行所述数据库脚本包括:识别所述数据库脚本中用于创建所述预定类型的数据库对象的语句,得到待修改语句;以用于创建或更新所述预定类型的数据库对象的语句,替换所述待修改语句,得到修改后的数据库脚本;以及在所述数据库中执行所述修改后的数据库脚本。
根据本公开的实施例,在所述以利用所述目标对象覆盖所述预安装对象的安装方式,在所述数据库中执行所述数据库脚本之后,所述方法还包括:比对所述数据库对象清单和所述数据库中用于保存数据库对象的第一系统视图;以及当所述数据库对象清单和所述第一系统视图中的数据库对象的信息一致时,确定在所述数据库中数据库对象安装正确;否则,确定在所述数据库中数据库对象安装不正确。
根据本公开的实施例,所述获取数据库对象清单包括:从安装所述数据库脚本的开发环境数据库中的用于保存数据库对象的第二系统视图中,导出所有数据库对象,得到所述数据库对象清单。
本公开实施例的另一方面,提供了一种数据库对象的安装装置。所述安装装置包括数据库对象识别单元、预安装对象生成单元和数据库对象安装单元。所述数据库对象识别单元用于:获取数据库对象清单,所述数据库对象清单中的数据库对象来自于数据库脚本;以及从所述数据库对象清单中提取出预定类型的数据库对象,得到至少一个目标对象。所述预安装对象生成单元用于:根据每个所述目标对象的类型,获取每个所述目标对象对应的预安装对象的创建脚本,其中,所述预安装对象与对应的所述目标对象类型相同且同名,所述预安装对象的创建脚本中不包含对其他数据库对象的依赖。所述数据库对象安装单元用于:在数据库中执行所述预安装对象的创建脚本,以在所述数据库中安装所述预安装对象;以及在所有的所述预安装对象安装完成之后,以利用所述目标对象覆盖所述预安装对象的安装方式,在所述数据库中执行所述数据库脚本。
根据本公开的实施例,所述安装装置还包括数据库对象校验单元。在一个实施例中,所述数据库校验单元用于:从所述数据库中用于保存数据库对象的第一系统视图中搜索实现体模板语句;以及当搜索不到所述实现体模板语句时,确定所述数据库中所述目标对象的安装无遗漏。在另一个实施例中,所述数据库校验单元用于:比对所述数据库对象清单和所述数据库中用于保存数据库对象的第一系统视图;以及当所述数据库对象清单和所述第一系统视图中的数据库对象的信息一致时,确定在所述数据库中数据库对象安装正确;否则,确定在所述数据库中数据库对象安装不正确。
本公开实施例的第三方面,提供了一种电子设备。所述电子设备包括一个或多个处理器和存储器。所述存储器用于存储一个或多个程序。其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得一个或多个处理器执行上述数据库对象的安装方法。
本公开实施例的第四方面,还提供了一种计算机可读存储介质,其上存储有可执行指令,该指令被处理器执行时使处理器执行上述数据库对象的安装方法。
本公开实施例的第五方面,还提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述数据库对象的安装方法。
上述一个或多个实施例具有如下优点或有益效果:可以至少有效减少数据库对象安装中由于依赖冲突而安装失败的问题,并因此可以使数据库对象的安装过程可有效控制在两轮中,其中,第一轮安装预安装对象,第二轮以覆盖安装的方式执行数据库脚本,提高数据库对象的安装效率。
附图说明
通过以下参照附图对本公开实施例的描述,本公开的上述内容以及其他目的、特征和优点将更为清楚,在附图中:
图1示意性示出了根据本公开实施例的数据库对象的安装方法、装置、设备、介质和程序产品的应用场景图;
图2示意性示出了根据本公开实施例的数据库对象的安装方法的流程图;
图3示意性示出了根据本公开一实施例的预定类型的数据库对象及其预安装对象的创建脚本;
图4示意性示出了本公开一实施例中存储过程或自定义函数的预安装对象的创建脚本的获取流程;
图5示意性示出了本公开一实施例中以覆盖安装的方式进行数据库对象正式安装的流程图;
图6示意性示出了根据本公开另一实施例的数据库对象的安装方法的流程图;
图7示意性示出了根据本公开一实施例的数据库对象的安装装置的方框图;
图8示意性示出了根据本公开另一实施例的数据库对象的安装装置的结构框图;以及
图9示意性示出了适于实现根据本公开实施例的数据库对象的安装方法的电子设备的方框图。
具体实施方式
以下,将参照附图来描述本公开的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本公开的范围。在下面的详细描述中,为便于解释,阐述了许多具体的细节以提供对本公开实施例的全面理解。然而,明显地,一个或多个实施例在没有这些具体细节的情况下也可以被实施。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本公开的概念。
在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本公开。在此使用的术语“包括”、“包含”等表明了所述特征、步骤、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。
在此使用的所有术语(包括技术和科学术语)具有本领域技术人员通常所理解的含义,除非另外定义。应注意,这里使用的术语应解释为具有与本说明书的上下文相一致的含义,而不应以理想化或过于刻板的方式来解释。
在使用类似于“A、B和C等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有A、B和C中至少一个的系统”应包括但不限于单独具有A、单独具有B、单独具有C、具有A和B、具有A和C、具有B和C、和/或具有A、B、C的系统等)。
复杂业务系统的数据库对象数量多,依赖关系异常复杂。如果直接执行数据库脚本进行安装,需要通过多次安装来解决,往往需要循环数十次,安装时间会增加十多倍。这是因为,数据库脚本的执行,是顺序读脚本进行安装。但是在数据库脚本中,数据库对象之间的相互依赖顺序,与数据库对象的创建顺序却不完全一致。例如,数据库脚本中出现在前的某个数据库对象的实现中,所依赖的其他数据库对象,完全可能在数据库脚本中靠后位置中才进行创建。这样当初次执行数据库脚本时,势必会导致先出现的该数据库对象因为依赖冲突安装失败。因此可以通过重复执行数据库脚本来完成所有数据库对象的安装,其中每次循环都成功安装部分数据库对象,直到所有数据库对象都安装成功。然而这会导致数据库对象的安装时间超长,并且安装错误信息过多,不利于有效的错误信息发现和安装时间控制。如果开发人员尝试规避此类报错,则需要人工梳理依赖关系、并根据依赖关系顺序安装数据库对象进行解决。但由于依赖关系复杂,人工梳理需投入工作量大,也容易发生差错。
有鉴于此,本公开的实施例提供了一种高效可控的数据库对象的安装方法、装置、设备、介质和程序产品。根据本公开的实施例,在执行数据库脚本进行数据库对象的安装之前,可以针对可能由于依赖冲突问题导致安装失败的预定类型的数据库对象,预先安装同名同类型而且不依赖其他数据库对象的预安装对象,然后再以覆盖掉预安装对象的方式执行数据库脚本,进行数据库对象的正式安装。
其中,为了实现预安装对象的预先安装,可以根据预定类型的数据库对象的信息,获取对应的预安装对象的创建脚本,这样通过执行预安装对象的创建脚本,就可以进行预安装对象的安装。其中,通过对预安装对象的创建脚本的设置,可以使得预安装对象与其对应的数据库对象同名同类型,方便正式安装时实现覆盖安装。同时,设置预安装对象的创建脚本中不包含对其他数据库对象的依赖,这样可以保证预安装对象不会因为依赖冲突的问题而导致安装失败。
可见,本公开实施例可以使数据库对象的安装过程可有效控制在两轮中,其中,第一轮安装预安装对象,第二轮以覆盖安装的方式执行数据库脚本。以此方式,有效减少了数据库对象安装中由于依赖冲突而安装失败的现象,提高数据库对象的安装效率。
图1示意性示出了根据本公开实施例的数据库对象的安装方法、装置、设备、介质和程序产品的应用场景图。需要注意的是,图1所示仅为可以应用本公开实施例的系统架构的示例,以帮助本领域技术人员理解本公开的技术内容,但并不意味着本公开实施例不可以用于其他设备、系统、环境或场景。
如图1所示,根据该实施例的应用场景100可以包括终端设备101、服务器102和数据库103。其中,服务器102可以分别与终端设备101和数据库103交互。
终端设备101可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
服务器102可以是数据库103的管理服务器。
用户(例如数据库维护人员)可以使用终端设备101与服务器102交互,控制对数据库103的版本安装。例如,用户可以通过在终端设备101中的操作,选择要执行的数据库脚本,并启动数据库脚本的修改或执行等。
需要说明的是,本公开实施例所提供的数据库对象的安装方法一般可以由服务器102执行。相应地,本公开实施例所提供的数据库对象的安装装置一般可以设置于服务器102中。本公开实施例所提供的数据库对象的安装方法也可以由不同于服务器102且能够与终端设备101和数据库103、和/或服务器102通信的服务器或服务器集群执行。相应地,本公开实施例所提供的数据库对象的安装装置也可以设置于不同于服务器102且能够与终端设备101和数据库103、和/或服务器102通信的服务器或服务器集群中。
应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
需要说明的是,本公开实施例确定的数据库对象的安装方法和装置可用于金融领域,也可用于除金融领域之外的任意领域,本公开对应用领域不做限定。
以下将基于图1描述的场景,通过图2~图6对本公开实施例的数据库对象的安装方法进行详细描述。应注意,以下方法中各个操作的序号仅作为该操作的表示以便描述,而不应被看作表示该各个操作的执行顺序。除非明确指出,否则该方法不需要完全按照所示顺序来执行。
图2示意性示出了根据本公开实施例的数据库对象的安装方法的流程图。
如图2所示,该实施例的数据库对象的安装方法包括操作S210~操作S250。
在操作S210,获取数据库对象清单,该数据库对象清单中的数据库对象来自于数据库脚本。
在一些实施例中,可以对数据库脚本进行识别,提取出其中的数据库对象。例如,可以通过按照数据库对象的命名规则进行关键字匹配,来提取数据库对象。又例如,可以训练机器学习模型,对数据库脚本中的数据库对象的命名规则进行学习,从而利用训练好的机器学习模型来识别出数据库对象。
在一些实施例中,如果是在数据库脚本开发测试完成后,要在生产环境下进行数据库103安装时,可以从安装数据库脚本的开发环境数据库中的用于保存数据库对象的第二系统视图中,导出所有数据库对象,得到数据库对象清单。
在操作S220,从数据库对象清单中提取出预定类型的数据库对象,得到至少一个目标对象。该预定类型可以是用户根据在数据库对象的安装方面经验,汇总出的可能存在依赖冲突问题的数据库对象的类型。
在一个实施例中,预定类型可以包括但不限于包、存储过程和自定义函数,如图3中的示例。
具体地,包是一种数据库程序设计元素的组合,包括包声明(package)与包体(package body)两部分。其中,包声明是创建包的规范说明,声明包内数据类型、变量、常量、游标等元素,为使用者提供了透明的接口,包体是包声明的具体实现。包体的安装需要依赖包声明,而且其他数据库对象也可以依赖包声明。
存储过程是一组为了完成特定功能的SQL语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。在数据量特别庞大的情况下利用存储过程能达到倍速的效率提升。其中,其他数据库对象的实现中可以依赖存储过程,当然存储过程的实现也可能会依赖其他数据库对象。。
自定义函数是一组用户自行编写的函数,用以补充实现SQL或数据库内置函数无法提供的功能。自定义函数具有返回值,可出现在SQL语句中如何可能出现表达式的位置。其中,自定义数据库对象通常会被其他数据库对象所依赖。当然自定义函数的实现本身也可能依赖其他数据库对象。
在操作S230,根据每个目标对象的类型,获取每个目标对象对应的预安装对象的创建脚本,其中,预安装对象与对应的目标对象类型相同且同名,预安装对象的创建脚本中不包含对其他数据库对象的依赖。
在数据库中,数据库脚本和数据库对象的创建脚本都是以数据库模式定义语言(Data Definition Language,DDL)表述的。其中,DDL是用于描述数据库中要存储的现实世界实体的语言。
本公开实施例中,预安装对象与对应的目标对象类型相同且同名,可以方便后续正式安装时实现覆盖安装。预安装对象的创建脚本中不包含对其他数据库对象的依赖,这样可以保证后续对预安装对象的安装过程中不会因为依赖冲突的问题而导致安装失败。
接下来在操作S240,在数据库103中执行预安装对象的创建脚本,以在数据库103中安装预安装对象。
然后在操作S250,在所有的预安装对象安装完成之后,以利用目标对象覆盖预安装对象的安装方式,在数据库103中执行数据库脚本。
例如,在数据库脚本的执行过程中,可以统一设置如遇到同名同类型的数据库对象安装冲突时,均选择以覆盖的方式进行安装。当然这种方式通常适用于在正式安装前,可以确定除了预安装对象外没有其他数据库对象被安装的情况下。否则,例如如果原有数据库对象没有卸载干净,就会对数据库对象的安装带来干扰或混乱。
又例如,在另一些实施例中,对数据库脚本中的代码进行修改。例如当预定类型包括包、自定义函数或存储过程时,可以将“CREATE PACKAGE”、“CREATE FUNC TION”或“CREATE PROCEDURE”关键字中的“CREATE”替换为“CREATE OR REPLACE”。这样可以使预定类型的数据库对象的覆盖安装更精准。
图3示意性示出了根据本公开一实施例的预定类型的数据库对象及其预安装对象的创建脚本。
在图3的示意中,该预定类型的数据库对象可以是包、存储过程和自定义函数。
对于包,其依赖关系在数据库脚本中体现为,在数据库脚本中包声明和包体分为两个DDL,包体的安装需要依赖包声明,且其他数据库对象要依赖包时,也是引用包声明。
因此,为了解决与包相关的依赖安装冲突问题,在上述操作S230中当目标对象为包时,可以获取目标对象的包声明创建DDL(即,包声名创建脚本),并以目标对象的包声明创建DDL直接作为目标对象的预安装对象的创建脚本。其中,可以是从数据库脚本中导出目标对象的包声明创建DDL,或者可以从安装数据库脚本的开发环境数据库中导出目标对象的包声明创建DDL。
这样,通过操作S240,可以在数据库脚本正式安装前,先安装包声明。从而在操作S250中正式安装时,凡是依赖包的数据库对象(无论是包体,还是其他数据库对象),因为包声明已经存在,就能够正常安装。
对于自定义函数和存储过程:在数据库脚本中,这类数据库对象的声明和实现是集中在一个DDL中。当其他对象依赖自定义函数或者存储过程时,通常是通过调用函数名或者存储过程名来实现。因此,为了解决与自定义函数和存储过程相关的依赖冲突问题,在上述操作S230中可以按照预安装对象的创建脚本设置要求,生成自定义函数和存储过程的伪对象的创建DDL(即,伪对象的创建脚本),然后以伪对象的创建DDL作为预安装对象的创建脚本,通过操作S240和操作S250实现快速安装。即,对于自定义函数或存储过程类的对象,其预安装对象为同名同类型、且不依赖其他数据库对象的伪对象。一个实施例中,自定义函数或存储过程类的对象的预安装对象(即伪对象)的创建脚本的获取流程可以参考图4的示意。在此处需要说明的是,在下文中,对于自定义函数或存储过程,不明确区分术语伪对象和预安装对象。
图4示意性示出了本公开一实施例中存储过程或自定义函数的预安装对象的创建脚本的获取流程。
如图4所示,根据该实施例,当目标对象为存储过程或者自定义函数时,操作S230中获取预安装对象的创建脚本的流程可以包括操作S231~操作S233。
首先在操作S231,当目标对象为存储过程或者自定义函数时,获取数据库脚本中目标对象的创建脚本。
然后在操作S232,从目标对象的创建脚本中,截取对目标对象进行声明的语句,得到预安装对象的创建脚本中的声明部分。例如,可以通过关键字识别出对目标对象进行声明的语句。
接下来在操作S233,在预安装对象的创建脚本中的声明部分的基础上拼接预设的实现体模板语句,以得到预安装对象的创建脚本.其中,实现体模板语句是按照与目标对象同一类型的数据库对象的编写格式预先设置的语句。
例如,对于存储过程或自定义函数类的目标对象,可以从数据库脚本或者安装数据库脚本的开发环境数据库中,导出该目标对象的创建DDL。然后识别该目标对象的创建DDL中,从“CREATE”到“IS”或“AS”关键字之间的部分,作为声明部分。该声明部分可以包含对象名称、出入参声明、返回值声明、执行权限约束、实现语言、稳定性属性等要素。然后在上述声明部分之后,在拼接上按照存储过程或自定义函数的格式编写的实现体模板语句,得到伪对象的创建DDL。其中,该实现体模板语句中不包含对其他数据库对象的依赖或引用。在一些实施例中,还可以在该实现体模板语句中添加特定的注释字符或语句,便于在操作S250覆盖安装完成后,检查是否有伪对象的遗漏。
存储过程和自定义函数在数据库脚本中的实现语句的格式有所不同。相应地,二者的伪对象的实现体模板语句也有所不同。
在一个实施例中,存储过程的伪对象的实现体模板语句可以如下表1所示。
表1
从而在一个实施例中,存储过程的伪对象的创建DDL的完整产生过程例如可以是:先截取存储过程的创建DDL中从“CREATE”到“IS”或“AS”关键字之间的部分,作为声明部分;然后在该声明部分之后拼接上如表1所示的实现体模板语句,得到预安装使用的伪对象。表1中所示的存储过程的实现体模板语句中“BEGIN...END”之间为伪对象的具体实现逻辑,其中,是以注释性语句“当前实现为预编译使用的伪对象,正式安装后应删除”来定义了一个存储过程的具体实现逻辑。
这样当在操作S240中对该伪对象进行安装时,不存在对其他数据库对象的依赖问题,可以快速便捷安装,实现占位。然后在操作S250中正式安装时,再通过数据库脚本中与该伪对象同名的存储过程以覆盖安装的方式替换掉该伪对象,这样就能实现正确的存储过程的快速安装,而且还避免了报错,使存储过程一类的对象的安装高效可控。
在数据库脚本中,自定义函数与存储过程的格式有所不同。其中,自定义函数要通过返回值(或称为返回数据)来定义输出。相应地,自定义函数的伪对象的实现提模板语句可以包括对返回数据的声明。
在一个实施例中,自定义函数的伪对象的实现体模板语句可以如下表2所示。
表2
其中,DECLARE中的tmp为根据自定义函数声明中的返回数据构造的临时变量,需要解析声明中的“RETURN”或“RETURNS”关键字之后的返回数据类型,来填充该tmp的数据类型。“BEGIN...END”之间为伪对象的具体实现逻辑,类似地,也可以是以注释性语句“当前实现为预编译使用的伪对象,正式安装后应删除”来定义了一个自定义函数的具体实现逻辑。
从而对于自定义函数,当在伪对象的创建脚本中的声明部分的基础上,拼接如表2所示的实现体模板语句时,还需要从自定义函数的创建脚本中解析自定义函数的返回数据的数据类型,然后在拼接实现体模板语句的同时,以该自定义函数的返回数据的数据类型,填充实现体模板语句中的临时变量的数据类型。
结合图2和图3可以看出,由于包的预安装对象为包声明,且包声明的创建脚本可以直接从数据库脚本中导出,因此如果预定类型的数据库对象仅为包时,当在操作S240中提前安装了包声明,以及操作S250中覆盖安装数据库脚本后,可以不用校验是否有包声明的缺失或遗漏,甚至在操作S250中可以不必采用覆盖安装。然而,当预定类型的数据库对象还包括自定义函数或存储过程等其他数据库对象时,由于自定义函数或存储过程的预安装对象为仅起到占位作用的伪对象,因此在操作S250中覆盖安装了数据库脚本后,有必要检查是否还有伪对象未被替换掉。具体地,根据本公开的一个实施例,在操作S250之后,可以从数据库103中用于保存数据库对象的第一系统视图中搜索实现体模板语句,例如搜索实现体模板语句中特定的注释语句或注释关键词,当搜索不到实现体模板语句时,确定数据库103中各个目标对象均已替换对应的预安装对象,数据库对象的安装无遗漏。
图5示意性示出了本公开一实施例中以覆盖安装的方式进行数据库对象正式安装的流程图。
如图5所示,根据该实施例操作S250可以包括操作S251~操作S253。
首先在操作S251,识别数据库脚本中用于创建预定类型的数据库对象的语句,得到待修改语句。
接下来在操作S252,以用于创建或更新预定类型的数据库对象的语句,替换待修改语句,得到修改后的数据库脚本。
例如,识别述数据库脚本中是否包含“CREATE PACKAGE”、“CREATE FUNCTION”或“CREATE PROCEDURE”关键字,如包含则先将安装脚本中的“CREATE”替换为“CREATE ORREPLACE”,确保安装方式采用覆盖安装。
然后在操作S253,在数据库103中执行修改后的数据库脚本。
以此方式,实现对预定类型的数据库对象的精准覆盖安装,避免与提前创建好的预安装对象(尤其是伪对象)冲突,减少数据库脚本安装过程中的报错,提高安装效率。
本公开实施例的数据库对象的安装方法,可以有效实现复杂业务系统数据库的对象版本快速安装,有效减少复杂业务系统的包、存储过程、自定义函数等数据库对象因相互间依赖而带来的大量安装失败的问题,从而缩短了版本安装时间,大幅减少版本安装错误信息,减少核对成本和差错,为异构数据库迁移等数据库对象的安装提供了有利条件。
图6示意性示出了根据本公开另一实施例的数据库对象的安装方法的流程图。其中图6所示为是在数据库脚本开发测试完成后,要在生产环境下进行数据库对象的安装流程。其中,本领域技术人员可以理解,图6所示的流程仅为示意,不构成对本公开的限定。
如图6所示,该流程可以包括S601~S606。
首先在S601,开发人员在生产上线前,从安装并测试数据库脚本的开发环境数据库的数据库系统视图中,导出所有数据库对象清单,并从开发环境数据库中导出包声明创建DDL,以及存储过程与自定义函数的创建DDL。其中,基于存储过程与自定义函数的创建DDL,参考前文图4介绍的方法,生成伪对象的创建DDL。
然后在S602,运维人员在生产环境数据库(例如,数据库103)中,先进行数据库、用户、Schema等基础数据库对象的创建,并做好用户初始化授权。
接下来在S603,在正式安装前,进行包声明与伪对象的安装。具体过程可以参考前文中关于操作S240的介绍。
接下来在S604,进行以覆盖伪对象的方式进行数据库对象安装。先识别安装脚本中创建包、存储过程与自定义函数中的内容,修改为通过“CREATE OR REPLACE”覆盖方式安装,再执行安装脚本,并记录安装日志。
接下来在S605,在数据库对象安装任务完成后,自动检查生成安装后是否还存在伪对象,并检查开发环境数据库与生产环境数据库中的数据库对象数量与关键属性差异,校验数据库安装是否正确,生成安装差异清单,结束安装。
具体地,自动检查生成安装后是否还存在伪对象时,通过数据库自有的保存包、存储过程、自定义函数具体代码的系统视图校验,查询是否还有包含诸如前述表1或表2所示的注释语句“当前实现为预编译使用的伪对象,正式安装后应删除”,如果搜索到则获取具体对象名称,用于人工确认是否有对象遗漏安装。
检查开发环境数据库与生产环境数据库103中的数据库对象数量与关键属性差异时,可以比对安装之前获取到的数据库对象清单和生产环境数据库中用于保存数据库对象的第一系统视图。当上述数据库对象清单和第一系统视图中的数据库对象的信息一致时,确定在数据库中数据库对象安装正确;否则,确定在数据库中数据库对象安装不正确。
具体地,在比对上述数据库清单和第一系统视图中的数据库对象的信息时,可以自动逐笔记录查询,检查每个数据库对象中记录的关键属性是否一致,确保生产环境数据库中数据对象安装正确。其中,所有数据库对象的核对信息可以包括对象名称、所有者、状态等基本信息。其中,可以根据不同对象类型,核对不同的关键属性:例如,对于表与分区表,要核对表列、列数据类型、长度、精度、是否允许为空;对于索引,要核对索引列、列顺序、唯一性、分区特性;对于存储过程、包内存储过程与自定义函数等,要核对参数数量、有默认值的参数数量、返回值的数据类型、出入参数据类型等。
最后在S606,由开发人员或运维人员结合S604中记录的安装日志、与S605中生成的安装差异清单,分析安装情况与差异情况。
本公开实施例,通过提前执行预安装对象(诸如,包声明、伪对象)的创建脚本,在正式的数据库脚本执行前先安装预安装对象进行占位,然后再以覆盖预安装对象(重点是伪对象)的方式执行数据库脚本,进行数据库对象的安装,避免了诸如包、存储过程、自定义函数等数据库对象在安装过程出现依赖对象缺失的报错,使得数据库对象安装过程可有效控制在两轮中,确保复杂业务系统数据库迁移时,版本安装过程可控高效。并且,本公开实施例,提供安装后校验功能,及自动核对功能,减少人工核对成本,有效保证数据库对象版本安装正确性。
本公开实施例,在将开发环境测试通过的数据库脚本安装到生产环境数据库中时,可以有效缩短安装时间,提高数据库对象的安装效率,减少数据库版本升级或者数据库迁移对生产环境的影响。
基于上述各个实施例的数据库对象的安装方法,本公开还提供了一种数据库对象的安装装置。以下将结合图7和图8对该装置进行详细描述。
图7示意性示出了根据本公开一实施例的数据库对象的安装装置700的方框图。
如图7所示,根据本公开一些实施例,该装置700可以包括数据库对象识别单元710、预安装对象生成单元720和数据库对象安装单元730。根据本公开另一些实施例,该装置700还可以进一步包括数据库对象校验单元740。该装置700可以实现参考图2~图6所描述的方法。
数据库对象识别单元710用于:获取数据库对象清单,数据库对象清单中的数据库对象来自于数据库脚本;以及从数据库对象清单中提取出预定类型的数据库对象,得到至少一个目标对象。在一个实施例中,数据库对象识别单元710可以执行前述操作S210和操作S220。
预安装对象生成单元720用于:根据每个目标对象的类型,获取每个目标对象对应的预安装对象的创建脚本,其中,预安装对象与对应的目标对象类型相同且同名,预安装对象的创建脚本中不包含对其他数据库对象的依赖。在一个实施例中,预安装对象生成单元720可以执行前述操作S230。
在一些实施例中,预安装对象生成单元还用于:当目标对象为包时,获取数据库脚本中目标对象的包声明创建脚本,其中,以目标对象的包声明创建脚本作为预安装对象的创建脚本。
在另一些实施例中,预安装对象生成单元还用于:当目标对象为存储过程或者自定义函数时,获取数据库脚本中目标对象的创建脚本;从目标对象的创建脚本中,截取对目标对象进行声明的语句,得到预安装对象的创建脚本中的声明部分;以及在预安装对象的创建脚本中的声明部分的基础上拼接预设的实现体模板语句,以得到预安装对象的创建脚本。其中,实现体模板语句是按照与目标对象同一类型的数据库对象的编写格式预先设置的语句。例如,预安装对象生成单元可以执行前述操作S231~S233。
数据库对象安装单元730用于:在数据库中执行预安装对象的创建脚本,以在数据库中安装预安装对象,以及在所有的预安装对象安装完成之后,以利用目标对象覆盖预安装对象的安装方式,在数据库中执行数据库脚本。在一个实施例中,该数据库对象安装单元730可以执行前述操作S240和操作S250。
在一些实施例中,数据库对象安装单元730还用于:识别数据库脚本中用于创建预定类型的数据库对象的语句,得到待修改语句;以用于创建或更新预定类型的数据库对象的语句,替换待修改语句,得到修改后的数据库脚本;以及在所有的预安装对象安装完成之后,在数据库中执行修改后的数据库脚本。例如,数据库对象安装单元730可以执行前述操作S251~操作S253。
数据库校验单元740可以执行前文介绍的操作S605,用于在数据库对象安装任务完成后,自动检查生成安装后是否还存在伪对象,并检查开发环境数据库与生产环境数据库中的数据库对象数量与关键属性差异,校验数据库安装是否正确,生成安装差异清单。
在一个实施例中,数据库校验单元740可以用于从数据库中用于保存数据库对象的第一系统视图中搜索实现体模板语句;以及当搜索不到实现体模板语句时,确定数据库中目标对象的安装无遗漏。
在另一个实施例中,数据库校验单元740用于:比对数据库对象清单和数据库中用于保存数据库对象的第一系统视图;以及当数据库对象清单和第一系统视图中的数据库对象的信息一致时,确定在数据库中数据库对象安装正确;否则,确定在数据库中数据库对象安装不正确。
根据本公开的实施例,数据库对象识别单元710、预安装对象生成单元720、数据库对象安装单元730和数据库对象校验单元740中的任意多个模块可以合并在一个模块中实现,或者其中的任意一个模块可以被拆分成多个模块。或者,这些模块中的一个或多个模块的至少部分功能可以与其他模块的至少部分功能相结合,并在一个模块中实现。根据本公开的实施例,数据库对象识别单元710、预安装对象生成单元720、数据库对象安装单元730和数据库对象校验单元740中的至少一个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(FPGA)、可编程逻辑阵列(PLA)、片上系统、基板上的系统、封装上的系统、专用集成电路(ASIC),或可以通过对电路进行集成或封装的任何其他的合理方式等硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,数据库对象识别单元710、预安装对象生成单元720、数据库对象安装单元730和数据库对象校验单元740中的至少一个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。
图8示意性示出了根据本公开另一实施例的数据库对象的安装装置800的结构框图。本领域技术人员可以理解,图8所示仅为示例,不对本公开构成限定。
如图8所示,装置800可以包括数据库对象识别单元801、预安装对象生成单元802、数据库对象安装单元803和数据库对象校验单元804。
数据库对象识别单元801,主要负责在开发环境数据库中,通过数据库系统视图导出所有数据库对象清单,提供给数据库对象校验单元804进行校验。同时并对包、存储过程、自定义函数等数据库对象,逐个对象导出对象创建DDL。对于包,导出包声明创建DDL。对于存储过程与自定义函数,导出创建DDL。
预安装对象生成单元802,主要负责生成存储过程、自定义函数的预安装对象的创建DDL。由于包的预安装对象为包声明,因此,可以将已导出的包声明创建DDL,作为包的预安装对象的创建DDL。而对于存储过程、自定义函数,则需要生成伪对象的创建DLL。
具体地,识别存储过程与自定义函数的创建DDL中,从“CREATE”到“IS”或“AS”关键字之间的部分,作为声明部分,包含对象名称、出入参声明、返回值声明、执行权限约束、实现语言、稳定性属性等要素。
然后对于存储过程,在上述声明部分的基础上补充如表1所示的DDL语句作为实现体。
对于自定义函数,可以解析声明中的“RETURN”或“RETURNS”关键字之后的返回数据类型,用于构造对应的临时变量,并在上述声明部分的基础上补充如表2所示的DDL语句作为实现体。
数据库对象安装单元803,主要负责生产环境下的数据库对象的安装。
在安装流程开始前,先执行数据库对象识别单元801导出的所有包声明的创建DDL,与预安装对象生成单元802生成的所有伪对象的创建DDL。
然后对正式的数据库对象安装脚本。先识别是否包含“CREATE PACKAGE”、“CREATEFUNCTION”或“CREATE PROCEDURE”关键字,如包含则先将安装脚本中的“CREATE”替换为“CREATE OR REPLACE”,确保安装方式采用覆盖安装,避免与提前创建好的伪对象DDL冲突,然后再正常执行安装脚本。
数据库对象校验单元804,主要负责在生产环境对象安装后的对象校验功能。具体校验过程如图6中操作S605所示。
本公开实施例,在数据库开发环境自动提取包声明,并生成包含存储过程、自定义函数声明的伪对象,在生产环境数据库对象安装过程中,先安装包声明和伪对象,再进行正式数据库对象安装,从而避免包、存储过程、自定义函数等对象安装过程中因相互依赖而导致的安装报错。在版本安装后,通过检查来确认数据库中是否还有伪对象,并对开发与生产环境数据库对象数量进行确认,以此来保证安装的正确性。
图9示意性示出了适于实现根据本公开实施例的数据库对象的安装方法的电子设备的方框图。
如图9所示,根据本公开实施例的电子设备900包括处理器901,其可以根据存储在只读存储器(ROM)902中的程序或者从存储部分908加载到随机访问存储器(RAM)903中的程序而执行各种适当的动作和处理。处理器901例如可以包括通用微处理器(例如CPU)、指令集处理器和/或相关芯片组和/或专用微处理器(例如,专用集成电路(ASIC))等等。处理器901还可以包括用于缓存用途的板载存储器。处理器901可以包括用于执行根据本公开实施例的方法流程的不同动作的单一处理单元或者是多个处理单元。
在RAM 903中,存储有电子设备900操作所需的各种程序和数据。处理器901、ROM902以及RAM 903通过总线904彼此相连。处理器901通过执行ROM 902和/或RAM 903中的程序来执行根据本公开实施例的方法流程的各种操作。需要注意,所述程序也可以存储在除ROM 902和RAM 903以外的一个或多个存储器中。处理器901也可以通过执行存储在所述一个或多个存储器中的程序来执行根据本公开实施例的方法流程的各种操作。
根据本公开的实施例,电子设备900还可以包括输入/输出(I/O)接口905,输入/输出(I/O)接口905也连接至总线904。电子设备900还可以包括连接至I/O接口905的以下部件中的一项或多项:包括键盘、鼠标等的输入部分906;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分907;包括硬盘等的存储部分908;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分909。通信部分909经由诸如因特网的网络执行通信处理。驱动器910也根据需要连接至I/O接口905。可拆卸介质911,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器910上,以便于从其上读出的计算机程序根据需要被安装入存储部分908。
本公开还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中描述的设备/装置/系统中所包含的;也可以是单独存在,而未装配入该设备/装置/系统中。上述计算机可读存储介质承载有一个或者多个程序,当上述一个或者多个程序被执行时,实现根据本公开实施例的方法。
根据本公开的实施例,计算机可读存储介质可以是非易失性的计算机可读存储介质,例如可以包括但不限于:便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。例如,根据本公开的实施例,计算机可读存储介质可以包括上文描述的ROM 902和/或RAM 903和/或ROM 902和RAM 903以外的一个或多个存储器。
本公开的实施例还包括一种计算机程序产品,其包括计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。当计算机程序产品在计算机系统中运行时,该程序代码用于使计算机系统实现本公开实施例所提供的方法。
在该计算机程序被处理器901执行时执行本公开实施例的系统/装置中限定的上述功能。根据本公开的实施例,上文描述的系统、装置、模块、单元等可以通过计算机程序模块来实现。
在一种实施例中,该计算机程序可以依托于光存储器件、磁存储器件等有形存储介质。在另一种实施例中,该计算机程序也可以在网络介质上以信号的形式进行传输、分发,并通过通信部分909被下载和安装,和/或从可拆卸介质911被安装。该计算机程序包含的程序代码可以用任何适当的网络介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。
在这样的实施例中,该计算机程序可以通过通信部分909从网络上被下载和安装,和/或从可拆卸介质911被安装。在该计算机程序被处理器901执行时,执行本公开实施例的系统中限定的上述功能。根据本公开的实施例,上文描述的系统、设备、装置、模块、单元等可以通过计算机程序模块来实现。
根据本公开的实施例,可以以一种或多种程序设计语言的任意组合来编写用于执行本公开实施例提供的计算机程序的程序代码,具体地,可以利用高级过程和/或面向对象的编程语言、和/或汇编/机器语言来实施这些计算程序。程序设计语言包括但不限于诸如Java,C++,python,“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
本领域技术人员可以理解,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合,即使这样的组合或结合没有明确记载于本公开中。特别地,在不脱离本公开精神和教导的情况下,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合。所有这些组合和/或结合均落入本公开的范围。
以上对本公开的实施例进行了描述。但是,这些实施例仅仅是为了说明的目的,而并非为了限制本公开的范围。尽管在以上分别描述了各实施例,但是这并不意味着各个实施例中的措施不能有利地结合使用。本公开的范围由所附权利要求及其等同物限定。不脱离本公开的范围,本领域技术人员可以做出多种替代和修改,这些替代和修改都应落在本公开的范围之内。
Claims (13)
1.一种数据库对象的安装方法,包括:
获取数据库对象清单,所述数据库对象清单中的数据库对象来自于数据库脚本;
从所述数据库对象清单中提取出预定类型的数据库对象,得到至少一个目标对象;
根据每个所述目标对象的类型,获取每个所述目标对象对应的预安装对象的创建脚本,其中,所述预安装对象与对应的所述目标对象类型相同且同名,所述预安装对象的创建脚本中不包含对其他数据库对象的依赖;
在数据库中执行所述预安装对象的创建脚本,以在所述数据库中安装所述预安装对象;以及
在所有的所述预安装对象安装完成之后,以利用所述目标对象覆盖所述预安装对象的安装方式,在所述数据库中执行所述数据库脚本。
2.根据权利要求1所述的方法,其中,所述预定类型包括以下至少之一:包、存储过程和自定义函数。
3.根据权利要求2所述的方法,其中,所述根据每个所述目标对象的类型,获取每个所述目标对象对应的预安装对象的创建脚本包括:
当所述目标对象为包时,获取所述数据库脚本中所述目标对象的包声明创建脚本,其中,以所述目标对象的包声明创建脚本作为所述预安装对象的创建脚本。
4.根据权利要求2所述的方法,其中,所述根据每个所述目标对象的类型,获取每个所述目标对象对应的预安装对象的创建脚本包括:
当所述目标对象为存储过程或者自定义函数时,获取所述数据库脚本中所述目标对象的创建脚本;
从所述目标对象的创建脚本中,截取对所述目标对象进行声明的语句,得到所述预安装对象的创建脚本中的声明部分;以及
在所述预安装对象的创建脚本中的声明部分的基础上拼接预设的实现体模板语句,以得到所述预安装对象的创建脚本;其中,所述实现体模板语句是按照与所述目标对象同一类型的数据库对象的编写格式预先设置的语句。
5.根据权利要求4所述的方法,其中,所述在所述预安装对象的创建脚本中的声明部分的基础上拼接预设的实现体模板语句,以得到所述预安装对象的创建脚本还包括:
当所述目标对象为自定义函数时,从所述目标对象的创建脚本中解析所述目标对象的返回数据的数据类型;以及
在拼接所述实现体模板语句的同时,以所述目标对象的返回数据的数据类型,填充所述实现体模板语句中的临时变量的数据类型。
6.根据权利要求4所述的方法,其中,在所述以利用所述目标对象覆盖所述预安装对象的安装方式,在所述数据库中执行所述数据库脚本之后还包括:
从所述数据库中用于保存数据库对象的第一系统视图中搜索所述实现体模板语句;以及
当搜索不到所述实现体模板语句时,确定所述数据库中所述目标对象的安装无遗漏。
7.根据权利要求1所述的方法,其中,所述以利用所述目标对象覆盖所述预安装对象的安装方式,在所述数据库中执行所述数据库脚本包括:
识别所述数据库脚本中用于创建所述预定类型的数据库对象的语句,得到待修改语句;
以用于创建或更新所述预定类型的数据库对象的语句,替换所述待修改语句,得到修改后的数据库脚本;以及
在所述数据库中执行所述修改后的数据库脚本。
8.根据权利要求1所述的方法,其中,在所述以利用所述目标对象覆盖所述预安装对象的安装方式,在所述数据库中执行所述数据库脚本之后,所述方法还包括:
比对所述数据库对象清单和所述数据库中用于保存数据库对象的第一系统视图;以及
当所述数据库对象清单和所述第一系统视图中的数据库对象的信息一致时,确定在所述数据库中数据库对象安装正确;否则,确定在所述数据库中数据库对象安装不正确。
9.根据权利要求1所述的方法,所述获取数据库对象清单包括:
从安装所述数据库脚本的开发环境数据库中的用于保存数据库对象的第二系统视图中,导出所有数据库对象,得到所述数据库对象清单。
10.一种数据库对象的安装装置,包括数据库对象识别单元、预安装对象生成单元和数据库对象安装单元,其中:
所述数据库对象识别单元用于:获取数据库对象清单,所述数据库对象清单中的数据库对象来自于数据库脚本;以及从所述数据库对象清单中提取出预定类型的数据库对象,得到至少一个目标对象;
所述预安装对象生成单元用于:根据每个所述目标对象的类型,获取每个所述目标对象对应的预安装对象的创建脚本,其中,所述预安装对象与对应的所述目标对象类型相同且同名,所述预安装对象的创建脚本中不包含对其他数据库对象的依赖;
所述数据库对象安装单元用于:在数据库中执行所述预安装对象的创建脚本,以在所述数据库中安装所述预安装对象;以及在所有的所述预安装对象安装完成之后,以利用所述目标对象覆盖所述预安装对象的安装方式,在所述数据库中执行所述数据库脚本。
11.一种电子设备,包括:
一个或多个处理器;
存储器,用于存储一个或多个程序,
其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器执行权利要求1~9中任一项所述的方法。
12.一种计算机可读存储介质,其上存储有计算机程序指令,该计算机程序指令被处理器执行时实现权利要求1~9中任一项所述的方法。
13.一种计算机程序产品,包括计算机程序指令,所述计算机程序指令被处理器执行时实现权利要求1~9中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310246441.9A CN116339755A (zh) | 2023-03-10 | 2023-03-10 | 数据库对象的安装方法、装置、设备和介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310246441.9A CN116339755A (zh) | 2023-03-10 | 2023-03-10 | 数据库对象的安装方法、装置、设备和介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116339755A true CN116339755A (zh) | 2023-06-27 |
Family
ID=86888844
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310246441.9A Pending CN116339755A (zh) | 2023-03-10 | 2023-03-10 | 数据库对象的安装方法、装置、设备和介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116339755A (zh) |
-
2023
- 2023-03-10 CN CN202310246441.9A patent/CN116339755A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11726969B2 (en) | Matching metastructure for data modeling | |
JP2020510925A (ja) | テストケースを利用してテストを遂行する方法および装置 | |
US20130054812A1 (en) | System and method for dynamically assembling an application on a client device | |
US20190005111A1 (en) | Relational log entry instituting system | |
US11651272B2 (en) | Machine-learning-facilitated conversion of database systems | |
US10445675B2 (en) | Confirming enforcement of business rules specified in a data access tier of a multi-tier application | |
US10452628B2 (en) | Data analysis schema and method of use in parallel processing of check methods | |
CN111125064B (zh) | 一种生成数据库模式定义语句的方法和装置 | |
US10275234B2 (en) | Selective bypass of code flows in software program | |
CN112765017A (zh) | 基于MySQL数据库的数据查询性能测试方法和装置 | |
CN115599386A (zh) | 代码生成方法、装置、设备及存储介质 | |
US20200097260A1 (en) | Software application developer tools platform | |
CN112650526B (zh) | 版本一致性的检测方法、装置、电子设备和介质 | |
CN113419740A (zh) | 程序数据流的分析方法、装置、电子设备及可读存储介质 | |
CN111177089B (zh) | 日志处理代码的生成方法和装置、计算机系统和存储介质 | |
CN111949543A (zh) | 基于分布式平台的测试方法、装置、电子设备及存储介质 | |
CN115794858A (zh) | 查询语句处理方法、装置、设备及存储介质 | |
US11550556B1 (en) | Efficient semantic analysis of program code | |
CN116339755A (zh) | 数据库对象的安装方法、装置、设备和介质 | |
CN117009397A (zh) | 数据查询方法、数据查询装置、电子设备和存储介质 | |
US10958514B2 (en) | Generating application-server provisioning configurations | |
US11720553B2 (en) | Schema with methods specifying data rules, and method of use | |
US10949327B2 (en) | Manipulation of complex variables in orchestration applications | |
US20120330878A1 (en) | Conventions for inferring data models | |
US11860871B2 (en) | Continuous delivery of database queries for applications based on named and versioned parameterized database queries |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |