用于部署数据库的 数据库初始化工具 xzSQLDeploy Tools V1.0 (for SQLServer)
原文见:软件安装:数据库安装/初始化工具 xzSQLDeploy Tools V1.0 更新版本
xzSQLDeploy Tools V1.0 免费版
使用说明 Ver1.00
piggybank 于 2004.10.22.
访问 http://www.XiaoZhu.com 获取更新版本
目录
软件说明
这是一个免费软件(for free),并将在近期提供全部源代码及详细的实现说明和逻辑流程图——也就是说,它也将是一个 Open Source 的软件。它的使用用途不受限制,完全免费,也不承诺提供任何技术支持,并对其使用后果不承诺承担任何责任。它是一个彻底的自由软件(Free SoftWare)。
<xzSQLDeploy Tools> 免费版是一个用于在发布软件时初始化数据库的工具软件。它很小,只有100多KB,但它目前仅仅支持Microsoft SQL Server数据库软件的初始化。它不支持其它数据库系统,今后也不会,但你可以在一定程度上“定制”它的界面,把它集成到你的服务器软件中。
事实上,它主要是为了方便在由 InstallShield 或者 WiseInstaller 等安装程序制作软件制作的安装程序中使用而设计的。它的——也是唯一的——功能就是根据配置文件中的参数,在其提示下“初始化”你的应用相关的数据库。
如何在自己的应用系统的安装程序中安装数据库?这一直是一个有很多朋友关心和讨论的问题。从应用实现方式和技术路线两个层次来说,主要有两种应用实现方式及两种技术实现方式:
在安装程序执行过程中初始化软件相关设置;
有的软件安装过程中提示用户选择并进行各项设置,比如选择数据库或者创建(“初始化”)数据库,这样其实不仅仅是不便,而且逻辑上并不对称:我们在卸载软件的时候,需要卸载数据库么?
提供一个配置向导工具,在安装程序执行完毕指导用户对软件相关参数进行配置。
我个人更倾向于这一种方式。尤其在非桌面软件——往往是服务器端软件——的安装过程中,经常涉及到大量的运行设置。而数据库初始化设置虽然很少需要“多次”进行,但完全可以与其它设置放在一起。并最好提供一个专门的配置工具用于帮助用户维护这些设置。而这样的配置工具,完全可以在安装程序进行的过程中运行,也可以在安装程序运行之后运行。很容易理解:如果把这一过程“硬编码”在安装程序里(比如InstallShield的脚本或者MSI脚本,甚至是DLL等供其调用),那不如就是一个配置工具,软件作者可以决定是否在安装过程中出现,也可以选择让用户在之后的应用中使用。
这里,有2004年初给某国家机关开发的一个分布式通讯系统(每个单位都是服务器,同时又是客户端)的配置工具的几张界面和配置文件内容结构的图片。在这个配置运行时,首先需要输入一个维护密码(管理员可以维护这个密码),然后可以进行服务器通讯相关的各项设置,以及数据库的初始化。
在目标计算机上新建数据库技术实现方式:
借助数据库脚本实现目的
SQL Server 和 Oracle 等数据库的管理工具中都能很方便地把数据库的数据结构、关系、索引、存储过程等等信息导出为脚本。借助这些管理工具或者自己编写脚本,利用"Create DataBase"、"Create Table"、"Alter Table"等等SQL语句就能完成数据库初始化所需的基本功能。
很多情况下,我们的应用软件运行所需要的不仅仅是一个“空”的数据库,还需要一些初始化的数据。这样的情况,仅仅依靠字段的默认值并不能满足我们的要求。所以,还需要编写一些脚本,通过"Insert"语句来把一些应用系统运行所必需的初始化参数“添加”到刚刚创建好的空库中。这样一来,事情变得复杂很多。
有很多这样的工具软件,包括SQLServer也提供了命令行方式下的小工具,能将数据导出成为格式化的文本文件等等。我没用过这样的软件,但我3年前的搭档曾经在使用过,似乎还不错。
而且,大家所熟知的 InstallShield 最新版本 X 中也提供了"DataBase Import Wizard"来实现这一目的。
借助数据库的备份/还原功能实现目的
相比上一种方式,借助SQL Server的"Backup"和"Restore"来实现数据库的“导出”“导入”却要方便多了——尤其涉及到大量的初始化参数时。记得在2001年开发的 WCP 社区平台产品中,我写了一个小程序将“追捕”的数据库数据更改数据结构(原来查询IP地址的方式是通过字符串比较,我该为通过IP的长整型表示后通过数值大小比较)后导入到SQL Server,并做了一个组件来实现高速查询。可想而知,部署这一软件产品时,必须提供足够的IP地址信息才有意义。所以,我采用了现在说的方法2。
方法1的优势在于不仅仅可用于“初始化数据库”,还可以用于数据库的“更新”和“升级”。但你精心准备的"Insert"和"Alter"拿到用户环境中会有很多意想不到的情况发生:比如与现有数据的冲突、对方是否已经升级过了——版本判断、数据有效性约束、关系约束、所有者权限等等问题。
而我采用方法2 最主要的原因是:如果我自己来做这么一个小工具,远远比方法1要简单而稳定多了。
有空时我也许将会继续整理一个数据库升级的工具和说明,但估计要等我把为朋友们整理的一个免费版本的自动升级程序 Release 出来再说了。呵呵,可以放心的是这些都是我多年来在工作之余的个人成果和兴趣爱好,不会涉及到版权纠纷。但因为要把手边的程序代码中有关的一些信息去掉,并去掉其特定的针对性,加入一些通用的设计需要很多时间,尤其测试时间。
呵呵,本来没想过做这件事情,实在是因为辞职在家没有工作,时间比较充裕,大脑比较“自由”,也就拼命给自己找点事情做做。而至今还有很多朋友被类似的问题困扰,以及还有不少朋友“追”到我的个人网站找到我的联系方法来询问相关问题。正是这样的需求给了我动力,把相关内容整理出来,与所有朋友分享。
本来想写一篇关于如何实现本文所述的程序的详细过程的小文,但想起以前曾经在CSDN的论坛中两次写到过其详细过程,却没有收到相应的效果(想必很多朋友并不会认真地去看,或者说没有时间和精力去实现它吧。呵呵,当然,公司未必会重视这一问题也许是问题的关键),所以决定先放出这个小工具,然后把源代码整理出来并配合一篇详细说明的文章介绍其实现思路、逻辑流程以及相应的SQL语句。因为,当你真正去使用它的时候,会在其已有功能基础上提出各种各样的要求和改进意见。或者结合自己的“项目”需要,希望能够加入一些扩展。那么,这时候,一份详细的程序实现说明文档以及源代码就很必要了。
我想,稍微有些经验的朋友看上面的说明其实已经能够自己完成这个工具,而不必等待我的口水文章。而比较有经验的朋友也许没必要看,但我还是希望他们能够帮忙完善它,以方便更多的朋友。
何况,很多时候我们需要一个“开放源代码”的程序不仅仅是为了获得“灵感”吧 ^oo^
授权说明
你,我的朋友,可以免费地使用这个软件,并自由地分发它——包括在你的应用系统中,甚至是商业应用系统。但前提是必须保证本文档和源代码中的相关注释的完整性及该软件的版权信息不被修改。
为了你的使用和分发方便,我尽可能地提供了对软件界面和提示信息的定制(参考使用说明)。
如果需要将其使用于商业用途,比如与你的商业软件一起分发,那么请注意:在我的使用过程中,我采用了两个自己开发的组件来实现对其XML配置文件的维护和敏感信息的加密。但如果把这两个组件打包到该软件工具中,使用起来有很多不便,所以在该免费版本中我去掉了这两个组件及相应的功能。所以,在此提醒你:在我随后发布的源代码中修改并加入类似功能以完善其应用,或者按照该工具的思路重新实现一个数据库部署工具以完全适应你的要求。
本人对采用该软件及其源代码所造成的所有损失不承担任何责任,你有自由选择是否使用该软件,但你必须自行承担责任。
使用说明
该软件由一个可执行文件和一个配置文件组成。另外,可以结合配置文件中的设置提供所需的背景图片,以尽可能地改变软件的风格以配合你的应用系统。
最重要的是,你必须根据后面的说明对所需要在目标计算机上安装的数据库进行备份,以创建一个用于部署的数据库备份文件,并将之保存到可执行文件所在目录的 DataBase 子目录下。文件名可以自行设置,并更改配置文件以符合实际情况。
a.软件运行环境及其分发要求
软件由 Visual Basic 6.0 编写,开发环境采用 MDAC(Microsoft Data Access Components) 2.8。
因为没有进行足够的测试,对于 SQL Server 7.0 或者 MSDE 是否能有效支持还不能保证。采用同样的思路和核心代码所开发的同类软件已经在本人的多个应用系统项目中使用多年,但本软件仅仅在本人的开发笔记本上测试过,所以如果发现问题还请通知我(play@xiaozhu.com),我将在第一时间改正。
目前可以保证的是在 Windows XP Professional SP2 + MDAC 2.8 + Visual Basic 6.0 SP6 + SQL Server 2000 简体中文企业版 环境下运行正常。呵呵,不必担心,目标计算机如果需要运行该软件,想必已经安装了 SQL Server 2000,并且必须是 Windows 2000 Server 以上的服务器版本操作系统,因此必然是可以运行 VB 编译的 EXE,并且至少有 MDAC2.5/2.7 版本(SQL Server SP3a 中有 MDAC2.7的更新版本)。外带一句废话,像我这样在 Windows 2000 Pro/Windows XP Pro 版本中安装 SQL Server 2000 企业版的人不多,呵呵。
因对于对本地之外的数据库服务器和本地安装的不同实例的数据初始化工作的功能暂时没有加入当前版本,目前版本仅仅建议使用在对软件运行的本机的 SQL Server 数据库进行数据库初始化工作。
分发时如果不放心,可以在你的安装程序中提供 VB Runtime 库的一个很小的安装包(可以从微软官方站点找到其SP6版本)。对于 Install Shield 或者 WiseInstaller 等软件制作的安装包,可以选择加入微软提供的 VB6 的 RunTime 模块或例如 Install Shield 提供的 InstallObject,作为可选项让用户选择安装,或者放到目的目录中,供用户在需要的时候安装使用。
b.软件的使用步骤
更改配置文件(以及根据需要准备界面图片);
1.准备数据库文件
看了上面的说明,想必已经知道我们只需要利用 SQL Server 的企业管理器提供的“备份数据库”功能就能达到这一目的。但这里要提醒注意的是:1、备份数据库前,删除不需要安装的数据(废话),并对数据库进行维护和紧缩;2、删除当前库的用户(因为安装到目标服务器上用户名甚至登录名可能已经不再是原先的那一个)。尤其要记住第二点!
备份数据库时,记录原始数据库的逻辑文件名——在数据库的“属性”中查看其文件和日志文件名,去掉路径和扩展名的部分。比如 NorthWind 数据库的文件名和事务日志文件名是:
2.更改配置文件
主执行程序名为 xzSQLDeploy.exe,你可以更改这个名称,但配置文件名称必须与其相同,而且必须与主执行程序放在同一目录下,扩展名为ini。
配置文件说明(xzSQLDeploy.ini):
数据库设置
[DataBase Options]
//NewDataBaseName 指所需要创建的数据库的名称,如果没有指明,则需要用户自行录入
NewDataBaseName=XiaoZhu_Demo
//NewAccountUserName 指所需要创建的SQL Server登录帐户及数据库用户的名称,如果没有指明,则需要用户自行录入
NewAccountUserName=XiaoZhu
//NewAccountPassWord 指所需要创建的SQL Server登录帐户的密码,如果没有指明,则需要用户自行录入
NewAccountPassWord=XiaoZhuPassWord
//SourceFileName 指所需要还原的数据库备份文件的名字,该文件必须放在当前目录的 DataBase 子目录下
SourceFileName=WillBeInstalled.db
//SourceDBFileName 和 SourceLogFileName 指所需要还原的数据库文件和数据库日志文件原来的逻辑名
SourceDBFileName=SourceDB_MDF
//SourceLogFileName=SourceDB_LOG
//DefaultConnectionString 默认的数据库连接串,如果没有必要,可以不必提供,默认以信任方式连接本地数据库。
//DefaultConnectionString=DRIVER=Provider=SQLOLEDB.1;Data Source=127.0.0.1;Trusted_Connection=yes;DataBase=master;
程序设置
[Options]
//Title 设置软件运行界面的标题信息
Title=初始化数据库 (xzSQLDeploy Tools 1.0 Free Edition)
//FirstUIMessage 设置软件运行界面的第一步操作的提示信息
FirstUIMessage=按照提示操作初始化“流量分析系统”数据库
//LastUIMessage 设置软件运行界面的最后一步操作的提示信息,往往是提示用户已经完成
LastUIMessage=测试一下\ntest okok
//SplashFileName 设置软件运行前的 Splash 窗口的图片(可以在图片中提供说明信息如应用系统版本等等),如果忽略将不出现该窗口
SplashFileName=Images\XiaoZhu.Jpg
//SplashWeight 和 SplashWidth 设置软件运行前的 Splash 窗口的大小,如果省略将自动根据图片大小调整
//SplashWeight=285
//SplashWidth=500
//BackGroundImage 设置软件运行主界面的背景图片,如果省略则采用白色背景(目前的效果不是很好,将继续改进)
//BackGroundImage=Images\Bkbitmap.JPG
//MsgBoxBGImage 设置软件提示信息窗口界面背景,如果忽略则采用白色背景
MsgBoxBGImage=Images\Bkbitmap.JPG
//LeftImage 设置软件主界面左边的图片,如果忽略则采用白色背景(建议根据需要做一个简单的图片,哪怕是文字信息)
LeftImage=Images\Left.JPG
主执行程序运行界面:
3.打包到你的应用系统或安装程序中,并测试
打包时,将主执行文件与配置文件放在同一目录下,备份的数据库文件根据配置文件中的设置命名,并放到主执行文件所在目录的DataBase目录下(没有就创建一个),如本软件提供的范例。
其它根据配置文件可选的图片文件建议放到主执行文件所在目录的 Images 目录下。当然,也许没有,或者你打算放到别的地方。
然后就与你的应用系统一起分发了。呵呵,至于是采用 Install Shield 还是做成一个 ZIP/RAR 的自解压文件,那就随你了。
联系方法
你可以通过 http://www.xiaozhu.com 或者我的 blog 下的 Install Shield 分类找到更新的文章、源代码和可执行程序。如果没必要,尽量不要给我发 Email ^oo^
Email 地址是: play@xiaozhu.com 欢迎把你对该软件及其文档的意见建议、发现的问题告诉我。尤其欢迎把你的使用心得和你的应用案例告诉我,并与其它人分享。但如果是来信询问有关 InstallShield 等等的问题,还是建议去其官方论坛或者 CSDN 等开发社区寻求帮助,那样效率更高,对我而言也更方便,谢谢。
我的需要也许正是你的需要,是大家的需要。如果你也有类似的经验或者心得,不妨与我们分享。
我将继续就软件升级、数据库升级等问题推出一系列的软件工具和文章。您的支持,是我最大的动力 ^oo^
再次感谢你对该软件的关注,以及读完本文付出的极大的耐心!
piggybank
更新于 2004-10-14
请保证文章完整性,谢谢