做程序开发的人都知道版本控制的重要性, 代码的管理好说,TFS/SVN/VSS/CVS,哪个都能用。但涉及到数据库的版本控制,就不是太好做的。有的team是定期把数据库的备份放到服务器上,但一来数据库备份太大,而来二进制的备份文件没有简单的diff工具来比较变化。一个比较好的实践是把数据库的架构用脚本来表示。相关的讨论可以Google之,前面几篇文章,如 Coding Horror: Is Your Database Under Version Control?, 。遗憾的是中文没能Google出什么有意义的文章。 理论有了,下面就是实践的问题。怎么生成和管理脚本。SQLServer2005右键点击数据库,[任务]->[脚本生成]能生成一堆脚本,但我还不知道有谁能够在不修改原始输出的情况下一次性运行成功这些脚本。搜了一把,生成SQLServer数据库脚本四法里介绍了一个scptxfr.exe,遗憾的是我没能在SQLServer2005里找到这个工具。倒是在SQLServer Hosting Toolkit里找到了一个Data Publishing Wizard能生成可用的数据库创建脚本,这个工具支持GUI和命令行,用起来很是方便。遗憾的是生成的脚本里只包含schema和下一级表、视图、存储过程等对象的名称,而不包含数据库名,害得我一运行,master数据库里多了一堆表。为了解决这个问题,我用python写了个脚本来生成创建数据库和using数据库的语句,再用了一个命令行封装一下。 CreatNewdb.cmd:
sqlpubwiz script -schemaonly -d %1 -f %1.sql.tmp echo "publish done" if exist %1.sql del %1.sql echo "adding database creating statements" python createNewDB.py %* del %1.sql.tmp
CreateNewDB.py
import sys
fmt = """ USE [master] GO /****** object: Database [%s] ******/ IF EXISTS (SELECT name FROM sys.databases WHERE name = N'%s') DROP DATABASE [%s] GO CREATE DATABASE [%s] GO USE [%s] """ if len(sys.argv) != 2: print("createNewDB <database name>") sys.exit() databaseName = sys.argv[1] inFile = open(databaseName + ".sql.tmp", encoding="utf-16") content = inFile.read() inFile.close() outFile = open(databaseName + ".sql", "w", encoding="utf-8") outFile.write(fmt % (databaseName, databaseName, databaseName, databaseName, databaseName)) outFile.write(content) |
现在基本解决了数据库创建脚本的问题。但后续的修改如何跟踪?
一是维护一个大的创建脚本。好处是只需要维护一个脚本,执行起来也比较方便。但跟踪变化不是一件很容易的事情。
二是维持数据库创建脚本的相对稳定,要修改一个数据库对象时就为该对象创建一个脚本。好处是容易跟踪变化,但脚本执行的顺序不易维护,还需要再写一个批处理命令来按一定书序调用这些sql脚本。
都是一些想法,还有待实践检验。
相关视频
相关阅读 数据库流行度排行2019年9月 数据库排行榜2019年最新版fifa online4数据库大全 fifa online4球员数据库在哪myeclipse怎么连接到数据库 myeclipse连接到数据库方法PLSQL Developer怎么导出数据库PLSQL Developer配置Oralce11g连接plsql developer怎么使用 plsql developer使用教程plsql developer怎么连接数据库 plsql developer连接数据库教程mysql数据库root密码忘记的修改方法
热门文章 Wordpress本地安装教程dx1.5如何设置二级域名
最新文章
hbuilder有哪些快捷键Wordpress本地安装教程
Wordpress本地安装教程expression web 4文档乱码解决方法dz 2.5“收藏本版”关闭小对话框无法关闭解在制作安装软件之前,您必须先将易语言存盘,
人气排行 如何使用multipart/form-data格式上传文件Photoshop PS图层混合模式详解(非常详细)ISAPI_Rewrite3使用教程网站里添加收藏和设为首页代码桌面快捷方式图标不见了C#获取执行程序所在的当前路径的方法详解(XMLHttpRequest)进行跨域请求方法如何用远程桌面连接进行传输文件
查看所有0条评论>>