Невозможно запустить файл .sql в SQL Server

У меня есть файл дампа .sql размером 20 ГБ, и я пытаюсь запустить его на рабочей среде Mysql с помощью сценария запуска, а после успешного выполнения с помощью SSMA я перенесу данные из рабочей среды Mysql на SQL Server. Я много раз успешно переносил данные таким образом, однако для файла размером 20 ГБ это кажется очень трудоемким. Пожалуйста, дайте мне знать, если есть альтернативный способ быстро добиться этого. Я перешел по следующей ссылке:

Шаги по переносу таблиц mysql на сервер sql с использованием SSMA!

Дампы занимают всегда времени, даже если вы используете их для перемещения данных из одной базы данных MySQL в другую. Это не резервные копии, это скрипты, которые вставляют строки одну за другой. Это самый медленный способ перемещения данных

Panagiotis Kanavos 11.07.2018 12:49

@PanagiotisKanavos Не могли бы вы предложить альтернативный способ?

Wadhawan994 11.07.2018 12:52

Помимо предыдущего комментария, есть существенные различия в синтаксисе между MySQL и SQL Server. Я бы предложил разделить миграцию на импорт структуры и данных.

Dylan Brams 11.07.2018 12:52

Кроме того, вы можете попробовать SSIS для прямого подключения от SQL Server к MySQL.

Dylan Brams 11.07.2018 12:56

@DylanBrams Спасибо за предложение. Не могли бы вы поделиться какой-нибудь ссылкой или ресурсом, чтобы добиться этого с помощью SSIS, и это платная услуга?

Wadhawan994 11.07.2018 13:09
docs.microsoft.com/en-us/sql/integration-services/… - SSIS - это инструмент импорта / экспорта / преобразования данных, встроенный в SQL Server.
Dylan Brams 11.07.2018 13:10

Быстрые способы требуют работы. Вы можете использовать дамп данных без для создания новой базы данных, а затем перенести данные из одной базы данных в другую. Один из вариантов - массовый экспорт данных таблица за таблицей с помощью, например, mysqldbexport и их импорт с помощью bcp. Для этого вам нужно будет найти формат, который подходит для обоих продуктов. Вы также можете использовать SSIS для чтения данных в виде плоского файла, если bcp не может обрабатывать формат, созданный mysqldbexport. Плюсы: можно делать поэтапно - экспорт из MyQL импорт в SQL Server. Минусы: текст - не лучший формат передачи данных, например, для чисел с плавающей запятой.

Panagiotis Kanavos 11.07.2018 13:30

Другой вариант передачи данных - использовать потоки данных SSIS, по одному на таблицу, для чтения данных из MySQL и вставки их в таблицы SQL Server с помощью операций пожарного шланга. Плюсы: избегаете проблем с конвертацией, можете трансформировать данные «на лету». Минусы: источник и цель должны быть доступны.

Panagiotis Kanavos 11.07.2018 13:33

В обоих случаях вам придется удалить или отключить все ограничения в целевой базе данных и снова включить их после завершения загрузки.

Panagiotis Kanavos 11.07.2018 13:34

Этот процесс можно автоматизировать с помощью мастера импорта данных в SSMS. Он позволяет вам выбирать несколько исходных таблиц, может создавать сценарии для целевых таблиц, удалять и повторно включать ограничения и т. д. По сути, он создает пакет SSIS, который вы можете изменить самостоятельно, используя автономные инструменты данных SQL Server или Visual Studio.

Panagiotis Kanavos 11.07.2018 13:38

Вариант: установить MySQL «локально» из дампа, затем передать данные. Восстановление дампа по-прежнему займет много времени, но не повлияет на рабочие серверы.

Panagiotis Kanavos 11.07.2018 13:39

@PanagiotisKanavos Спасибо за предложение. Я дам вам знать, если это сработает для меня.

Wadhawan994 11.07.2018 13:40

Я отвечаю на ошибку, которую OP опубликовал в ht-ответе, как если бы я удалил этот ответ, отслеживаемость будет потеряна: "Сообщение 156, уровень 15, состояние 1, строка 11 Неправильный синтаксис рядом с ключевым словом 'IF'. Сообщение 102, уровень 15, состояние 1, строка 11 Неправильный синтаксис рядом с '' '." Проблема здесь - обратная ссылка (`). Я не пользователь MySQL, но (если я правильно помню) обратная кавычка используется MySQL как цитата объекта. В SQL-сервере вы должны использовать SELECT * FROM [Table];, MySQL использует SELECT * FROM `Table`;. Поэтому я предполагаю, что в вашем сценарии есть обратные кавычки (`) вместо скобок ([]), которые необходимо исправить.

Larnu 11.07.2018 15:54
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
13
470
1

Ответы 1

Из вашего Заголовка "невозможно запустить файл .sql в SSMS" и "У меня есть файл дампа .sql 20 ГБ" вы пытаетесь открыть 20 ГБ .sql в SSMS? Это никогда не сработает. SSMS - это 32-битное приложение, поэтому максимальная адресуемая память составляет 2 ГБ. Если вы хотите запустить файл .sql, я предлагаю использовать sqlcmd.

Откройте Powershell, а затем выполните приведенную ниже команду, заменив соответствующие части:

sqlcmd -S {Server Name/ServerIP} -U {Your Login} -i {Your full path to your script}

Вам будет предложено ввести пароль, после чего файл будет запущен. Итак, в качестве примера вы можете запустить:

sqlcmd -S svSQL2017 -U Larnu -i \\svFileServer\SQLShare\Scripts\BigBatchFile.sql

Если вы используете встроенную безопасность, не передавайте параметр -U для команды.

Обновлено: этот ответ не имеет отношения к вопросу OP, поскольку они использовали «SSMS» в качестве синонима для SQL Server, а это не так. Я оставил это здесь на данный момент, чтобы OP мог просмотреть мои комментарии, и я, вероятно, удалю этот ответ позже.

Спасибо за бесполезный ответ. Кроме того, я постарался, чтобы заголовок был конкретным, и большинство людей было бы заинтересовано в его разрешении. Я записал подробное содержание в теле, и я считаю, что это имеет смысл.

Wadhawan994 11.07.2018 13:13

@ Wadhawan994 что в нем не помогло? Судя по тому, что у вас есть, это могло бы показаться актуальным. Вы никогда не сможете открыть файл размером 20 ГБ в SSMS. Как я уже сказал выше, это 32-битное приложение; это было бы то же самое, что попытаться открыть файл csv размером 20 ГБ в 32-битной версии Excel; файлы слишком велики для любого приложения. Следовательно, почему вам нужно использовать sqlcmd.

Larnu 11.07.2018 13:15

Сэр, я знаю, что это большой файл для запуска непосредственно в SSMS, и я почти уверен, что использую 64-битную версию. Просто для справки я делюсь набором результатов: Microsoft SQL Server 2017 (RTM) - 14.0.1000.169 (X64) 22 августа 2017 г. 17:04:49 Copyright (C) 2017 Microsoft Corporation Developer Edition (64-разрядная версия) для Windows 10 Pro 10.0 <X64> (сборка 17134 :). Также я пытался работать с cmd в Powershell, и это не сработало, что не помогло :).

Wadhawan994 11.07.2018 13:47

@ Wadhawan994 SSMS и SQL Server - это не одно и то же. Вот в чем путаница. SSMS - это SQL Server Management Studio и приложение для взаимодействия с SQL Server. Так же, как Internet Explorer - это не «Интернет», это инструмент для взаимодействия с ним. SSMS доступен только как 32-битное приложение, тогда как SQL Server (Data Engine) доступен в 32-битной и 64-битной версиях (кроме версии 2017, которая является только 64-битной). Если вы имеете в виду SQL Server, убедитесь, что вы упомянули именно это. Указание SSMS, когда вы имеете в виду, что механизм данных сбивает с толку, и будет означать, что вы получите ответы, основанные на неверной информации.

Larnu 11.07.2018 13:58

Спасибо за предоставленную информацию. Я знал, что SSMS - это студия управления сервером Sql: P и SQL-сервер и SSMS - это разные вещи. Я не знал, что SSMS - 32-битный, а SQL Server (Data Enigne) - 64-битный. Однако не будем вести дискуссию в другом направлении. При выполнении команды я получил сообщение об ошибке Msg 156, Level 15, State 1, Line 11 Неправильный синтаксис рядом с ключевым словом IF. Сообщение 102, уровень 15, состояние 1, строка 11 Неправильный синтаксис рядом с '' '.

Wadhawan994 11.07.2018 14:28

Надеюсь, вы правильно поняли мой вопрос. Если хочешь, я могу проинформировать тебя.

Wadhawan994 11.07.2018 14:30

Другие вопросы по теме