3

我們的SQL Server 2000實例擁有多個類似的數據庫,每個數據庫都適用於我們的每個客戶端。當需要全部更新它們時,我們使用Red Gate SQL Compare來在開發數據庫和所有客戶端數據庫的當前狀態數據庫的副本之間生成遷移腳本。SQL Server,在多個數據庫上執行批量T-SQL腳本

SQL Compare會生成一個事務性腳本,如果一個步驟失敗,腳本會回滾所有內容。但是目前我們的系統使用一種方法將批處理分隔符上的腳本分開(GO語句),然後分別運行每個命令,這會破壞所有事務處理。查詢由programmation數據庫(在傳統的ASP)

時,不支持該GO聲明,我想知道我怎麼能在所有這些數據庫上運行該腳本(保持交易)(如250 DB),編程或手動在工具中?在查詢分析器中,我們需要選擇每個數據庫並按運行這對於我們擁有的DB​​數量來說是相當長的。

回答

2

我使用外部sqlcmd command line tool。我在工作的服務器上遇到同樣的情況。

我有* .sql文件中的腳本和第二個文件中的數據庫列表。我有小型* .bat腳本,它遍歷所有數據庫並使用sqlcmd命令執行腳本。

在更多的細節我有這樣的:

  • 所有關於這一點我想我的部署腳本
  • SQL /目錄,我存儲的所有腳本
  • runIt數據庫DB.ini文件。蝙蝠 - 腳本部署腳本

命令行看起來更少這樣的:

sqlcmd -S <ComputerName>\<InstanceName> -i <MyScript.sql> -d <database_name> -T 

在SQL Server 2000是osql utility

UPDATE

紅門現在有一個叫SQL Multi Script工具,它基本上不正是你想要的。我支持SQL 2000到2008 R2,並在多個數據庫上並行運行查詢以提高性能。

+0

您發送的鏈接是SQL Server 2008,這是命令行工具也SQL Server 2000中可用? – MaxiWheat 2009-09-22 19:14:10

+1

我更新了我的答案。在SQL Server 2000中,該工具被稱爲osql。 – 2009-09-22 19:20:26

+1

* .bat文件的外觀如何 – 2009-09-22 19:49:02

0

不確定這是否可行,但嘗試用分號替換GO語句,並在一批中運行整個語句。

5

如果你可以使用SSMS從SQL 2005或2008,那麼我建議你免費SSMS Tool pack

0

如果我還記得,你還可以創建一個腳本在SQL比較變回一切,它在啓動狀態你可能想要生成兩者。

當我做了這種部署(已經有一段時間了)時,我首先加載到一個完全像prod一樣的登臺服務器,然後我開始確定這些腳本可以在prod上運行。如果有任何失敗(通常是因爲腳本運行的順序,不能將外鍵設置爲不存在的表)。我還先編寫了表格變更,然後是所有視圖變更,然後是所有UDF變更,然後是所有存儲的過程變更。這大大減少了由於物體尚不存在而導致的故障,但我通常還是有一些需要調整的。

1

7年後來我有同樣的問題,所以很多次,所以我做它,並公佈項目:

TAKODEPLOY

這裏有一些特點:

  • 獲取所有來自單個實例的數據庫並應用名稱過濾器。或者只是一個單一的直接連接。
  • 儘可能多地混合數據庫源。例如,兩個直接和一個帶有或沒有過濾器的完整實例。
  • 腳本編輯器(Avalon Text,相同的monodevelop使用)
  • 腳本被解析並在執行前檢測到錯誤。
  • 腳本被GO語句「分割」。
  • 將您的部署保存到文件中
  • 在部署前獲取所有數據庫的列表。
  • 實時查看發生了什麼(在此推薦PRINT語句!)。
  • 發生錯誤時自動回滾到獨立數據庫。
  • 通過鬆鼠透明更新。

你可以得到它:https://github.com/andreujuanc/TakoDeploy

相關問題