SQL понижение базы данных Server 2017 до SQL Server 2014 (цель находится на виртуальной машине) - PullRequest
0 голосов
/ 01 апреля 2020

Я пытался перенести действительно большую базу данных на более ранний сервер SQL несколькими способами, я начал делать файл .bak, но обнаружил, что он несовместим и должен быть таким же SQL Версия сервера.

Затем я выбрал задачу - сгенерировать сценарий, чтобы создать файл .sql со всей схемой и данными, но он был размером 24 ГБ! Несмотря на то, что файл был действительно большим с помощью sqlcmd, мне удалось его выполнить. Но он так и не завершился успешно, он выдал несколько типов ошибок, таких как:

Сообщение 156, Уровень 15, Состояние 1:
Неверный синтаксис рядом с ключевым словом '...'

Сообщение 105, Уровень 15, Состояние 1
Незакрытая кавычка после строки символов

Затем я нашел этот комментарий с двумя решениями { ссылка }, я пытался первый, но все еще выбрасывает вторую ошибку, я попробовал второй, и это сработало! теперь все работало нормально, но потом я получил другую ошибку ...

Эта ошибка:

Sqlcmd: ошибка: внутренняя ошибка в ReadText (причина: была предпринята попытка перемещения указатель файла перед началом файла).

Так что теперь проблема связана с командой sqlcmd ??

Должен ли я продолжать пытаться перенести базу данных с помощью сгенерированного скрипта? Есть ли лучший способ сделать это и сделать его совместимым с более ранней SQL версией сервера?

Что нужно уточнить

Сначала я создал скрипт только с информацией о схеме , но когда я попытался сгенерировать отдельный скрипт для данных, только SSMS выдавала ошибку. Таким образом, я не могу или не знаю, как экспортировать все данные простым способом. Я знаю, что вы можете экспортировать данные для каждой из таблиц, но база данных содержит более 200 таблиц, и это нежизнеспособно.

Кроме того, выполнение сценария занимает более одного часа, а может, и намного больше, чем это время, если процесс завершился бы правильно sh.

1 Ответ

0 голосов
/ 01 апреля 2020

Наконец, после попытки с файлом bacpa c, который также не позволил мне создать из-за кучи ошибок windows пользователей, ссылок на внешние объекты и многого другого ...

Лучший ответ для решения этой проблемы - создание файла .dacpa c. В файле dacpa c из SSMS 2012 до последних версий теперь можно включать данные всех ваших таблиц.

А для решения проблемы несовместимости вы можете использовать свойство AllowIncompatiblePlatform, чтобы разрешить развертывание в разных версиях. SQL Сервер при публикации на целевом сервере.

, поэтому сначала вам нужно извлечь файл SqlPackage.exe из папки bin сервера sql, в моем случае это папка: C: \ Program Files (x86) \ Microsoft SQL Сервер \ 130 \ DAC \ bin

, затем выполните команду с действием Извлечь:

SqlPackage /Action:Extract /SourceDatabaseName:"<database-name>" /SourceServerName:"<server-name>" /SourceUser:"sa" /SourcePassword:"<password>" /TargetFile:"<dacpac-file-path>" /p:ExtractAllTableData=True

Затем на другом сервере запустите эта команда в правильной папке bin программы SqlPackage.exe:

SqlPackage  /Action:Publish /SourceFile:" <dacpac file path>\filename.dacpac" /TargetDatabaseName:"<database name>" /TargetServerName:"<ServerName>" /TargetUser:"<username>" /TargetPassword:"<password>(if needed)" /p:AllowIncompatiblePlatform=true /p:CreateNewDatabase=true

И если вы хотите создать базу данных из scrath.

/p:CreateNewDatabase=true

Я надеюсь, что это поможет любому с этой проблемой с большими базами данных и импортом с более крупной sql версии сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...