一种数据库系统及其升级的方法

文档序号:6579976阅读:201来源:国知局
专利名称:一种数据库系统及其升级的方法
技术领域
本发明涉及数据库领域,尤其涉及一种数据库系统及其升级的方法。
背景技术
在项目开发实践中,经常需要根据应用要求,开发并维护多个代码分支。 对于某一组件或功能,可能只需要存在于特定的分支之中,而且,组件或功 能在不同的分支之中的支持程度可能也不一样。按照一般的做法,对于同一 功能组件,需要按照需求合入特定的分支。
事实上,这样做是比较繁瑣的,首先,需要耗费开发人员大量的开发时
间;同时由于代码分散,很难做到统一管理和检查,需要开发人员对各个分 支的代码都比较熟悉,增加了代码维护的复杂性。
因此当前需要一种代码的开发和版本安装的技术方案,统一维护一套代 码,通过在代码中嵌入代码段归属的版本信息来决定安装哪些功能组件。

发明内容
本发明所要解决的技术问题是提供一种数据库系统及其升级的方法,解 决了数据库系统可以自动升级的问题,提高了效率。
为了解决上述问题,本发明提供了一种数据库系统升级的方法,包括
数据库系统创建脚本模块升级的信息;
所述数据库系统根据脚本模块的类别和所述脚本模块升级的信息,对相 应的脚本模块进行升级。
进一步地,上述方法还可包括,所述脚本模块的类别包括每次都执行 的脚本模块、在特定版本基础上执行的脚本模块、只执行一次的脚本模块和 在特定版本间执行的脚本模块。5进一步地,上述方法还可包括,所述数据库系统创建脚本模块升级的信 息,包括
所述数据库系统建立当前版本表、功能脚本归属版本表、唯——次升级 版本表,以及所述数据库系统建立脚本模块的历史版本表。
进一步地,上述方法还可包括,所述当前版本表用于描述当前升级的 脚本模块的版本信息,包括大版本号Version和小版本号Subversion;其中, 所述大版本号用于区分不同的脚本模块的代码分支,所述小版本号用于描述 所述代码分支内的历史版本;
所述功能脚本归属版本表用于描述在对应的版本中执行的脚本模块的 信息,针对部分的创建脚本模块、部分的初始化脚本模块和部分的更新脚本 模块;其中,每个脚本模块都需要在该表中增加一条记录,定义该脚本模块 起始的版本号和子版本号;所述功能脚本归属版本表包括Verldx、 SinceVer 和SinceSubVer,其中,Verldx用于唯一标识该脚本模块;SinceVer用于标 识脚本模块起始的版本号;SinceSubVer用于标识脚本模块起始的子版本号;
所述唯——次升级版本表用于描述只需要执行一次的脚本模块的信 息,该表中记录其执行状态,主要针对部分的更新脚本模块和部分的初始化 脚本才莫块;其中,所述唯——次升级版本表包括;Execldx和Isupdate,所 述Execldx用于唯一标识该脚本段,所述Isupdate字l殳初始化为0;
所述历史版本表用于记录脚本模块历次升级写入的版本号,每次执行 升级脚本模块时在该表中插入一条记录,存储升级脚本模块的版本号和升级 日期,后续升级时依据读取到的历史版本信息来决定执行对应的脚本模块; 所述历史版本表包括VerHistory和SubVerHistory,所述VerHistory用于描 述安装时的Version,所述SubVerHistory用于描述安装时的SubVersion。
进一步地,上述方法还可包括,所述数据库系统根据脚本模块的类别和 所述脚本模块升级的信息,对相应的脚本模块进行升级,包括
所述数据库系统根据脚本模块的类别,判断该脚本模块是所述每次都执 行的脚本模块,则根据所述脚本模块升级的信息,对该脚本模块进行升级。
进一步地,上述方法还可包括,所述数据库系统^4居脚本^^莫块的类别和所述脚本模块升级的信息,对相应的脚本模块进行升级,包括
所述数据库系统根据脚本模块的类别,判断该脚本模块是所述在特定版 本基础上执行的脚本模块,则对所述脚本模块升级的信息中当前版本表和功
能脚本归属版本表进行比较,判断 SinceVer〉Version 或 (SinceVer==Version)&&( SinceSubVer>=SubVersion)时,则对该脚本才莫块进 行升级。
进一步地,上述方法还可包括,所述数据库系统根据脚本模块的类别和 所述脚本模块升级的信息,对相应的脚本模块进行升级,包括
所述数据库系统根据脚本模块的类别,判断该脚本模块是所述只执行一 次的脚本模块,则检索所述脚本模块升级的信息中所述唯——次升级版本 表,判断该唯——次升级版本表存在相应记录且所述Isupdate字段为0,则 对该脚本模块进行升级,升级完成后将该Isupdate字段置为1。
进一步地,上述方法还可包括,所述数据库系统根据脚本模块的类别和 所述脚本模块升级的信息,对相应的脚本模块进行升级,包括
所述数据库系统根据脚本模块的类别,判断该脚本模块是所述在特定版 本间执行的脚本模块,则根据所述脚本模块升级的信息中所述当前版本表和 所述历史片反本表,判断Version与Verliistory, 以及Subversion与 SubVerHistory相比满足预定义条件时,则对该脚本模块进行升级。
进一步地,上述方法还可包括,所述数据库系统在升级完成后,还包括 所述数据库系统更新脚本模块升级的信息。
本发明还提供了一种数据库系统,包括创建单元和升级单元,其中,
所述创建单元,用于创建脚本模块升级的信息,并发送给所述升级单元;
所述升级单元,用于接收所述创建单元发送的所述脚本模块升级的信 息,根据脚本模块的类别和所述脚本模块升级的信息,对相应的脚本模块进 行升级。
与现有技术相比,应用本发明,通过代码段起始的版本信息来自适应地 执行需要的脚本,降低开发和维护的难度,提高了效率。


图1为本发明的数据库系统升级的方法的流程图; 图2为本发明的具体实例中脚本模块编辑阶段的流程图; 图3为本发明的具体实例中脚本模块版本安装阶段的流程图; 图4为本发明的数据库系统的结构示意图。
具体实施例方式
下面结合附图和具体实施方式
对本发明作进一步说明。 数据库的功能脚本从逻辑上主要包括三大部分
一、 创建脚本包括创建数据库,创建数据表,创建存储过程和创建 函数;
二、 初始化脚本即初始化数据表的特定记录;
三、 更新脚本即对已有数据进行更新操作。
如图1所示,本发明的数据库系统升级的方法,包括 10、数据库系统创建脚本模块升级的信息; 数据库系统创建脚本模块升级的信息,包括
数据库系统建立当前版本表,描述脚本模块需要升级到的版本。需要在 安装程序中进行修改。
当前版本表(CurVer):描述当前升级的脚本模块的版本信息;包括大 版本号Version和小版本号SubVersion。其中,所述大版本号Version可用 于区分不同的脚本模块的代码分支,所述小版本号Subversion可用于描述 所述代码分支内的历史版本
安装程序根据当前版本表作为比较依据。
数据库系统建立功能脚本归属版本表,描述在对应的版本中执行的脚本 模块的信息。
功能脚本归属版本表(CodeVer) : ( Verldx+SinceVer+SinceSubVer ) 描述脚本模块应该在哪些版本下执行。针对部分的创建脚本模块、部分的初始化脚本模块和部分的更新脚本模块;其中,每脚本模块都需要在该表中增
加一条记录,定义该脚本模块起始的版本号和子版本号。
其中,Verldx用于唯一标识该脚本模块;SinceVer用于标识脚本模块起始的版本号;SinceSubVer用于标识脚本模块起始的子版本号。
数据库系统建立唯一一次升级版本表,描述只需要执行一次脚本模块,并记录其执行状态。
唯——次升级版本表(ExecOnce ) : ( Execldx+Isupdate )描述只需要执行一次的脚本模块的信息,该表中记录其执行状态,主要针对部分的更新脚本模块和部分的初始化脚本模块。
其中,记录主键Execldx用于唯一标识该脚本段,Isupdate字段初始化为0。
以及,数据库系统建立脚本模块的历史版本表,记录历次升级的版本信息,用于下次安装的依据。
历史版本表(HistoryVer):记录脚本模块历次升级写入的版本号,每次执行升级脚本才莫块时在该表中插入 一 条记录(VerHistory十SubVerHistory十UpdateDate),存储升级脚本模块的版本号和升级日期。后续升级时依据读取到的历史版本信息来决定执行对应的脚本模块。
所述历史版本表包括VerHistory和SubVerHistory, VerHistory用于描述安装时的Version, SubVerHistory用于描述安装时的SubVersion。
步骤20、数据库系统根据脚本模块的类别和脚本模块升级的信息,对相应的脚本模块进行升级;
脚本模块的类别包括,每次都执行的脚本模块、在特定版本基础上执行的脚本模块、只执行一次的脚本模块和在特定版本间执行的脚本模块。
其中,对相应的脚本模块进行升级,包括
每次都执行的脚本模块无需针对版本表做特殊封装,直接定义数据库脚本即可;直接调用底层数据库接口,执行升级即可。
在特定版本基础上执行的脚本模块需要通过CurVer和CodeVer进4亍比專交,当SinceVer〉Version或者(SinceVer==Version)&&( SinceSubVer〉二SubVersion)时,才4丸4亍升级。
只执行一次的脚本模块需要通过ExecOnce,仅当能从该表中检索到相应记录,且记录的Isupdate字段为0时,才允许执行升级。且执行完毕后,需要将此记录的Isupdate字段置为1。以后就不会再次进行升级。
在特定版本间执行的脚本模块需要通过CurVer和HistoryVer,仅当能Version与VerHistory, Subversion与SubVerHistory相比能够满足预定义条件时,才允许执行升级。
步骤30、数据库系统在升级完成后,更新脚本模块升级的信息。
数据库系统在升级完成后,更新历史版本表,记录本次升级的版本信息,用于下次安装的依据。
下面结合具体实例对本发明作进一 步说明。
首先,描述脚本模块编辑阶段,如图2所示,包括
步骤201:编辑数据库代码段。
编辑数据库创建脚本如创建表,创建触发器,创建存储过程以及创建函数等。
编辑数据库初始化脚本主要是特定数据表创建插入初始化记录。编辑数据库升级脚本主要是对现有数据进行升级操作,以满足不同版本对数据的要求。
步骤202:对于每次都需要执行的脚本的处理。
对于每次都需要执行的脚本,如大部分的数据库创建脚本, 一部分的数据库初始化脚本和数据库更新脚本。直接编辑完成即可,不用做特殊的处理。
步骤203:对于只执行一次的脚本的处理。
如部分的数据库创建脚本,部分的数据库初始化脚本和部分的数据库更新脚本。在ExecOnce中增加一条记录,记录主4建Execldx用于唯一标识该脚本段,Isupdate字段初始化为0。
步骤204:对于只在特定版本间执行的脚本的处理。
10如部分的数据库创建脚本,部分的数据库初始化脚本和部分的数据库更
新脚本。首先定义全局变量LastVer, LastSubVer,标识上次安装的版本号和子版本号,版本号数值从HistoryVer的最新一条记录中获取。然后根据需要,编辑判断脚本,仅当Version与LastVer, Subversion与LastSubVer相比能够满足预定义条件时,才需要执行脚本。
步骤205:对于在特定版本基础上执行的脚本的处理。
如部分的数据库创建脚本,部分的数据库初始化脚本和部分的数据库更新脚本。在CodeVer中增加一条记录,Verldx唯一标识该脚本段,SinceVer用于标识起始的版本号,SinceSubVer用于标识起始的子版本号。当CurVer中的Version和Subversion大于SinceVer和SinceSubVer时,才需要才丸行脚本段。
然后,描述版本安装阶段。如图3所示,包括步骤301:读取版本信息。
读耳又CurVer,获耳又要升级到的Version和Subversion,读耳又HistoryVer,获取上次升级的VerHistory, SubVerHistory,填充到全局变量LastVer,LastSubVer 。
并分段读耳又脚本。
步骤302:对于每次执行的脚本的处理。
如果脚本段没有根据版本信息进行封装,则为每次都要执行的脚本,直接调用底层接口执行即可。
步骤303:对于只扭J亍一次的脚本的处理。
如果脚本段使用ExecOnce表的记录进行封装,则为最多执行一次的脚本。是否执行需要从ExecOnce表中检索该记录的IsUpdate字段,仅当IsUpdate为0,才执行脚本段,执行完毕,将该记录的IsUpdate字段置1。
步骤304:对于在特定版本间执行的脚本的处理。
如果脚本段使用版本全局变量进行封装,则为在特定版本间执行的脚本。需要判断(VerHistory, Sub VerHistory)与(LastVer, LastSubVer)是否满足预定义条件,如果满足才执行脚本,否则不执行。步骤305:对于在特定版本基础上执行的脚本的处理。如果脚本段使用CodeVer表的记录进行封装,则为在特定版本基础上执
时,执行脚本段,否则不执行。
步骤306:更新版本历史表(HistoryVer)。
当所有脚本执行完毕后,需要在HistoryVer中新增加一条记录,标识最近一次安装的版本号,VerHistory, SubVerHistory分别存储安装时的Version, Subversion。
如图4所示,本发明的数据库系统,包括创建单元和升级单元,其中,
所述创建单元,用于创建脚本模块升级的信息,并发送给所述升级单元;
所述升级单元,用于接收所述创建单元发送的所述脚本模块升级的信息,根据脚本模块的类别和所述脚本模块升级的信息,对相应的脚本模块进行升级。
以上所述,仅为本发明较佳的具体实施方式
,但本发明的保护范围并不局限于此,任何熟悉该技术的人在本发明所揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
1权利要求
1、一种数据库系统升级的方法,其特征在于,包括数据库系统创建脚本模块升级的信息;所述数据库系统根据脚本模块的类别和所述脚本模块升级的信息,对相应的脚本模块进行升级。
2、 如权利要求l所述的方法,其特征在于, 所述脚本模块的类别包括每次都执行的脚本模块、在特定版本基础上 执行的脚本模块、只执行一次的脚本模块和在特定版本间执行的脚本模块。
3、 如权利要求l所述的方法,其特征在于,所述数据库系统创建脚本模块升级的信息,包括所述数据库系统建立当前版本表、功能脚本归属版本表、唯——次升级 版本表,以及所述数据库系统建立脚本模块的历史版本表。
4、 如权利要求3所述的方法,其特征在于,所述当前版本表用于描述当前升级的脚本模块的版本信息,包括大版 本号Version和小版本号Subversion;其中,所述大版本号用于区分不同的 脚本模块的代码分支,所述小版本号用于描述所述代码分支内的历史版本;所述功能脚本归属版本表用于描述在对应的版本中执行的脚本模块的 信息,针对部分的创建脚本模块、部分的初始化脚本模块和部分的更新脚本 模块;其中,每个脚本模块都需要在该表中增加一条记录,定义该脚本模块 起始的版本号和子版本号;所述功能脚本归属版本表包括Verldx、 SinceVer 和SinceSubVer,其中,Verldx用于唯一标识该脚本才莫块;SinceVer用于标 识脚本模块起始的版本号;SinceSubVer用于标识脚本冲莫块起始的子版本号;所述唯——次升级版本表用于描述只需要执行一次的脚本模块的信 息,该表中记录其执行状态,主要针对部分的更新脚本模块和部分的初始化 脚本才莫块;其中,所述唯——次升级版本表包括;Execldx和Isupdate,所 述Execldx用于唯一标识该脚本段,所述Isupdate字段初始化为0;所述历史版本表用于记录脚本模块历次升级写入的版本号,每次执行 升级脚本模块时在该表中插入一条记录,存储升级脚本模块的版本号和升级 日期,后续升级时依据读取到的历史版本信息来决定执行对应的脚本模块; 所述历史版本表包括VerHistory和SubVerHistory,所述VerHistory用于描 述安装时的Version,所述SubVerHistory用于描述安装时的SubVersion。
5、 如权利要求2或4所述的方法,其特征在于,所述数据库系统根据脚本模块的类别和所述脚本模块升级的信息,对相 应的脚本模块进行升级,包括所述数据库系统根据脚本模块的类别,判断该脚本模块是所述每次都执 行的脚本模块,则根据所述脚本模块升级的信息,对该脚本模块进行升级。
6、 如权利要求2或4所述的方法,其特征在于,所述数据库系统根据脚本模块的类别和所述脚本模块升级的信息,对相 应的脚本模块进行升级,包括所述数据库系统根据脚本模块的类别,判断该脚本模块是所述在特定版 本基础上执行的脚本模块,则对所述脚本模块升级的信息中当前版本表和功 能脚本归属版本表进行比较,判断 SinceVer〉Version 或 (SinceVer==Version)&&( SinceSubVer>=SubVersion)时,则对该脚本模块进 行升级。
7、 如权利要求2或4所述的方法,其特征在于,所述数据库系统根据脚本模块的类别和所述脚本模块升级的信息,对相 应的脚本模块进行升级,包括所述数据库系统根据脚本模块的类别,判断该脚本模块是所述只执行一 次的脚本模块,则检索所述脚本模块升级的信息中所述唯——次升级版本 表,判断该唯——次升级版本表存在相应记录且所述Isupdate字段为0,则 对该脚本模块进行升级,升级完成后将该Isupdate字段置为1。
8、 如权利要求2或4所述的方法,其特征在于,所述数据库系统根据脚本模块的类别和所述脚本模块升级的信息,对相应的脚本模块进行升级,包括所述数据库系统根据脚本模块的类别,判断该脚本模块是所述在特定版 本间执行的脚本模块,则根据所述脚本模块升级的信息中所述当前版本表和所述历史片反本表,判断Version与VerHistory , 以及Subversion与 SubVerHistory相比满足预定义条件时,则对该脚本冲莫块进行升级。
9、 如权利要求l所述的方法,其特征在于,< 所述数据库系统在升级完成后,还包括所述数据库系统更新脚本模块 升级的信息。
10、 一种数据库系统,其特征在于, 包括创建单元和升级单元,其中,所述创建单元,用于创建脚本模块升级的信息,并发送给所述升级单元;所述升级单元,用于接收所述创建单元发送的所述脚本模块升级的信 息,根据脚本模块的类别和所述脚本模块升级的信息,对相应的脚本模块进 行升级。
全文摘要
本发明公开了一种数据库系统及其升级的方法,包括数据库系统创建脚本模块升级的信息;数据库系统根据脚本模块的类别和所述脚本模块升级的信息,对相应的脚本模块进行升级。应用本发明,通过代码段起始的版本信息来自适应地执行需要的脚本,降低开发和维护的难度,提高了效率。
文档编号G06F9/445GK101650663SQ20091016725
公开日2010年2月17日 申请日期2009年8月27日 优先权日2009年8月27日
发明者洋 刘, 志 杨 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1