2013-01-17 59 views
0

我們承載了由另一個組提供的多個SQL Server 2008數據庫。每隔一段時間,他們都會提供一個數據庫的新版本的備份,並且我們會執行刪除舊數據庫的一個例程,恢復新數據庫,然後進入新恢復的數據庫,並將現有的SQL登錄名添加爲該數據庫中的用戶併爲其分配一個存在於所有這些數據庫中的標準角色。在多個SQL Server 2008數據庫上自動執行任務

例程是相同的,只是每個數據庫的數據和日誌文件都有不同的名稱和不同的邏輯和操作系統名稱。我的意圖是創建一個輔助數據庫,其中包含一個定義與每個數據庫關聯的名稱集合的表格,然後創建一個接受要替換的數據庫名稱和備份文件名稱作爲參數的存儲過程。 SP將查找關聯的邏輯和操作系統文件名,然後執行該操作。

這將需要建立命令作爲字符串,然後執行它們,這很好。但是,存儲過程在恢復數據庫後,必須先使用它,然後才能將SQL登錄名作爲用戶添加到數據庫並將其分配給數據庫角色。存儲過程不能執行此操作。

還有什麼替代方法可以創建一個動態填充片段並可以像這樣操作跨數據庫的自動化過程?

回答

0

我想出了我自己的解決方案。

  1. 創建工作做的工作,指定作業應運行了主數據庫,並定義包含要執行的代碼,它一個的Transact-SQL的一步。

  2. 在爲託管要由作業使用的對象而創建的實用程序數據庫中,創建一個表格,該表格最多包含一行,其數據將作爲該作業的參數。

  3. 在該數據庫中,創建一個存儲過程,可以使用應該存儲供作業使用的參數(包括要替換的數據庫的名稱)來調用該存儲過程。 SP應驗證參數,報告任何錯誤,並且如果成功,則將它們寫入參數表並使用msdb..sp_start_job啓動作業。

  4. 在作業中,對於作業需要引用要替換的數據庫的任何語句,請將該語句構建爲字符串並執行它。

  5. 對於需要在重新創建的數據庫中運行的任何語句,雙引號將該語句用作sp_executesql IN THAT DATABASE實例的參數,然後使用EXECUTE運行整個事件:

    SET @statement = @dbName +'..sp_executesql''[要在數據庫中執行的語句@dbName]''';

    EXEC(@statement);

  6. 將作業配置爲將輸出寫入日誌文件。

相關問題