2010-05-20 45 views
1

我有一個數據庫項目,通過迭代(到目前爲止只有一個),我需要部署一個測試版本到現場服務器。我不知道如何去做這件事。Sql服務器開發服務器和生活

我可以在副本中進行所有更改,然後在活動版本中重新制作這些更改。這沒有意義。

有沒有辦法將服務器名稱更改爲現有服務器?這種情況下的最佳做法是什麼?

回答

1

使用Visual Studio數據庫項目,您應該可以根據需要定義儘可能多的數據庫連接。當你運行你的腳本時,你可以選擇一個名爲「Run On ....」的菜單選項,然後選擇運行這些腳本的服務器連接。

alt text http://i49.tinypic.com/10pzp8m.png

只要確保數據庫名稱是兩個實例相同,或確保您不會在所有腳本的頂部指定USE (database),如果數據庫的名稱是從目標不同的目標。

+0

我正在對數據庫進行更改。我可以在VS項目中更改連接。我需要知道如何部署'服務器'的開發版本。 – 2010-05-20 20:58:31

+0

@Chris:你能同時連接到兩臺服務器嗎?在這種情況下,我衷心推薦使用Red-Gate SQL Compare和SQL Data Compare來處理數據庫同步 - http://www.red-gate.com/products/sql_compare/index.htm – 2010-05-20 21:00:37

+0

我沒有奢侈品的特殊工具,我只是認爲有這種類型的情況的標準策略 – 2010-05-20 21:17:18

-1

也許我誤解了這個問題,但我不知道如何交換數據庫。如果您創建數據庫的開發版本並更新模式,則必須運行一些測試並更新數據。你現在不能只是開發數據庫,​​因爲它裏面充滿了測試數據。

您需要做的是運行一個工具,將舊模式與新模式進行比較,然後將這些更改應用於生產數據庫。市場上有很多工具可以做到這一點。否則,你可以轉儲舊的和新的模式,通過普通文件比較運行它們以獲得差異,然後構建一個更新腳本。

在我現在的項目中,我們使用了我認爲很糟糕的做法:我們爲每個版本保留一個手動維護的模式更新腳本,每當有人做出更改時,他們都應該更新此腳本。時不時地有人犯了一個錯誤,我們必須爭先恐後地弄清楚出了什麼問題。就像我們在部署到我們的用戶驗收測試時遇到問題一樣,因爲有人更新了新表的create語句,以將外鍵包含到另一個新表中......沒有意識到被引用的表是在腳本中進一步創建之前創建的。它工作得很好,因爲表格是按照使其工作的順序創建的。

我的結論是,你可以在動態更改模式的情況下更好,然後當你完成時,運行自動比較來生成ALTER語句。

順便說一下,在我幾年前開發的一個項目中,對於每個客戶都有自己的數據庫副本的桌面應用程序,我們放入了我認爲是非常好的功能:每次程序啓動後,它將數據庫的模式與它認爲應該是的模式進行了比較,如果它們不匹配,它會自動更新它。所以當他們安裝一個新版本時,它會在第一次運行時自動更新數據庫。

+0

'自動比較'腳本,這是如何完成的? – 2010-05-20 21:18:55

+0

您應該alwawys在腳本中執行所有數據庫更改並將腳本保存在源代碼管理中。然後就像其他代碼一樣,您可以輕鬆部署。依靠比較工具是一種不好的做法。 – HLGEM 2010-05-20 21:38:29

+0

@HLGEM:很明顯,我不同意。如果你手動建立你的更新腳本,遲早你會犯一個錯誤。您將更新應用於表格,但忘記將其放入腳本中。或者你會改變一個字段的屬性,因此更新原始的「創建」語句,但是你會輸入錯誤。等比較程序應該保證給出正確的結果。如果由於歷史原因想要將由比較程序生成的腳本保存在您的存檔中,請冷靜。僅僅因爲一項技術是更多的工作並不會自動使它成爲正確的方式。 – Jay 2010-05-21 13:22:18

0

首先,您應該爲您所做的更改編寫腳本。他們應該在源頭控制。沒有腳本和版本控制,不應該對數據庫結構進行任何更改。

由於您似乎沒有應該部署的內容,因此您需要使用工具來檢查數據庫之間的差異。 Redgate的SQL比較是買的。

要小心簡單地使用該工具而沒有想到,dev中可能會有變化,您還沒有準備好促進prod。在運行之前閱讀腳本。

此外,您可能需要使用SQL數據比較來針對任何查找表運行,您必須查看是否已在dev中添加了新值,需要轉至產品。再次,這些插入應該已經腳本和源代碼控制,然後部署很簡單。

+0

我知道我會聽起來很愚蠢,但是這些「腳本」和「變化」在做什麼呢?我直接從'Management Studio'建立了這個工具 – 2010-05-20 21:48:12