2010-10-20 37 views
4

會上我已經工作已經有了自己拼湊在一起的,偶然的每一個車間,知之甚少,疏於維護更新生產數據庫的方法。什麼是藝術部署數據庫更新到生產數據庫的狀態?

我從來沒有見過這樣的一致方法。

因此,在最新版本的SQL Server中,更新模式更改並將數據從開發或測試服務器遷移到生產服務器的最佳做法是什麼?

是否有第三方工具處理該怕疼?

我想像的終極工具將能夠

  • 檢測兩個DB之間的架構更改,並生成DDL更新一個到另一個。
  • 包括有自定義代碼執行自定義數據遷移步驟
  • 允許所以V1分貝可更新一路版本的V99數據庫,運行的所有腳本和遷移步驟才能的能力。
+0

這也取決於你的prod DB的用途。在我的環境中,所有的更新/插入/操作都發生在Dev中,然後它只是基本的只讀。我的要求與產品數據庫不斷更新的環境有很大不同。 – JNK 2010-10-20 14:37:56

回答

2

對於小型項目我已經使用RedGate來管理模式和數據遷移,並取得了很大的成功。非常容易使用適用於大多數情況。

對於架構和數據更改的大型企業系統,通常將所有SQL腳本保存爲文本文件並運行它們。我們還包含一個回滾腳本,以便在遷移過程中運行出現問題。在UAT服務器上運行此操作,然後在生產環境中測試/登臺/預先生成服務器。保存所有這些文件及其回滾腳本的副本應允許您從多個版本的數據庫中移出。

還有http://code.google.com/p/migratordotnet/如果您使用.NET它允許您在CODE中定義這些腳本。如果您希望以自動方式跨多個數據庫進行部署,那麼它非常有用。可以很容易地說我的數據庫設置爲版本23.或者將我的數據庫恢復到版本5.等。適用於模式和數據,但我只會真正使用它來處理幾行數據。

+0

MigratorDotNet是我見過這個問題的最佳答案。這是迄今爲止我看到的這個問題的最先進的解決方案,所以我會將此答案標記爲「已接受」。儘管其他人提到「這取決於你的用例」是完全正確的,但這個工具似乎適用於很多用例,除了最苛刻的用例之外。 – 2010-10-26 14:27:17

3

我用過的三兩件事是:

對於模式

的Visual Studio數據庫項目。咩。他們沒事,但你仍然必須自己做很多工作。

紅門的SQL比較和整個SQL列工具。他們已經很努力地讓這個東西可以進行版本控制。在實踐中,我發現在數據庫中通常會嘗試從版本時間軸中的A點到B點。使用二進制文件,通常只會在B點(我知道的過於簡化,但通常是真實的)中肆意暴露任何內容。

http://www.red-gate.com/

XSQL是開始,如果你的系統具有體積小,或許仍將是小的好去處:

http://www.xsqlsoftware.com/LiteEdition.aspx

我不工作或知道誰的工作或獲得這些人的任何錢。只是告訴你我過去做了什麼。

對於數據

紅門SQL數據比較。然而,如果你想要一些「免費」(或包含在SQL Server中) 我剛剛使用BCP並編寫了一個注入和提取數據的小系統,實際上已經取得了很多成功。通常,當我發現自己這樣做我會問自己,「爲什麼呢?如果我改變的數據,這是否意味着我真的改變的東西是配置?我可以在這裏使用不同的方法?」但有時你不能(可能這是一個遺留系統,原始開發人員認爲數據庫適用於所有應用程序)。

BCP提取的問題是它們沒有很好的版本控制。我使用過的一些技巧就像在字符模式下解壓並在提取查詢中填充命令,嘗試按順序拉出行,使它們更適合版本控制。

2

首先,你必須認爲方案之間的要求各不相同很多

  1. 客戶在Costco購買的產品的V1和他們的家庭辦公室或小型企業安裝。當v2發佈時,客戶購買一盒產品並將其安裝在新計算機上。它從v1安裝中導出數據並將其導入到v2安裝中。即使幕後v1和v2使用SQL Express實例,也不支持升級。不希望部署的數據庫上的架構更改(隱藏的數據庫,非技術用戶)並且絕對不受支持。唯一支持的「升級」路徑是明確的導出/導入,可能使用XML文件或類似的東西。

  2. 一項業務通過支持合同購買產品v1。它將其安裝在其部門SQL Server實例上,通過購買的產品訪問數據,並通過更多的集成服務,報告等進行訪問。當v2發佈時,客戶運行規定的升級過程,如果遇到問題它稱爲產品供應商客戶支持熱線,通過一些特定的步驟來部署客戶。數據庫架構自定義是預期的並且經常受支持,包括升級方案,但架構更改由客戶完成(在v2設計時未知)。

  3. 網絡啓動具有備份該網站的數據庫。開發人員對其個人實例進行更改並檢入更改。通過連續集成的自動構建部署可以獲取更改並將其部署到測試實例中,並運行構建驗證測試。主分支構建可以隨時部署到生產環境中。生產是一個支持該網站的數據庫。生產數據庫的結構被記錄並被理解爲100%,生產數據庫模式的每一次改變都通過生成系統和質量保證過程發生。在一個側面說明,這是大多數SO用戶提出你的問題的想法,減去關於'100%記錄和理解'的部分。我舉了WWW支持網站的例子,但deplyment實際上可以是任何東西。其要點是隻有一個生產數據庫(它可能包含HA/DR副本,它可能包含多個實際的SQL Server數據庫),並且是僅需要升級的數據庫。

  4. A succesfull網絡啓動。同上,但生產數據庫有5TB的數據和5分鐘的停機時間使得CNN成爲頭條新聞。模式更改可能涉及設置副本並將數據複製到具有連續更新的新模式中,然後將操作聯機切換到副本。模式更改由MCM專家設計,並將模式更改部署爲一個多周的過程。

我可以繼續智慧更多的場景。關鍵是,每種情況的要求都非常不同,所以沒有任何「最先進的技術」能夠回答所有這些問題。有些場景對於模式差異部署工具(如vsdbcmdSQL Compare)來說可以完全正常。明確的versioning scripts需要其他方案。其他可能有這樣的具體要求(例如0停機時間),每次升級都是一個項目,必須專門定製。

有一件事是明確的,雖然在所有的情況:如果你的店鋪的威脅開發數據庫MDF文件 *作爲「源」和使用的管理工具進行了更改它,那就是總是的主要#fail。所有更改都應作爲某種源控制工件明確捕獲,這就是爲什麼我最喜歡顯式版本腳本的原因,如Version Control and your Database。但我重新思考,VSDB項目支持編譯時模式驗證以及輕鬆重構模式對象使得一個非常強大的命題和VSDB模式比較部署可能沒問題。

另一個需要解決的重要問題是使用EF或LinqToSql等工具進行代碼優先模式建模。它可以很好地部署v1,但在任何後續版本中都會失敗。我強烈勸阻這些方法。

但總結和簡單回答:因爲今天,最先進的狀態。

+0

偉大的總結,Remus。而且看起來你是對的,最先進的技術*吸引人。除了最後一個(第4個)列表項之外,我認爲其他場景可以用相同的機制處理(如果存在的話)。 – 2010-10-21 12:11:52

1

在紅門,我們會根據您的要求推薦以下兩種方法中的一種,以及您需要您的流程的正式程度。如果您有一個開發數據庫,​​並且只是想將更改推送到生產環境,那麼SQL Compare就是這項工作的工具。通過使用模式快照可以實現版本控制級別。但是,如果您希望獲得完整的源代碼管理權益,例如團隊協作,沙盒環境,審計線索,合規性,歷史記錄,回滾等,則應考慮SQL Source Control。這將開發數據庫鏈接到Team Foundation Server或Subversion。

+0

在RedGate站點上,我還沒有看到SQL Compare能夠處理的位置情景比從表格中添加或刪除字段更加複雜。沒有提到能夠處理非規範化情況(將表中的列移動到其自己的獨立表中,並且回到原始狀態)或處理其中固有的數據遷移。我也沒有想到可以添加自定義代碼來處理比tSQL更復雜的事情。 (也就是說,我已經聽說了關於RedGate的非常好的事情,這些工具似乎不適合這裏。) – 2010-10-26 14:22:25

+0

你說得對,這不是SQL比較。正規化功能是分割表,並在SQL重構中(http://www.red-gate.com/products/sql_refactor/index.htm)。然而,這些重構已經被轉移到即將到來的SQL Prompt 5中(http://www.red-gate.com/MessageBoard/viewtopic.php?t=11980)。這將生成一個腳本來規範化,並且還會保存你的數據。請讓我知道如果這不符合您的要求! – 2010-10-26 20:36:51