Есть ли способ найти различия в двух базах данных SQL Server (только схема). Один из них локальный, а второй на сайте клиента. У нас возникают проблемы с кристальными отчетами, в которых запущены некоторые отчеты, а часть кода не выполняется, и может показаться, что схемы не совпадают.
Можно ли выполнить одну и ту же команду в обеих базах данных и сравнить результаты, чтобы определить различия?
sql-server
sql-server-2008-r2
schema
user1571430
источник
источник
Ответы:
Если вы не можете использовать один из множества инструментов из-за проблем с подключением и хотите выполнить «автономное» сравнение, вы можете использовать SSMS для генерации сценариев для всех объектов базы данных, щелкнув правой кнопкой мыши базу данных и используя «Задачи ... / Создать» Scripts ", и убедитесь, что вы выбрали создание одного файла для каждого объекта.
Когда вы сделаете это для обеих баз данных, перенесите два набора сценариев на локальный компьютер в две отдельные папки и используйте WinMerge (или аналогичный) для сравнения двух.
источник
Другой вариант - использовать инструменты данных SQL Server (SSDT), расширение Visual Studio. Вы можете извлечь схему базы данных в виде файла .dacpac и сравнить ее с другим файлом .dacpac или существующей базой данных. SSDT включен в клиентские инструменты SQL Server 2012, что делает его довольно доступным. Вы можете найти полные инструкции о том, как выполнить сравнение на сайте MSDN .
источник
После простого способа выполнить ту же задачу - посмотреть, что изменилось между двумя моделями, я написал следующий SQL-скрипт, который сравнивает две схемы для определения новых и удаленных столбцов.
источник
Если вам нужно сравнить несколько файлов базы данных, вы можете написать скрипт
SQLPackage.exe
.У меня нет рабочего кода для вас, но вы можете найти документацию по SQLPackage.exe для вдохновения.
Вы должны извлечь вашу основную базу данных в файл dacpac, а затем сравнить файл dacpac с остальными базами данных. Результатом сравнения может быть отчет об изменениях в формате xml или файл .sql, который можно запустить для синхронизации баз данных.
Что-то вроде этого:
а потом
Вы можете взглянуть на эту статью или эту для примера кода.
источник
Выполните поиск «Сравнение SQL Server», и вы найдете множество инструментов. На моей работе мы используем Red Gate SQLCompare . Он имеет 14-дневную пробную версию. Но поскольку вы говорите о двух разных средах, я не думаю, что это сработает для вас, если только клиент не отправит вам резервную копию своей БД. Другой вариант - писать запросы к системным таблицам (таким как sys.indexes, sys.tables и т. Д.).
источник
Самый простой способ - использовать автоматизированный инструмент, созданный для этой цели , но если у вас нет доступа к нему, вы можете получить всю необходимую базовую информацию из
INFORMATION_SCHEMA
представлений.Использование метаданных в
INFORMATION_SCHEMA
, вероятно, является более простым вариантом, чем генерация сценариев DDL и сравнение источников, потому что у вас гораздо больше контроля над представлением данных. Вы не можете реально контролировать порядок, в котором сгенерированные скрипты будут представлять объекты в базе данных. Кроме того, сценарии содержат набор текста, который по умолчанию может зависеть от реализации и может вызывать много "несоответствующих" шумов, когда вам, вероятно, действительно необходимо сосредоточиться на отсутствующей таблице, представлении или столбце или, возможно, типе данных столбца. или несоответствие размера.Напишите запрос (или запросы), чтобы получить информацию, имеющую значение для вашего кода, из
INFORMATION_SCHEMA
представлений и запустить ее на каждом SQL Server из SSMS. Затем вы можете либо выгрузить результаты в файл и использовать инструмент сравнения текстовых файлов (даже MS Word), либо вы можете вывести результаты в таблицы и выполнить запросы SQL, чтобы найти несоответствия.источник
Я включил этот ответ ради нового вопроса, который был отмечен как дубликат.
Мне когда-то приходилось сравнивать две производственные базы данных и находить какие-либо различия между ними. Единственными интересующими элементами были таблицы, которые были добавлены или удалены, и столбцы, которые были добавлены, удалены или изменены. У меня больше нет сценариев SQL, которые я разработал, но ниже приводится общая стратегия. И база данных не была SQL Server, но я думаю, что применяется та же стратегия.
Сначала я создал то, что лучше всего описать как базу метаданных. Пользовательские таблицы этой базы данных содержали описания данных, скопированные из системных таблиц производственных баз данных. Такие вещи, как имя таблицы, имя столбца, тип данных и точность. Был еще один элемент, имя базы данных, которого не было ни в одной из рабочих баз данных.
Затем я разработал сценарии, которые связывают выборки из системных таблиц производственных баз данных со вставками в пользовательские таблицы базы метаданных.
Наконец, я разработал запросы для поиска таблиц, которые существуют в одной базе данных, но не в другой, и столбцов из таблиц в обеих базах данных, которые были только в одной базе данных, и столбцов с противоречивыми определениями между двумя базами данных.
Из примерно 100 таблиц и 600 столбцов я обнаружил несколько несоответствий и один столбец, который был определен как плавающая точка в одной базе данных и целое число в другой. Этот последний оказался находкой, потому что он обнаружил проблему, которая преследовала одну из баз данных в течение многих лет.
Модель для базы метаданных была предложена системными таблицами. Запросы составить несложно, они вращаются в основном вокруг группы и имеют количество (имя базы данных) = 1.
В вашем случае, с 700 производственными базами данных, вы можете захотеть автоматизировать первые два шага больше, чем я, просто сравнив две базы данных. Но идея похожа.
источник
У меня был точно такой же вопрос, и я считаю, что Microsoft SQL Server Management Studio (SSMS) имеет гораздо более простое / простое решение, чем все, что я видел здесь. У меня есть производственный сайт с MS SQL Server Express, и скоро я буду еще на нескольких, где мне не нужно устанавливать VisualStudio или другие приложения, кроме SSMS.
В рамках SSMS щелкните правой кнопкой мыши базу данных, чтобы получить схему для. Выберите Задачи> Создать сценарии ..., чтобы открыть мастер для создания сценария схемы и конфигурации для всей базы данных (или выбранных объектов, если хотите). Я сохранил все параметры по умолчанию, кроме пути / имени файла, но у инструмента есть множество параметров. Мастер создал один SQL, который я скопировал через OneDrive обратно на мой компьютер. Затем я использовал Notepad ++ для сравнения SQL с файлом, сгенерированным таким же образом, с моей базой данных SIT. Вы должны отфильтровать совпадения по дате / времени в комментариях, но в остальном это отличное сравнение двух баз данных.
Presto! Записать это было значительно сложнее, чем сделать реальное сравнение.
источник
AdeptSqlDiff - отличный инструмент, который я использую (хотя некоторое время не обновлялся, пока работает)
Обе схемы сравнивает, а также сравнения данных. Так же, как и у RedGate, есть и стоимость, и 30-дневная пробная версия. И цена довольно разумная.
источник
Возможно, вам поможет этот бесплатный скрипт https://github.com/dlevsha/compalex . Это поддерживает Microsoft SQL Server.
Вы можете попробовать демо здесь
http://demo.compalex.net/
источник
Существует множество сторонних инструментов, которые будут выполнять сравнение схем и данных, а также синхронизацию. Моя команда и разработчики разработали два инструмента: xSQL Schema Compare для сравнения схем и xSQL Data Compare для сравнения данных между объектами с одной и той же схемой. Надеюсь это поможет!
Отказ от ответственности: я связан с xSQL
источник
На рынке есть много инструментов, которые вы можете использовать для выполнения работы. Моя компания использует ApexSQL Diff как для сравнения, так и для синхронизации, потому что она бесплатна для Azure, но вы не ошибетесь с инструментами Devart или Redgate.
источник
Я фанат SQL DBDiff , который является инструментом с открытым исходным кодом, который можно использовать для сравнения таблиц, представлений, функций, пользователей и т. Д. Двух экземпляров баз данных SQL Server и создания сценария изменений между исходной и целевой базами данных.
источник
Я создал утилиту MssqlMerge, которая позволяет сравнивать базы данных MSSQL, как по структуре, так и по данным. Доступна бесплатная версия, которая позволяет сравнивать определения таблиц, представления, хранимые процедуры и функции. Кроме того, есть версия Pro, которая поддерживает больше типов объектов и имеет функцию «Запрос результатов сравнения», где вы можете запускать и сравнивать любые результаты запросов, в том числе запросы с системными представлениями, для сравнения некоторых других деталей, недоступных сразу после установки.
источник
Проверь это:
источник
Я использую этот бесплатный (и с открытым исходным кодом) инструмент: OpenDBDiff
источник
DBDiff - лучший инструмент для этого, вы можете найти его здесь .
источник