2014-04-15 54 views
0

我對當前數據庫有相當舊的應用程序(在MSSQL上,但沒關係)。我用所有需要的靜態數據完全腳本化。現在我只想通過更新腳本介紹數據庫更改。因此,每個函數,每個SP將被放置在獨立文件中,並且所有模式更新腳本將被存儲在名爲'SomeProduct01_0001'的文件中。這意味着此腳本屬於產品SomeProduct,sprint 1並且它是第一個模式更新腳本。實現SQL腳本的常見做法應用程序

我知道,每個腳本必須絕對重新運行的,但無論如何,我想擁有的功能對這些腳本組合成一個基於數據庫版本(存儲在數據庫表)。

  1. 什麼常見的最佳做法是處理一串更新腳本?
  2. 什麼是更好的 - 在收集器中實現版本anylyzis (batexe文件)或者爲每個文件添加一些SQL頭?從其他角度來看,我已經有了版本 - 它將包含sprint標識符和腳本標識符,不確定是否可以在腳本標題中複製此信息。
  3. 如何跳過文件內容如果用戶試圖將其應用到較新的數據庫,但保持 可用性結合此腳本與任何其他執行更新 其他舊數據庫?
  4. 如何避免數據庫衝突,如果合併腳本運行列/仍然不在數據庫存在,但將在BYT這個腳本創建(例如,在第10行的表創建,並在第60行是在觸發或者限制使用的表,因爲我知道腳本不會被驗證)?也許包裝在EXEC('')整個腳本?除了單引號字符之外,我還需要什麼?

UPD:正如David坦澤asnwered最好是用現成的解決方案爲DB遷移,所以它可能是像我這樣的情況下,最好的解決辦法。這不是,也不是我的問題的答案,但它適用於新的解決方案。

+0

查看Liquibase或Flyway工具 –

+0

@a_horse_with_no_name謝謝,非常有趣的遷移工具。據我瞭解,它主要面向開發環境。我找不到任何關於使用這些工具創建交付包的提示。 –

回答

1

你沒有這個工具自己,有這樣做的工具。看看dbmaintain,它提供了您所描述幾乎一模一樣的功能:

http://www.dbmaintain.org/overview.html

我知道,並已與誰使用它來管理他們的所有環境中的數據庫架構的幾支球隊的工作:開發,測試,舞臺和製作。

http://flywaydb.org/似乎是另一種工具來做到這一點,它有更多的功能。他們甚至可以在主頁上比較多種工具(包括dbmaintain)

+0

哇,它看起來像我需要的工具!謝謝。 –

+0

@ AlexG.P。如果它能幫助你,你能接受答案嗎?謝謝! –

+0

這不完全是我問過的,但它適合我的情況。 –

相關問題