国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > SQL Server > 正文

為何把你的數(shù)據(jù)庫置于版本控制之下

2024-08-31 00:46:28
字體:
來源:轉載
供稿:網(wǎng)友

做程序開發(fā)的人都知道版本控制的重要性, 代碼的管理好說,TFS/SVN/VSS/CVS,哪個都能用。但涉及到數(shù)據(jù)庫的版本控制,就不是太好做的。有的team是定期把數(shù)據(jù)庫的備份放到服務器上,但一來數(shù)據(jù)庫備份太大,而來二進制的備份文件沒有簡單的diff工具來比較變化。一個比較好的實踐是把數(shù)據(jù)庫的架構用腳本來表示。相關的討論可以Google之,前面幾篇文章,如 Coding Horror: Is Your Database Under Version Control?, 。遺憾的是中文沒能Google出什么有意義的文章。

理論有了,下面就是實踐的問題。怎么生成和管理腳本。SQLServer2005右鍵點擊數(shù)據(jù)庫,[任務]->[腳本生成]能生成一堆腳本,但我還不知道有誰能夠在不修改原始輸出的情況下一次性運行成功這些腳本。搜了一把,生成SQLServer數(shù)據(jù)庫腳本四法里介紹了一個scptxfr.exe,遺憾的是我沒能在SQLServer2005里找到這個工具。倒是在SQLServer Hosting Toolkit里找到了一個Data Publishing Wizard能生成可用的數(shù)據(jù)庫創(chuàng)建腳本,這個工具支持GUI和命令行,用起來很是方便。遺憾的是生成的腳本里只包含schema和下一級表、視圖、存儲過程等對象的名稱,而不包含數(shù)據(jù)庫名,害得我一運行,master數(shù)據(jù)庫里多了一堆表。為了解決這個問題,我用python寫了個腳本來生成創(chuàng)建數(shù)據(jù)庫和using數(shù)據(jù)庫的語句,再用了一個命令行封裝一下。

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)

現(xiàn)在基本解決了數(shù)據(jù)庫創(chuàng)建腳本的問題。但后續(xù)的修改如何跟蹤?

一是維護一個大的創(chuàng)建腳本。好處是只需要維護一個腳本,執(zhí)行起來也比較方便。但跟蹤變化不是一件很容易的事情。

二是維持數(shù)據(jù)庫創(chuàng)建腳本的相對穩(wěn)定,要修改一個數(shù)據(jù)庫對象時就為該對象創(chuàng)建一個腳本。好處是容易跟蹤變化,但腳本執(zhí)行的順序不易維護,還需要再寫一個批處理命令來按一定書序調用這些sql腳本。

都是一些想法,還有待實踐檢驗。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 开封市| 教育| 香港 | 宝兴县| 白玉县| 都昌县| 昌吉市| 简阳市| 澄迈县| 综艺| 鄂托克旗| 湛江市| 英山县| 赤壁市| 邻水| 辽阳市| 雷波县| 临汾市| 海原县| 潍坊市| 额敏县| 长岭县| 河池市| 葵青区| 辽源市| 遂川县| 定西市| 肃北| 姚安县| 赤壁市| 本溪市| 乌兰浩特市| 西和县| 淳化县| 福州市| 望谟县| 高平市| 河津市| 新巴尔虎左旗| 茌平县| 秦皇岛市|