2014-01-20 116 views
0

我正在爲特定的Web應用程序進行自動化測試。它使用數據庫來保存數據(在這種情況下是SQL Server)。備份數據庫數據的方法

在我們的自動化測試中,我們執行了多個數據庫更改(插入,更新)。測試完成後,我們希望將數據庫恢復到原始狀態。

步驟將是這樣的:

  1. 創建莫名其妙備份
  2. 執行測試
  3. 從備份中恢復數據

的第一個版本是非常簡單 - 創建表的備份,然後恢復它。但是我們遇到了引用完整性問題。

之後,我們決定使用完整的數據庫備份,但我不喜歡這個想法。

此外,我們認爲我們可以跟蹤所有的引用和僅備份所需的表,而不是整個數據庫。

最後的想法是以某種方式記錄我們的動作(插入,更新),然後執行反向動作(插入刪除,更新舊數據更新),但看起來有點複雜。

可能還有其他解決方案嗎?

回答

0

找到簡單的解決方案 - 重命名錶。

算法是相當簡單:

  1. 重命名錶到另一個表,例如從「table-backup」創建「表」(「table」不會有任何依賴關係)
  2. 在應用程序中執行任何操作
  3. 刪除有髒數據的表(不會破壞引用完整性)
  4. 將「表備份」重命名爲「表」(引用完整性將保留)。

感謝

1

如果要使用插入和更新對數據庫進行最小限度的更改,那麼在測試結束時可以回滾事務內的那些更改是更好的選擇。通過這種方式,SQL Server將自動存儲有關您所做更改的信息,並在測試開始之前將其恢復到狀態。

BEGIN TRANSACTIONhttp://technet.microsoft.com/en-us/library/ms188929.aspx

1

我認爲更好的主意是創建測試數據庫。 你也可以爲方法創建接口,首先實現真實數據(使用真實數據庫),第二個使用測試數據庫。

1

您可以創建數據庫快照。

快照將跟蹤測試期間更改的所有更改的數據頁。完成之後,您可以將快照恢復到之前的狀態。

CREATE DATABASE [test_snaphot1] ON 
(NAME = test, FILENAME = 
'e:\SQLServer\Data\test_snapshot1.ss') 
AS SNAPSHOT OF [test]; 
GO 

--do所有測試

RESTORE DATABASE [test] from 
DATABASE_SNAPSHOT = 'test_snaphot1'; 
GO 

你必須爲你的數據庫的每個數據文件的快照文件。所以如果你有一個包含4個數據文件的數據庫,那麼你的快照語法應該包含4個快照文件。

2

其實,有沒有必要恢復對本地SQL Server的術語數據庫,也沒有跟蹤更改,然後還原回

您可以使用ApexSQL Restore - 一個SQL服務器工具將本地和本機壓縮的SQL數據庫備份和事務日誌備份作爲實時數據庫附加,可通過SQL Server Management Studio,Visual Studio或任何其他第三方工具訪問。它允許安裝一個或多個完整,差異和事務日誌備份

有關如何使用該工具在場景中檢查Using SQL database backups instead of live databases in a large development team網上的文章

免責聲明的詳細信息:我作爲一個產品支持工程師工作ApexSQL