簡體   English   中英

使用SQL Server部署數據庫更改的簡單方法是什么?

[英]What is an easy way to deploy database changes using SQL Server?

我工作的軟件系統是醫療計費系統,大量數據和數據表以及存儲過程。

我正在閱讀文章“ 改進代碼的12個步驟 ”,而在Joel Test#2中則說:你能一步完成構建嗎?

現在我想知道,這是否意味着部署構建(以便客戶可以更新其部署)。

現在我遇到的主要問題是你如何進行一步數據庫更新?

目前,當我們對數據庫進行更改時,會記錄所有更改並將其添加到數據庫更新腳本中,該腳本在創建部署到客戶構建時會附加一個版本號。

有更簡單的方法嗎? 一些腳本或應用程序在那里采用“之前和之后”查看數據庫模式並創建像我提到的更新腳本?

或者這只是每個人都這樣做的方式,我很難相信,但似乎有道理。

自動化系統可以減少錯誤,並大大加快部署構建時間,我很想知道如何這樣做。

您可以通過各種級別的復雜性:

  • 如果您有手動創建的更新腳本,並且只是想方便將這些腳本應用到各種服務器,請查看SSW SQLSSW SQL Deploy 它可以很好地處理這種情況

  • 如果你傾向於做更多的數據庫差異方法,那么Red Gate的SQL Compare (已經提到過)和SQL Packager就是一個很棒的組合。 您可以在新舊之間區分數據庫,然后將更改應用於一個很好的包中 - 作為EXE或C#項目

  • 如果你想要一個真實的,端到端的,深思熟慮的方法(有一點學習曲線),請查看Innovartis的DBGhost方法。 如何處理數據庫開發和增量更新是一種完整的方法/技術。 它非常強大,看起來非常有前途 - 但這是一種全有或全無的方法:要么你買入它並端到端地使用它,要么你沒有

希望這個對你有幫助!

redgate有一個工具SQL Compare來比較數據庫並生成一個要同步的腳本。 我們曾經使用它,但最近使用您描述的相同過程切換到手動腳本。 使用具有唯一版本號的手動,細粒度腳本已經很好地完成了。

我們將升級腳本集成到單元測試中,因此它們作為持續集成的一部分與代碼一起進行測試。 我認為這是“一步到位”的重要組成部分。

看一下這篇博客文章。 我在幾個項目中使用過任何數據庫版本的這種單一更新腳本,它的工作非常好。

http://blogs.msdn.com/danhardan/archive/2007/03/30/database-change-scripts-mambo-style.aspx

您可能需要調整工作流程以適應您的工作流程和/或更新模板.sql文件,但總的來說,我發現這個想法是一個非常可靠的數據庫部署方法。

編輯:只是詳細說明我是如何使用這種技術的。 基本上,我的所有數據庫修訂腳本都被置於源代碼管理中。 然后,作為構建框上的后構建步驟,在腳本目錄上運行此Mambo工具,以將腳本滾動到事務所包含的單個腳本中,以便在出現任何錯誤時允許回滾。 然后,安裝程序足夠智能,可以查找.sql腳本以對現有數據庫運行。

這樣做的原因是因為匯總的腳本會檢查每個作為單個腳本的片段是否已針對所需的數據庫運行。 因此,只運行最新的腳本。 需要注意的是,一旦腳本被檢入源代碼控制並已部署,您就無法編輯它,因為跟蹤表已經認為腳本已經運行。 這對我參與的項目來說很好,因為我們只是在腳本文件夾中添加了另一個腳本。

希望我能夠很好地解釋這個過程以便理解。 它實際上並不復雜,如果該方法適用於您的項目,則非常有用。

回答第一個問題“現在我想知道,這是否意味着部署構建(以便客戶可以更新他們的部署)?”

我認為Joel測試#2不是為了部署移動到prod,而是為了在開發期間的持續集成。

至於prod中的數據庫更改,它們都應該通過腳本作為事務卷展欄的一部分或在備份數據庫之后完成。 如果首次展示失敗,您總是希望能夠導航回來。

將數據庫開發為一組依賴於彼此的補丁。 然后使用https://github.com/LuvDaSun/sqlpatch (由我)這樣的工具構建一個用於部署的sql文件。

sqlpatch將按正確的順序對補丁進行排序,並確保每個補丁只執行一次,即使同一個腳本運行兩次也是如此。

此策略可用於在ci / cd環境中部署數據庫。 這使得部署就像推送到分支一樣簡單。

有些應用程序可以同步數據庫,但我認為最好不要做你正在做的事情。 編寫腳本來更新數據庫使您能夠處理錯誤並運行事務。 這被認為是最佳做法。

Microsoft自己在SQL 2012中引入了數據層應用程序 ,作為部署和升級數據庫的免費選項。

我使用並喜歡這個工具,包括用於生產部署。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM