У меня возникла проблема с базой данных SQL Server после обновления какого-то ужасного программного обеспечения. Программное обеспечение «обновило» (на самом деле, откатило) кучу зашифрованных хранимых процедур и пользовательских функций в базе данных, что теперь вызывает ошибки в другом программном обеспечении.
К счастью, я сделал резервную копию непосредственно перед обновлением, однако ошибка не была замечена примерно через час, что означает, что записи были обновлены / вставлены / удалены и т. д. С момента создания резервной копии.
Первоначально моя идея заключалась в том, чтобы просто скопировать хранимые процедуры и функции в новую базу данных, созданную из резервной копии, а затем сделать резервную копию и восстановить эту базу данных в сломанной базе данных, но поскольку они зашифрованы, я не могу их скопировать.
Поэтому следующей идеей было перенести таблицы из поврежденной базы данных в восстановленную и действовать, как указано выше. Однако я столкнулся с несколькими проблемами с существующими таблицами, такими как столбец DBTimeStamp, не позволяющий копировать. Однако копирование таблиц в новую чистую базу данных работает нормально.
Итак, вот вопросы:
Как лучше всего объединить таблицы из резервной копии с таблицами из неработающей базы данных?
Может ли простое усечение или удаление существующих таблиц в резервной копии избежать этих ошибок проверки? Я получаю сообщения об ошибках, такие как «VS_ISBROKEN» и т. д., Когда пытаюсь использовать функцию экспорта данных для передачи данных, с удалением существующего набора данных и включением Identity_Insert и т. д. (Усечение)
Я еще не пробовал удалить все таблицы из резервной копии и продолжить работу оттуда. Если я подойду к проблеме таким образом, не повлияет ли это на метаданные?
Я чувствую, что это должно быть довольно просто, и если бы поставщик не заблокировал все функции и хранимые процедуры, мне не нужно было бы копировать таблицы таким образом.
Спасибо за прочтение :)
@AaronBertrand Я рассмотрел пару (ApexSQL и LiteSpeed), но мне действительно не хотелось устанавливать пробное программное обеспечение на сервер только для этой единственной задачи. Должен быть способ просто написать это с помощью собственного SQL, моей следующей попыткой будет просто использовать «SELECT * FROM INTO» для каждой таблицы, но это требует времени для выполнения для каждой отдельной таблицы.
Вам не нужно устанавливать его на сервер, просто на любую рабочую станцию или даже виртуальную машину, которая может подключаться к обеим базам данных. Вы, конечно, можете создать сценарий для каждой таблицы и провести сравнение самостоятельно, но для этого нет волшебной кнопки, и это действительно утомительная работа. Вот почему поставщики создают инструменты именно для того, чтобы упростить работу и чтобы вы могли избежать всех ошибок и нюансов типов данных, которые они преодолели с течением времени. См. thebertrandfamily.com/2012/04/20/…
@AaronBertrand Если бы я мог +1, спасибо :)


На рынке есть несколько инструментов для сравнения данных, вам стоит их попробовать.