У меня есть несколько клиентов с SQL Server 2008, и это то, что у меня есть здесь, на моем сервере. Я использую файлы резервных копий для отправки баз данных между клиентами и в моем офисе.
Я читал, что при создании резервной копии из SQL Server 2012 невозможно восстановить ее на экземпляр 2008 года. Я предполагал, что уровень совместимости решит эту проблему, но это не так. Поэтому я в растерянности относительно того, как обновить. Кроме обновления всех моих клиентов сразу, что невозможно, я не могу придумать чистого способа сделать это.
У меня есть необходимость отправить базу данных клиенту, а также получить базу данных от клиента. Это мое первое обновление версии на SQL Server, поэтому я новичок в этой проблеме. Есть идеи, как поступить?
sql-server
Джефф Сток
источник
источник
Ответы:
Здесь есть две вещи: номер версии файла и уровень совместимости. Когда вы присоединяете базу данных к более новой основной версии (например, с 2008 по 2008R2 или с 2008R2 по 2012), версия базы данных постоянно изменяется, и вы не можете снова присоединить эту базу данных к более старой версии.
Уровень совместимости предназначен для анализа устаревшего T-SQL, который использовался в более старых версиях SQL Server. Это не меняет способ хранения данных на диске.
Чтобы передать базу данных кому-то в более старой версии SQL Server, вам нужно будет экспортировать данные и импортировать их в другую базу данных. Для этого полезны такие инструменты, как Сравнение данных Red Gate.
источник
bcp
.Параметр уровня совместимости используется SQL Server для определения способа обработки определенных новых функций. Таким образом, БД может быть перенесена на более новую версию SQL без проблем с приложением. Уровень совместимости можно менять взад и вперед.
К сожалению, файлы резервных копий не имеют обратной совместимости. Одним из методов будет использование импорта / экспорта для перемещения ваших данных из вашей текущей БД в ваш экземпляр более старой версии.
источник
Для миграции SQL используйте мастер миграции базы данных SQL с открытым исходным кодом.
У меня была база данных 5 ГБ с парой ~ 10 миллионов записей, и я попробовал маршрут через Generate Script, а затем запустил его с помощью sqlcmd.exe. Прежде всего, сгенерированный скрипт не всегда работал правильно. Во-вторых, sqlcmd.exe также может не работать с большими файлами, жалуясь на доступную память. osql.exe работает, но требует времени (и имеет те же аргументы командной строки).
Затем я наткнулся на замечательный инструмент для миграции SQL Server на базы данных SQL Azure. Это работает и для SQL Server в SQL Server, например, если вы хотите перенести базу данных SQL 2012 в 2008 R2. Он использует bcp.exe, который использует массовое копирование. Доступна версия с графическим интерфейсом и командной строкой (Batch) с открытым исходным кодом. См. Http://sqlazuremw.codeplex.com/ . В моем случае операция заняла 16 минут.
На расширенном экране вы можете выбрать, что ваша цель - SQL Server, а не SQL Azure.
источник
Я обнаружил, что BCP более эффективен, чем некоторые инструменты для переноса данных в более раннюю версию SQL Server и для извлечения данных из RDS. (Спасибо @ivan_posdeev.)
Сначала я создаю схему, щелкая правой кнопкой мыши базу данных в SQL Server Management Studio, Задачи, Генерация сценариев. Отметьте все объекты, в расширенных объектах убедитесь, что все, что вам нужно, будет написано в сценарии (статистика, индексы и т. Д.), Снимите флажок «ИСПОЛЬЗОВАТЬ базу данных», если ваша база данных назначения имеет другое имя, установите совместимость с вашей версией базы данных назначения и сгенерируйте файл, который создает вашу схему. Создание базы данных по месту назначения и запустить этот файл на него ( с помощью
osql
,sqlcmd
или GUI).Чтобы переместить данные, дважды выполните следующий запрос в исходной базе данных, сначала закомментировав второй столбец, чтобы сгенерировать пакетный файл для извлечения данных, а затем закомментировав первый столбец, чтобы сгенерировать пакетный файл импорта, который будет выполняться в месте назначения. (Вы должны добавить свои исходные и целевые сервера, имена экземпляров, выходные и входные каталоги файлов, имена пользователей и пароли. Для использования интегрированной безопасности замены
-U
и-P
вариант с только-T
.)Это поддерживает Unicode, если вам это не нужно, измените
-N
переключатель в обоих операторах на-n
.После запуска проверьте файлы с именем schema.tablename.ERRORS.dat - будет включать в себя все строки, которые не удалось, пустые, если ни один не сделал.
Ссылка MSDN для BCP здесь , более дружественный обзор вариантов BCP здесь .
Я обнаружил, что это значительно превосходит создание скриптов и любых инструментов, которые я пробовал. Он также работает на базах данных RDS (которые не разрешают резервное копирование). Сгенерированные файлы данных имеют размер скриптов SQL на 30%, их запуск занимает меньше времени и является гораздо более надежным. (Сценарии, сгенерированные SQL Server для данных сценариев, всегда срабатывали, иногда предсказуемо, иногда нет, сгенерированный SQL не был совместим с 2008R2 (например, использовался
nvarchar(0)
, часто не завершался без видимой причины и т. Д. BCP также копирует любые нарушения ограничений) , такие как ссылочная целостность.).источник