2008-10-07 65 views
0

我們有一個「主數據庫結構」,並且需要一個例程來保持客戶站點上的數據庫結構是最新的。從文本文件更新客戶端SQL Server數據庫結構

了一些建議已獲得to a related question,但是我正在尋找一個更具體的解決方案,沿着這些線路:

  1. 我想生成一個文本文件(XML或其它可讀格式)介紹整個數據庫結構(這可以進入版本控制)。這個例程將在內部運行,以提供一個數據庫模式文件,以便與我們產品的下一個版本一起分發。
  2. 然後,我需要一種方法來更新客戶端網站上的數據庫結構,以便它對應於主數據庫結構。 (換句話說,我不想跟蹤不同版本的數據庫結構的許多更改腳本,但是可以將客戶端數據庫結構更新爲當前主數據庫結構的更一般的例程。)

所以我要找的主要特徵可以被描述爲「數據庫結構到文本」和「文本到數據庫結構」。

+0

有一個缺失的步驟 - 將現有數據遷移到新的模式。 – jop 2008-10-07 09:33:52

回答

1

awholelot的差異工具,可以給你的架構和存儲過程和約束差異兩個數據庫之間。你可以推出自己的產品,但是如果你有一個複雜的模式,我認爲它會比其中一種工具更昂貴,許多人可以免費試用,以便測試。

問題是,你必須讓master數據庫聯機才能這樣做,並且可以從客戶端數據庫安裝(或在那裏安裝)進行訪問,這可能可行也可能不可行。

如果你不這樣做,我唯一能想到的另一個理智的選擇是使用遷移思路,保留SQL腳本+版本對的列表,以及每個數據庫的當前版本。這可以通過一個不同的工具進行整合,該工具可以根據客戶端的數據庫版本號和更改列表生成單個腳本。如果您沒有更改列表,您可以從差異工具運行開始,並從那裏跟蹤它們。

比較文本路徑(比較兩個模式的文本SQL轉儲)你似乎更喜歡看起來很難做到這一點,並自動對我做,看起來不像正確的路徑。

1

幾種流行的策略是這樣的變體:

  • 添加一個表格到數據庫:
    CREATE TABLE發行
    (發行編號INT NOT NULL,
    應用的datetime NOT NULL
  • 作爲發佈腳本的一部分,每個發行版在該表中插入一行。
  • 您現在可以通過單個查詢找出每個客戶端正在運行的版本,並運行該版本與他們想要運行的版本之間的所有版本。
  • 此外,你可以可能通過做這樣的事情檢查他們的模式是否正確的每個版本(正確的表名,列等):
    SELECT so。名,
    sc.name
    FROM系統對象所以,
    syscolumns中SC
    WHERE類型= 'U'
    ORDER BY 1,2
  • 然後計算結果的散列,並將其與預先計算的比較散列(通過在參考安裝上運行查詢生成)來查看安裝是否正確。
相關問題