Базы данных различий SQL Server 2008

#sql #sql-server #database #development-environment

#sql #sql-сервер #База данных #среда разработки

Вопрос:

Итак, вот в чем дело:

Справочная информация

  • Виртуальная машина Hyper-V может работать в режиме диска с различиями, в котором можно установить исходный файл VHD в состояние только для чтения и создать новый VHD, который отслеживает изменения и сохраняет их. Преимущество здесь в том, что вы можете легко создавать новые виртуальные машины без необходимости переустановки Windows и т.д.

Проблема

  • То, что я ищу, — это нечто подобное, но для баз данных SQL Server. Мы выполняем всю нашу разработку локально, а затем у нас есть окно, в котором запущено X экземпляров (по 1 для каждого разработчика). Затем у нас есть процесс, который копирует созданные производственные резервные копии и восстанавливает их в этих экземплярах. После завершения этого он проверяет выбранную разработчиком ветвь (из сценариев SQL) и запускает сценарии на экземпляре. Таким образом, они могут тестировать свой код на производственных данных до того, как он действительно начнет работать. Однако очень сложно иметь копию всех наших производственных баз данных для каждого экземпляра — было бы неплохо иметь 1 их набор и иметь дифференциальную опцию, которая просто сохраняет внесенные изменения. Возможно ли это или я сплю?

Возможное решение

  • Одно из решений, о котором я подумал, — это просто использовать фактический VHD с разностным диском. Я бы создал базовый виртуальный жесткий диск с нашими производственными резервными базами данных, которые будут изменены / созданы ночью с производственной базой данных. Затем я бы изменил / создал разностные диски и применил сценарии к каждому разностному диску. Таким образом, у нас есть 1 копия базы данных, а изменения разработчика записываются на отдельный диск с различиями. Однако я надеялся выполнить это в SQL Server.

Ответ №1:

В основном вывод, к которому я пришел, заключается в том, чтобы попытаться автоматизировать процесс различения дисков, как показано ниже:

  1. Создайте новый виртуальный жесткий диск в общей сетевой папке — мы будем называть это NAS1.
  2. Смонтируйте VHD с NAS1 на компьютере, который действует как процессор SQL (мы будем называть это SQLPROCESS1.
  3. SQLPROCESS1 выполняет следующие действия.
    1. Скопируйте файлы BAK SQL из рабочей среды в SQLPROCESS1 (это может занять некоторое время, но весь этот # 3 можно поместить в потоковое приложение, поэтому оно может копировать несколько и восстанавливать одновременно).
    2. Восстановите файлы на SQLPROCESS1 и укажите файлы данных (mdf, ldf) для размещения на новом VHD.
    3. Необязательно: переведите базы данных SQL в режим ПРОСТОГО резервного копирования и используйте SHRINKFILE, поскольку мы будем использовать их исключительно для разработки (и нам не нужны резервные копии). Это может сэкономить нам много места.
    4. Отсоедините все базы данных.
    5. Отсоедините виртуальный жесткий диск.
  4. Создайте отличающийся диск из родительского на NAS1.
  5. Скопируйте диск с различиями X раз (по мере необходимости для каждого экземпляра или разработчика).
  6. Необязательно: Мы используем центральный сервер с именем TEST1 для тестирования, и именно здесь мы собираемся смонтировать каждый диск с различиями — по 1 на экземпляр или разработчика.
    1. Сначала нам нужно отсоединить все базы данных от каждого экземпляра.
    2. Затем нам нужно будет размонтировать / отсоединить существующие жесткие диски с различиями, если таковые имеются.
  7. Прикрепите диски с различиями.
  8. Повторно подключите все базы данных в SQL Server.
  9. Необязательно: запускайте SQL-скрипты из ветви репозитория кода, как указано разработчиком.

Ссылки:

Для автоматизации я бы использовал простой набор пакетных файлов, VBS или PowerShell.

Редактировать: Просто попробовал это, и это отлично работает! У разработчиков теперь есть свой собственный экземпляр, и он записывает только их изменения.