2012-08-02 101 views
1

將生產數據庫複製到多個測試數據庫並保持完全限定名稱完整性的最佳方法是什麼?將生產數據庫還原到多個測試數據庫SQL服務器

當前爲了刷新測試環境,我們從生產數據庫恢復測試數據庫。然後,我們編寫所有的存儲過程/視圖/等。並對所有數據庫引用進行查找/替換以指向測試對象。在所有參考文獻都正確後,我們對其進行修改。

例如,數據庫從生產複製完成後,我們將不得不像這樣一個存儲過程:

alter procedure dbo.SomeProcedure 
as 
select SomeColumn 
from InternetSecurity.dbo.SomeTable 
join Validation.dbo.AnotherTable on SomId = AnoId 

對於測試數據庫,它需要:

alter procedure dbo.SomeProcedure 
as 
select SomeColumn 
from InternetSecurityQA1.dbo.SomeTable 
join ValidationQA1.dbo.AnotherTable on SomId = AnoId 

每測試數據庫具有視圖/存儲過程/函數可以引用多達30個不同的其他測試數據庫,因此「查找/替換」過程非常耗時並且容易出現很多錯誤。

什麼是恢復這些測試環境的最佳方法?

我們正在使用SQL Server 2008R2。

回答

1

假設不同的環境位於不同的SQL Server上(或至少在不同的實例上),那麼建議您保持所有環境中的數據庫名稱完全相同。使用權限(例如集成安全性)確保只有正確的環境系統和用戶訪問適當的環境數據庫。但是,如果確實需要針對不同環境(例如,同一SQL實例上的所有環境)保留不同的數據庫名稱,則可以使用sqlcmd with the -v開關來查看數據庫名稱的參數。然後

您更改腳本將需要重寫,像這樣:

alter procedure dbo.SomeProcedure 
as 
    select SomeColumn 
    from [$(InternetSecurity)].dbo.SomeTable 
    join [$(Validation)].dbo.AnotherTable on SomId = AnoId 

然後你可以寫批處理文件來傳遞正確的參數值SQLCMD。

或者,您可以在Visual Studio中使用.dbproj項目來設置多個配置,以便爲每個環境提供不同的值,並從Visual Studio生成腳本/發佈。

此外,AFAIK SQL Synonyms這裏真的沒有什麼幫助。你需要用同義詞替換所有procs和函數中的3個表名,這可能會混淆這個問題,因爲它沒有明確表是本地表還是外部表。

+0

這個接受已經逾期了。但sqlcmd是解決這個問題的最佳方法。謝天謝地,因爲我們能夠擺脫這種設置,所以不再需要它了。我們現在使用實例。 – 2016-04-15 18:53:54

0

據我所知,除了在腳本中替換數據庫名稱,沒有其他更簡單的方法。

相關問題