- PVSM.RU - https://www.pvsm.ru -
Как-то раз для воспроизведения бага мне потребовался бэкап production-базы.
К моему удивлению я столкнулся со следующими ограничениями:
Учитывая вышеизложенное, я пришел к выводу, что настало время костылей нестандартных решений.
Я решил использовать виртуальную машину Oracle VM VirtualBox [1] с Windows 10 (можно взять тестовый образ для браузера Edge отсюда [2]). На виртуальную машину был установлен SQL Server 2016 и на нем из бэкапа была восстановлена база данных приложения (инструкция [3]).
Далее было необходимо предпринять некоторые шаги, чтобы появилась возможность доступа к SQL Server извне:
Собственно сам перенос данных состоит из двух этапов:
Выполняем следующие операции:
После сохранения скрипта его можно выполнить на исходном SQL Server (старой версии), чтобы создать требуемую базу.
Внимание: после выполнения скрипта необходимо проверить соответствие настроек базы из бэкапа и базы, созданной скриптом. В моем случае в скрипте отсутствовала настройка для COLLATE, что приводило к сбою при переносе данных и танцам с бубном пересозданию базы с помощью дополненного скрипта.
Перед переносом данных необходимо отключить проверку всех ограничений на базе:
EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'
Перенос данных осуществляем с помощью мастера импорта данных Tasks -> Import Data на SQL Server, где находится созданная скриптом база:
EXEC sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'
Если возникли какие-либо ошибки, проверяем настройки, удаляем созданную с ошибками базу, заново создаем ее из скрипта, вносим исправления и повторяем перенос данных.
Данная задача встречается довольно редко и возникает только из-за вышеуказанных ограничений. Чаще всего решение заключается в обновлении SQL Server или подключению к удаленному серверу, если это позволяет архитектура приложения. Однако от легаси-кода и кривых рук некачественной разработки никто не застрахован. Надеюсь, что Вам эта инструкция не понадобится, а если все же в ней возникнет необходимость, то поможет сэкономить кучу времени и нервов. Спасибо за внимание!
Автор: fadeinmad
Источник [9]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/backup/320728
Ссылки в тексте:
[1] Oracle VM VirtualBox: https://www.virtualbox.org/
[2] отсюда: https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/
[3] инструкция: https://docs.microsoft.com/ru-ru/sql/relational-databases/backup-restore/restore-a-database-backup-using-ssms
[4] How do I deal with FK constraints when importing data using DTS Import/Export Wizard?: https://dba.stackexchange.com/questions/43065/how-do-i-deal-with-fk-constraints-when-importing-data-using-dts-import-export-wi
[5] The column «Column 2» cannot be processed because more than one code page (65001 and 1252) are specified for it.: https://www.sqlservercentral.com/forums/topic/the-column-column-2-cannot-be-processed-because-more-than-one-code-page-65001-and-1252-are-specified-for-it
[6] How can I connect to SQLServer running on VirtualBox from my host Macbook.: https://stackoverflow.com/questions/37616521/how-can-i-connect-to-sqlserver-running-on-virtualbox-from-my-host-macbook
[7] SQL SERVER – Enable Identity Insert – Import Expert Wizard: https://blog.sqlauthority.com/2010/04/04/sql-server-enable-identity-insert-import-expert-wizard/
[8] Troubleshooting Microsoft SQL Server Error 18456, Login failed for user: https://www.liquidweb.com/kb/troubleshooting-microsoft-sql-server-error-18456-login-failed-user/
[9] Источник: https://habr.com/ru/post/455934/?utm_campaign=455934&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.