Поделиться через


Практическое руководство. Сравнение схем баз данных

Этот раздел применим к:

Visual Studio Ultimate

Visual Studio Premium

Visual Studio Professional 

Visual Studio Express

Тема применяется Тема применяется Тема не применяется Тема не применяется

Используя Visual Studio Premium или Visual Studio Ultimate, можно сравнить две схемы баз данных. Схемы могут быть представлены базой данных, проектом приложения уровня данных, проектом базы данных или выходными данными построения проекта базы данных (файл DBSCHEMA). Сравниваемые объекты называются исходным и целевым. По завершении сравнения схем его результаты отображаются в окне Сравнение схем. Также Visual Studio создает скрипт языка описания данных (DDL), который может использоваться для синхронизации разных схем.

Если вы планируете сравнивать проект базы данных с целевой базой данных на постоянной основе, можно добавить сравнение схемы в проект базы данных. Затем можно повторно сравнить схемы, заново открыв сравнение. Сохраняя сравнение схемы, вы сохраняете сведения о подключении, параметры, специфичные для сеанса, и значения переменных SQLCMD. Результаты не сохраняются и создаются заново при повторном открытии SCMP-файла для сохраненного сравнения схемы.

По завершении сравнения можно выполнить другие шаги.

  • Можно просмотреть структурные различия двух баз данных. Дополнительные сведения см. в разделе Просмотр различий схем.

  • Можно щелкнуть Обновить скрипт обновления, чтобы увидеть полный скрипт, который будет использоваться для синхронизации схем в случае ее выполнения.

  • Можно обновить весь целевой объект или его часть в соответствии с исходным объектом. Дополнительные сведения см. в разделе Синхронизация объектов баз данных или серверов.

  • Можно сравнить данные, находящиеся в целевом и исходном объектах. Дополнительные сведения см. в разделе Практическое руководство. Сравнение и синхронизация двух баз данных.

Дополнительные сведения о сценариях сравнения схем см. в разделе Сравнение и синхронизация схем баз данных.

Можно также использовать программу VSDBCMD.EXE для сравнения DBSCHEMA-файлов из командной строки. Это можно делать, например, для создания скрипта обновления, обновляющего целевую базу данных при отсутствии прямого доступа к целевому серверу.

Содержание раздела

Сравнение двух схем с помощью окна "Сравнение схем"

  1. Если требуется сравнить две схемы, но не нужно сохранять параметры как часть проекта базы данных, выполните следующие шаги.

    1. Откройте меню Данные, выберите Сравнение схем и щелкните Новое сравнение схем.

    2. Перейдите к шагу 3.

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

    1. В окне Обозреватель решений щелкните правой кнопкой мыши папку Сравнения схем, выберите Добавить и щелкните Сравнение схем.

      Откроется диалоговое окно Добавление нового элемента.

    2. В поле Имя введите имя для сравнения схем и нажмите кнопку Добавить.

  3. Укажите исходный и целевой объекты для сравнения, щелкнув Проект, База данных или Файл схемы базы данных для каждой из схем.

    Примечание

    Можно задать файл схемы базы данных для целевой схемы, но его нельзя обновить.Полный список поддерживаемых сценариев сравнения см. в разделе Сравнение и синхронизация схем баз данных.

  4. Если вы щелкнули База данных для исходного или целевого объекта, подключитесь к источнику данных, щелкнув его в списке.

    Если нужная база данных не представлена в списке, щелкните Новое подключение. В диалоговом окне Свойства подключения идентифицируйте сервер, на котором находится исходный или целевой объект, и тип проверки подлинности для использования при подключении к этому объекту. При желании можно щелкнуть базу данных на этом сервере. По завершении нажмите кнопку ОК.

    Примечание

    После установки подключения оно отобразится в обозревателе сервера в Подключения данных.

  5. Если щелкнуть Файл схемы базы данных для исходного или целевого объекта, то следует ввести путь и имя файла или щелкнуть Обзор, чтобы найти файл.

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

    Важно!

    По умолчанию сеансы сравнения схем используют параметры, которые задаются в разделе Сервис, Параметры.Если вы не хотите игнорировать расширенные свойства, щелкните Параметры, чтобы изменить соответствующий параметр.Дополнительные сведения о настройке параметров для сравнения схем см. в разделе Практическое руководство. Установка параметров сравнения схем базы данных.

  7. (Необязательно) Щелкните Переменные SQLCMD, чтобы задать файл SQLCMDVARS, содержащий список переменных и их значений.

    Примечание

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

    Значения будут заменены в соответствующем проекте базы данных при сравнении схем.

  8. Нажмите кнопку ОК.

    Начнется сравнение схем.

    Примечание

    Можно остановить выполняющееся сравнение, щелкнув Остановить на панели инструментов.

Сравнение схем с использованием модели автоматизации Visual Studio

  1. Откройте меню Вид, выберите последовательно пункты Другие окна, Окно команд.

  2. В командном окне введите следующую команду:

    Data.NewSchemaComparison sourceIdentifier targetIdentifier
    

    Замените sourceIdentifier на один из следующих вариантов.

    • /ProviderType ConnectionBased /ConnectionString "строка_подключения"

    • /ProviderType ConnectionBased /ConnectionName имя_подключения

    • /ProviderType ProjectBased /ProjectName имя_файла.dbproj

    • /ProviderType FileBased /ProjectName имя_файла.dbschema

    • /ProviderType FileBased /ProjectName имя_файла.dacpac

    Замените targetIdentifier на один из следующих вариантов.

    • /ProviderType ConnectionBased /ConnectionString "строка_подключения"

    • /ProviderType ConnectionBased /ConnectionName имя_подключения

    • /ProviderType ProjectBased /ProjectName имя_файла.dbproj

    • /ProviderType FileBased /ProjectName имя_файла.dbschema

    • /ProviderType FileBased /ProjectName имя_файла.dacpac

    Если исходная и целевая база данных не указаны, появится диалоговое окно Новое сравнение схем. Дополнительные сведения о параметрах для команды Data.NewSchemaComparison см. в разделе Справочник по командам автоматизации функций работы с базами данных в Visual Studio.

    Будет выполнено сравнение объектов и параметров в заданных исходном и целевом объектах. Результаты появляются в сеансе сравнения схем, который можно при желании сохранить. Для получения дополнительных сведений о методах просмотра результатов и синхронизации схем см. разделы Просмотр различий схем и Синхронизация объектов баз данных или серверов.

Первое сохранение сравнения схем

  1. В меню Файл выберите Сохранить <имя_сравнения_схем>.scmp.

    Откроется диалоговое окно Сохранить файл как.

  2. Укажите путь и имя файла для сравнения схем.

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

  3. Нажмите кнопку Сохранить.

    Сравнение схем сохраняется в заданном вами местоположении.

Просмотр различий схемы

Можно определить, чем исходная схема отличается от целевой, сравнив их и просмотрев результаты в виде дерева в окне Сравнение схем. Например, можно показывать только те объекты, которые существуют в источнике, но отсутствуют в целевом объекте. Можно также просмотреть подробные сведения о том, чем именно отличаются объекты, и можно обновить результаты, чтобы увидеть последние изменения.

Вы можете также просмотреть результаты в виде команд Transact-SQL в скрипте, который будет синхронизировать целевой объект с источником. Этот скрипт можно вывести в окно Скрипт обновления схемы или в редакторе Transact-SQL, также скрипт можно экспортировать в файл. Если вам требуется обновить целевой объект в соответствии с источником, вы можете сразу запустить скрипт для синхронизации схем или изменить скрипт, а затем запустить его. Дополнительные сведения см. в разделе Синхронизация объектов баз данных или серверов.

Фильтрация результатов по типу

  1. На панели инструментов Сравнение двух схем щелкните Фильтр.

  2. Щелкните один или несколько фильтров, чтобы указать, какие наборы результатов будут выводиться.

    Примечание

    Параметры фильтрации сохраняются в SCMP-файле и не теряются при смене исходной и целевой схем.

Просмотр изменений в рамках определения объекта

  • Щелкните любую строку в сетке со статусом "Новый", "Отсутствует" или "Отличается по форме".

Обновление результатов сравнения

  • На панели инструментов Сравнение двух схем щелкните Обновить.

    Источник и целевой объект снова сравниваются, результаты сравнения обновляются.

Просмотр скрипта синхронизации

  • В меню Данные выберите Сравнение схем и щелкните Показать скрипт обновления схемы.

    Примечание

    Если пункт Показать скрипт обновления схемы недоступен, то либо невозможно создать скрипты для заданного целевого объекта, либо необходимо обновить сравнение.Например, если целевой объект — файл DBSCHEMA, нельзя создать скрипт обновления.

    Откроется окно Скрипт обновления схемы, в котором будет выведен скрипт, который можно использовать для обновления целевого объекта в соответствии с источником.

    Примечание

    Если открыто окно Скрипт обновления схемы, также можно щелкнуть Обновить скрипты обновления схемы.

Открытие скрипта синхронизации в редакторе Transact-SQL

  • В меню Данные выберите команду Сравнение схем, затем Экспортировать в и щелкните Редактор.

    Откроется редактор Transact-SQL, в котором будет выведен скрипт, который можно использовать для обновления целевого объекта в соответствии с источником.

Сохранение скрипта синхронизации в файле

  1. В меню Данные выберите команду Сравнение схем, затем Экспортировать в и щелкните Файл.

    Откроется диалоговое окно Сохранение скрипта обновления схемы.

  2. В поле Имя объекта введите имя для скрипта синхронизации и нажмите кнопку Сохранить.

    Скрипт будет сохранен в указанном файле.

Синхронизация объектов баз данных или серверов

После сравнения схем источника и целевого объекта можно синхронизировать всю схему или только объекты базы данных, заданные в этой схеме. Дополнительные сведения см. в разделе Сравнение и синхронизация схем баз данных.

Если и источник, и целевой объект расположены на одном сервере, при попытке синхронизировать схемы может возникнуть ошибка. Ошибка происходит потому, что целевые файлы, такие как файлы файловой группы, нельзя создать с тем же именем, что источник, так как они уже существуют на сервере. Чтобы решить эту проблему, замените Действие обновления на Пропустить для файлов, вызывающих конфликт.

Примечание

Сравниваемые базы данных называются исходной и целевой.При синхронизации схем баз данных обновляется целевая база данных, а исходная остается неизменной.Файл проекта (DBSCHEMA) можно задать в качестве цели, но обновить файл проекта нельзя.

Обновление схемы целевой базы данных

  1. Сравните две схемы.

    По завершении сравнения окно Сравнение схем отображает объекты баз данных, сравнение которых было выполнено. Каждая строка представляет один объект базы данных.

  2. (Необязательно) В столбце Действие обновления укажите для каждого объекта списка результатов, следует ли применить обновление, или пропустить его.

    Отдельные действия синхронизации не выполняются немедленно, а сохраняются для пакетного выполнения на следующем шаге.

    Примечание

    Чтобы сбросить столбец Действие обновления для всех объектов определенного типа щелкните правой кнопкой мыши узел этого типа (например, узел «Таблицы») и щелкните Восстановить умолчания.Чтобы задать конкретное значение столбца Действие обновления для всех объектов определенного типа, щелкните правой кнопкой мыши узел для этого типа и выберите Создать все, Обновить все или Пропустить все.

  3. Чтобы синхронизировать объекты базы данных, которые различаются, отсутствуют или добавлены, выполните одно из следующих действий.

    • Для немедленного обновления целевой базы данных щелкните Записать обновления.

      В результате ко всем выбранным объектам целевой базы данных, кроме помеченных как Пропустить, будет применена схема объектов исходной базы данных. Данная синхронизация предполагает обновление, создание и удаление целевых объектов.

      Важно!

      В процессе обновления схемы можно отменить операцию, щелкнув Остановить запись в целевой объект.Если обновление остановлено, изменения не распространяются.Однако откат частичных изменений объектов User и Role может не произойти, поскольку эти объекты не могут заключаться в транзакции.

    • Для просмотра изменений перед обновлением целевой базы данных воспользуйтесь окном Скрипт обновления схемы или щелкните Экспортировать в редактор.

      Такой выбор создает скрипт Transact-SQL и открывает его в окне редактора Transact-SQL. Можно просмотреть и, при необходимости, изменить скрипт, прежде чем запускать его для целевого объекта. Созданный скрипт Transact-SQL соответствует скрипту, который был бы выполнен по щелчку Записать обновления.

      Примечание

      Visual Studio не обновляет автоматически результаты, отображаемые в окне Сравнение схем по завершении действия Записать обновления.Вместо этого строка состояния обновляется предложением нажать кнопку Обновить.Такое поведение дает вам возможность снова сравнить схемы, что может занять много времени, если схемы велики.

    • Чтобы сохранить изменения в файл, не выводя их в редакторе Transact-SQL, щелкните Экспорт в файл.

      Такой выбор создает скрипт Transact-SQL и сохраняет его в заданный файл. Созданный скрипт соответствует скрипту, который был бы выполнен по щелчку Записать обновления. Такой подход подойдет, если обновление будет выполняться позднее другим лицом при помощи предложенного вами скрипта или если дополнительные изменения должны быть внесены в скрипт другим лицом.

Сравнение схем с помощью программы VSDBCMD.EXE

Может потребоваться создать скрипт развертывания для базы данных, к которой у вас отсутствует доступ. Это можно сделать с помощью программы VSDBCMD.EXE, если имеется DBSCHEMA-файл для проекта, который требуется развернуть, и DBSCHEMA-файл, представляющий текущее состояние целевой базы данных. Если целевая схема отсутствует, можно попросить администратора базы данных импортировать ее для вас с помощью второй процедуры из этого раздела.

Обе эти процедуры можно выполнять на любом компьютере, на котором имеется инструмент VSDBCMD.EXE и вспомогательные файлы. Все необходимые файлы находятся в следующей папке и вложенных в нее папках: %PROGRAM FILES%\Microsoft Visual Studio 10.0\VSTSDB\Deploy. Дополнительные сведения см. в разделе Справочник по командной строке для VSDBCMD.EXE (развертывание и импорт схемы).

Сравнение схем из командной строки

  1. Откройте окно командной строки.

  2. Перейдите в папку, содержащую файл VSDBCMD.EXE.

  3. В командной строке введите следующую команду: vsdbcmd.exe /a:deploy /dd:- /dsp:sql /model:ProjectName.dbschema /targetmodelfile:TargetDatabase.dbschema /DeploymentScriptFile:OutputFilename.sql /p:TargetDatabase="TargetDatabaseName"

    Вместо ProjectName укажите имя DBSCHEMA-файла, созданного при построении проекта базы данных. Вместо TargetDatabase укажите имя DBSCHEMA-файла, содержащего схему для целевой базы данных. Вместо OutputFilename укажите имя, которое требуется назначить скрипту развертывания. Вместо TargetDatabaseName укажите имя базы данных, которую требуется обновить.

    Примечание

    Если требуется включить скрипт, выполняемый перед развертыванием, и скрипт, выполняемый после развертывания, из проекта базы данных, можно добавить в командную строку один параметр: /ManifestFile:ProjectName.deploymanifest.DEPLOYMANIFEST-файл находится в папке, вложенной в папку sql в папке проекта.

  4. Теперь можно использовать файл OutputFilename.sql для развертывания обновлений на целевом сервере или можно поручить это администратору базы данных.

Импорт целевой схемы

  1. Откройте окно командной строки.

  2. Перейдите в папку, содержащую файл VSDBCMD.EXE.

  3. В командной строке введите следующую команду: vsdbcmd.exe /a:Import /dsp:sql /model:TargetDatabase.dbschema /cs:ConnectionString

    Вместо TargetDatabase укажите имя DBSCHEMA-файла, импортируемого из целевой базы данных. Вместо ConnectionString укажите строку подключения к целевой базе данных. Например, можно указать /cs:"Data Source=MyServer/SQL2K8;Integrated Security=True;Pooling=False;Initial Catalog=MyDatabase".

    После завершения команды будет создан DBSCHEMA-файл. Он содержит определение схемы для базы данных, из которой она была импортирована. Дополнительные сведения см. в разделах Практическое руководство. Импорт схемы из командной строки и Справочник по командной строке для VSDBCMD.EXE (развертывание и импорт схемы).

См. также

Задачи

Практическое руководство. Сравнение и синхронизация двух баз данных

Основные понятия

Сравнение и синхронизация схем баз данных

Журнал изменений

Дата

Журнал

Причина

Июль 2010

Добавлены сведения о порядке использования инструмента VSDBCMD.EXE для сравнения схем из командной строки.

Обратная связь от клиента.