2014-01-20 2 views
0

Я работаю над автоматическими тестами для конкретного веб-приложения. Он использует базу данных для сохранения данных (в этом случае SQL Server).Способы резервного копирования данных базы данных

В наших автоматизированных тестах мы выполняем несколько изменений в базе данных (вставки, обновления). И после того, как тесты были выполнены, мы хотим восстановить базу данных в исходное состояние.

Steps будет что-то вроде этого:

  1. Создать как-то резервное копирование
  2. Выполнить тесты
  3. Восстановление данных из резервной копии

Первая версия была довольно проста - создать резервную копию таблицы, а затем восстановить его. Но мы столкнулись с проблемой целостности ссылок.

После этого мы решили использовать полную резервную копию базы данных, но мне не нравится эта идея.

Также мы думали, что мы можем отслеживать все ссылки и создавать резервные копии только необходимых таблиц, а не целую базу данных.

Последние мысли о том, как каким-то образом регистрировать наши действия (вставки, обновления), а затем выполнять обратные действия (удаляет для вставок, обновления со старыми данными для обновлений), но выглядит немного сложнее.

Может быть, есть другое решение?

ответ

0

Обнаружено простое решение - переименование таблицы.

Алгоритм довольно прост:

  1. Переименовать таблицу в другую таблицу, например,«table» to «table-backup» (ссылки будут ссылаться на эту резервную таблицу)
  2. Создать «таблицу» из «table-backup» («таблица» не будет иметь никаких зависимостей)
  3. Выполнять любые действия в приложении
  4. Капля «таблицы» с грязными данными (не нарушает целостность ссылок)
  5. Переименуйте «table-backup» в «table» (целостность ссылок будет сохранена).

Благодаря

1

Если вы хотите внести минимальные изменения в базу данных с помощью «Вставить» и «Обновить», гораздо лучше использовать эти изменения в транзакциях, которые можно отбросить в конце теста. Таким образом, SQL-сервер автоматически сохранит информацию в отношении того, что вы измените, и вернет ее обратно в состояние до начала теста.

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

1

Я думаю, что лучше идея заключается в том, чтобы создать тестовую базу данных. Вы также можете создать интерфейс для методов, первая реализация для реальных данных (с реальным db), а вторая для test db.

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

Смежные вопросы