唐山网站建设

设为主页 加入收藏 繁體中文

把你的数据库置于版本控制之下

核心提示:做程序开发的人都知道版本控制的重要性, 代码的治理好说,TFS/SVN/VSS/CVS,哪个都能用。但触及到数据库的版本控制,就不是太好做的。有的team是定期把数据库的备份放到服务器上,但1来数据库备份太大,而来2进制的备份文件没有简单的diff工具来比较变化。1个比较好的

做程序开发的人都知道版本控制的重要性, 代码的治理好说,TFS/SVN/VSS/CVS,哪个都能用。但触及到数据库的版本控制,就不是太好做的。有的team是定期把数据库的备份放到服务器上,但1来数据库备份太大,而来2进制的备份文件没有简单的diff工具来比较变化。1个比较好的实践是把数据库的架构用脚本来表示。相干的讨论可以Google之,前面几篇文章,如 Coding Horror: Is Your Database Under Version Control?, 。遗憾的是中文没能Google出甚么故意义的文章。

理论有了,下面就是实践的题目。怎样天生和治理脚本。SQLServer2005右键点击数据库,[任务]->[脚本天生]能天生1堆脚本,但我还不知道有谁能够在不修改原始输出的情况下1次性运行成功这些脚本。搜了1把,天生SQLServer数据库脚本4法里先容了1个scptxfr.exe,遗憾的是我没能在SQLServer2005里找到这个工具。倒是在SQLServer Hosting Toolkit里找到了1个Data Publishing Wizard能天生可用的数据库创建脚本,这个工具支持GUI和命令行,用起来很是方便。遗憾的是天生的脚本里只包括schema和下1级表、视图、存储进程等对象的名称,而不包括数据库名,害得我1运行,master数据库里多了1堆表。为了解决这个题目,我用python写了个脚本来天生创建数据库和using数据库的语句,再用了1个命令行封装1下。

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 ")

    sys.exit()

databaseName = sys.argv[1]   

inFile = open(databaseName + ".sql.tmp", encoding="utf⑴6")

content = inFile.read()

inFile.close()

outFile = open(databaseName + ".sql", "w", encoding="utf⑻")

outFile.write(fmt % (databaseName, databaseName, databaseName, databaseName, databaseName))

outFile.write(content)

现在基本解决了数据库创建脚本的题目。但后续的修改如何跟踪?

1是保护1个大的创建脚本。好处是只需要保护1个脚本,履行起来也比较方便。但跟踪变化不是1件很轻易的事情。

2是保持数据库创建脚本的相对稳定,要修改1个数据库对象时就为该对象创建1个脚本。好处是轻易跟踪变化,但脚本履行的顺序不容易保护,还需要再写1个批处理命令来按1定书序调用这些sql脚本。

都是1些想法,还有待实践检验。

http://www.fw8.net/


TAG:数据库,工具,备份,脚本,版本
评论加载中...
内容:
评论者: 验证码: