Сравните 2 базы данных SQL-сервера из программы vb.net

Я использую VB.net 2013, SQL Server 2008R2 и SMO.

У меня есть 2 базы данных сервера sql (фактически в виде файлов резервных копий .bak).

Мне нужно найти различия между базой данных1 и базой данных2 (только структура и отношения), а затем применить эти изменения к базе данных2, чтобы эта база данных имела ту же структуру и отношения с базой данных1.

Как я могу это сделать ?

Спасибо !


person alex    schedule 27.07.2015    source источник
comment
Это непросто и обычно решается с помощью специализированных инструментов. Вам нужно не только найти различия, но и решить, как применить их к целевой базе данных. На самом деле инструменты базы данных SQL Server уже содержат средства сравнения схем и данных. Единственный случай, когда инструмент может не потребоваться, — это когда вы используете миграцию Entity Framework для применения изменений схемы к базе данных приложения.   -  person Panagiotis Kanavos    schedule 27.07.2015
comment
На самом деле я использую Entity Framework, но я использую Database First, и я читал, что это невозможно сделать.   -  person alex    schedule 27.07.2015
comment
Как я уже сказал, это не тривиально, вам нужен инструмент. А Visual Studio уже содержит инструмент для сравнения схем. SSDT можно использовать как автономную среду или внутри Visual Studio.   -  person Panagiotis Kanavos    schedule 27.07.2015
comment
Хорошо, но мне нужно сделать этот процесс внутри моей программы во время выполнения. Может ли это средство помочь?   -  person alex    schedule 27.07.2015
comment
Что ты пытаешься сделать? Инструмент не поможет вам, если вы пытаетесь сделать что-то опасное. Это также не поможет вам обновить схему базы данных, потому что не знает, как работает ваше приложение. Причина, по которой это нетривиально, заключается в том, что вы не можете угадать, как выполнить миграцию, например удаление столбца, создание столбца NOT NULL, переименование столбца и т. д. Вот почему в EF есть миграции и инструменты, позволяющие вам изменить их сценарий, прежде чем они его применят   -  person Panagiotis Kanavos    schedule 27.07.2015
comment
То, что я пытаюсь сделать, я объяснил на свой вопрос. У меня есть 2 базы данных. Внутри моей программы во время выполнения я хочу найти различия между Database1 и Database2, а затем применить эти изменения к database2, чтобы 2 базы данных имели одинаковую структуру. НО Я ХОЧУ СДЕЛАТЬ ЭТО ИЗНУТРИ МОЕГО ПРИЛОЖЕНИЯ ВО ВРЕМЯ ВЫПОЛНЕНИЯ.   -  person alex    schedule 27.07.2015
comment
@PanagiotisKanavos пытается сказать, что вы задаете очень сложный вопрос. Вы не можете просто перенести структурные изменения из одной базы данных в другую, не понимая, что эти изменения делают и для чего они нужны, поэтому коммерческие инструменты, которые делают это, имеют всевозможные возможности для изменения процесса миграции в соответствии с вашим бизнес-кейсом.   -  person Colin Mackay    schedule 27.07.2015
comment
@Colin - я понимаю это, но я не думаю, что просил инструмент, чтобы сделать это быстро. Я хочу знать, что внутри программы vb.net есть ли способ сравнить две базы данных, найти различия и после применить их к другой базе данных. Например, у SMO есть способ сделать это?   -  person alex    schedule 27.07.2015
comment
@alex, вы не можете автоматически обновлять данные. Только EF Migrations предоставляет готовый способ, и даже он, по сути, повторяет то, что вам приходится делать вручную — создавать скрипт со схемой и миграциями данных. , ведите журнал развернутых версий и перед обновлением убедитесь, что база данных не отклонилась от последней развернутой версии. С DB сначала вам нужно будет создать сценарии, используя один из инструментов сравнения.   -  person Panagiotis Kanavos    schedule 27.07.2015
comment
@alex, другими словами, ты задаешь неправильный вопрос. Если вы пытаетесь найти способ развертывания новых версий базы данных, ответ не заключается в автоматическом применении различий между двумя базами данных. Различие схемы — это только первый шаг, остальное вам нужно написать самостоятельно. И клиент может изменить вашу базу данных   -  person Panagiotis Kanavos    schedule 27.07.2015
comment
@PanagiotisKanavos Извините, я не прошу автоматического процесса. Я ясно, что я должен сделать это по коду. Но я просто хочу узнать, как я могу начать и сделать это с помощью кода. Например, как я могу сравнивать таблицы и поля один за другим, находить и временно сохранять разницу (когда она найдена) ....... После того, как я закончу сравнение, как я могу применить эти изменения к другой базе данных. Но я не знаю, что я должен использовать для кодирования этого. Я кое-что читал о SMO, но мне все еще неясно.   -  person alex    schedule 27.07.2015
comment
приложения уровня данных SQL Server вместе с проектами баз данных может быть тем, что вы ищете: пакет, содержащий артефакты базы данных, которые управляют управлением версиями и обнаружением дрейфа. DACPAC, созданные из SSDT, содержат изменения от каждой версии к следующей, но для этого требуется, чтобы все модификации схемы происходили внутри самого проекта базы данных.   -  person Panagiotis Kanavos    schedule 27.07.2015
comment
На самом деле, есть проект с открытым исходным кодом, который может это сделать, но проблема заключается в том, как преобразовать в библиотеку, которую можно использовать внутри другого проекта.opendbiff.codeplex.com/SourceControl/latest   -  person alex    schedule 27.07.2015


Ответы (1)


Вы пытаетесь написать программу для этого?

Если не самым простым способом, было бы восстановить базы данных на SQL Server, а затем использовать Visual Studio 2012, в котором есть схема SQL и сравнение данных SQL, или альтернативное программное обеспечение.

Вероятно, здесь не место для такого типа вопросов.

person Ryan Thomas    schedule 27.07.2015
comment
Вы прочитали мой вопрос? Мне нужно сделать это внутри моей программы vb.net. - person alex; 27.07.2015