基于WebServices的数据库结构自动升级

2022-09-11

在软件的生命周期中, 维护阶段占据了相当大的一个比例[1]。随着软件的使用, 随着用户对软件的熟悉和业务过程的深入理解, 以及用户业务流程发生的新的变化, 软件往往需要进行各种维护和升级以满足用户不断发展的需求。在这种维护过程中, 数据库结构也需要不断加以升级, 如建新表, 在表增加新的列, 修改原有列的类型, 增加新的存储过程等。

在进行数据库结构升级时, 受时间和空间的限制, 开发人员不可能到用户单位操作可视化的数据库管理工具, 而需要写代码来实现数据库结构的修改。这部分数据库升级代码可以单独做成一个程序, 让用户运行这个程序来实现数据库的升级。但是, 这种方式并不是很理想, 因为用这种方式升级数据库结构依赖于用户, 如果用户忘记执行或者重复执行了数据库升级程序, 可能会造成意想不到的后果。再者, 用这种方式升级数据库, 用户需要单独执行一个程序, 这也增加了用户的工作量。

本文介绍了一种基于Web Services能够自动检测并升级数据库结构的方法。这种方法可以适用于各种数据库系统, 可以使用各种编程语言来实现。本文以MS SQL Server数据库和C#编程语言为例具体说明其实现。

1 实现

数据库结构的每一次升级可以看作是对数据库的一个补丁, 这个补丁就是一段SQL语句。本文所介绍的数据库结构升级方法的核心思想是:利用一台服务器, 把需要升级的数据库补丁作为Web Services进行进行发布。应用程序运行时, 首先访问这个Web服务, 如果有新的数据库补丁, 则执行补丁从而对数据库升级, 并且把运行升级补丁的情况 (如升级日期、升级内容、是否成功等信息) 记录到一个特殊的数据库表中, 这样一方面能够把这些重要信息记录下来, 方便程序员日后查询, 另一方面也能够避免升级补丁重复运行。

1.1 网络拓扑结构

本文所介绍的这种自动更新数据库结构的方案, 涉及到多个计算机终端, 根据其在系统中所处的地位不同, 可以分为三种类型。

(1) Web Services服务器, 此服务器用于提供Web Services和发布数据库补丁。

(2) 企业数据服务器, 此服务器用于企业内部使用, 要更新的数据库就部署在这台服务器上。

(3) 应用程序客户端。这个客户端一方面通过Web连接到Web Services服务器上, 获取最新的数据库更新补丁, 另一方面通过LAN连接到企业数据服务器, 对其数据库结构进行更新升级。

在上述三种类型的计算机终端中, 一般Web Services服务器只需有一台。企业数据服务器每个软件用户有一台, 应用程序客户端通常来说会有多台。整个网络拓扑结构如图1所示。为清晰起见, 图中仅画出三种终端各一台。

1.2 Web Services服务器

Web Services服务器的作用就是响应客户端的请求, 返回最新的数据库更新补丁列表。由于数据库补丁ID是递增的, 因此, Web Services客户端可以传递一个Int类型的ID值, 以指定想要获得的起始补丁。

Web Services可以用各种语言实现。微软的.NET平台和Visual Studio IDE使得Web Service的开发和使用更加简单[2], 本文使用C#实现这个Web Services, 具体代码如下。

1.3 企业数据服务器

为了准确对数据库进行更新, 既不能有所遗漏, 又避免重复更新, 需要在企业数据服务器上建一个数据库升级日志表DbUpgradeLog, 用来记录数据库更新情况, 表结构如下。

(1) UpgradeID, Int类型, 主键, 自动增长列。

(2) DbName, Nvarchar (50) 类型, 表示被更新的数据库名称。

(3) DbPackID, Int类型, 数据库补丁ID, 用以唯一标识一个补丁, 此ID值随着数据库补丁的发布而递增。

(4) ExecDate, DateTime类型, 执行此更新的时间。

(5) SqlStatement, Nvarchar (500) 类型, 用于数据库更新的脚本。

(6) Succeed, Bit类型, 表示此更新是否执行成功。

(7) ErrorText, Nvarchar (100) 类型, 执行更新时发生的错误信息, 如果执行成功, 则为空字符串。

(8) Description, Nvarchar (100) 类型, 对于此次更新的文字说明。

1.4 应用程序客户端

当应用程序启动时, 需要执行以下步骤。

(1) 检测企业数据服务器上的数据库升级日志表DbUpgradeLog是否存在, 如果不存在, 则创建。

(2) 访问数据库升级日志表DbUpgradeLog, 得到最新被执行成功的数据库补丁ID。

(3) 根据上一步得到的ID值, 访问Web Services服务器获取用于升级数据库的最新补丁列表。如果Web Services不可用, 则跳到第5步。

(4) 针对第3步得到的每一个补丁, 执行这个补丁以对数据库做相应更新, 并把执行情况记录 (包括升级内容、升级日期、是否成功、错误信息等) 到DbUpgradeLog表中。

(5) 数据库升级结束, 正常运行应用程序其他功能。

2 结语

本文介绍了一种升级数据库结构的方法, 此方法通过Web Services自动获取数据库更新脚本, 对数据库进行执行更新。整个过程对软件用户透明, 无需用户干预, 无需到软件用户单位拷贝程序, 在很大程度上方便了软件的升级和维护工作。

摘要:在使用和维护各种管理信息系统 (MIS) 软件过程中, 随着用户对软件不断提出新的要求, 数据库也经常需要进行完善升级。本文介绍了一种利用Web Service对数据库结构进行自动升级的方法, 该方法简单可行, 且对用户透明, 具有较强的实用性。

关键词:数据库,升级,PowerBuilder,MIS

参考文献

[1] 张海藩.软件工程[M].北京:清华大学出版社, 2008.

[2] 孙继磊, 刘亮亮.精通VISUAL C#2008:语言基础、数据库系统开发、WEB开发[M].北京:人民邮电出版社, 2009.

上一篇:校企合作模式下旅游管理专业就业指导体系研究——以池州学院为例下一篇:加强财务文化提高财务管理