Как выполнить 3 ГБ файл SQL (Microsoft SQL Server)? - PullRequest
5 голосов
/ 04 июня 2009

У меня большой файл SQL, который не помещается в память и должен выполняться на Microsoft SQL Server 2008. Кажется, что инструмент sqlcmd.exe всегда сначала загружает его в память, что в данном случае невозможно. Есть идеи?

К сожалению, я не могу разделить скрипт, потому что он сгенерирован отличным SQL Data Compare. Весь сценарий - одна большая транзакция, и я хочу оставить это так. Я никогда не думал, что наличие гигантского сценария необычно, потому что наличие большого количества данных является распространенным явлением в мире баз данных. Сценарий размером 3 ГБ.

Ответы [ 8 ]

3 голосов
/ 04 июня 2009

В RedGate SQL Compare есть опция для непосредственного выполнения операторов вместо генерации сценария SQL и его последующего выполнения. Есть ли причина, по которой это не сработает - другими словами, есть ли причина, по которой вам требуется сценарий SQL и вы не можете использовать функцию приложения «синхронизировать сейчас»?

1 голос
/ 06 июля 2009

Я столкнулся с этой проблемой несколько месяцев назад. Я генерирую скрипты синхронизации с SQLDataCompare на еженедельной и ежемесячной основе для нескольких наших баз данных каталога, и они обычно превышают 500 МБ. Моим решением было написание VBscript, который разбивает скрипт обновления на 50-1000 командных пакетов. Проблема с этим подходом заключается в потере возможности откатывать все изменения, если что-то ломается на полпути в обновлении вашей базы данных.

1 голос
/ 04 июня 2009

У меня была эта проблема раньше, когда в скрипте была огромная строка XML, которая использовалась с OpenXML. Фактический SQL был довольно минимальным, обновляя некоторые значения в таблице.

Я закончил тем, что вставил данные (порциями) во временную таблицу, пока вся информация, которая была в XML, не была сохранена. Затем я запустил свое заявление об обновлении.

Добавлено позже после публикации дополнительных данных:

Возможно, вы захотите выбрать большие куски в инструменте и сделать так, чтобы при сравнении данных SQL генерировались сценарии в кусках. Таким образом, вы получаете транзакции. Вы можете выбрать большие секции, просто выделив диапазон и нажав пробел.

1 голос
/ 04 июня 2009

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

Это одноразовое упражнение или регулярное мероприятие?

1 голос
/ 04 июня 2009

Что / кто создал SQL-скрипт? Получите любой созданный файл, чтобы разбить скрипт на логические порции, с помощью транзакции или оператора (в зависимости от структуры файла) Если источник не может этого сделать, создайте сценарий, чтобы логически разбить файл на части.

0 голосов
/ 10 марта 2014

Насколько я понимаю, SSMS 32-битная, поэтому она не может загрузить скрипт размером более 1,5-2 ГБ. Вы можете запустить скрипт в SQLCMD.exe, но тогда у вас могут возникнуть проблемы из-за размера транзакции - SqlCmd сохранит всю транзакцию в памяти. Поэтому в SQL Data Compare вы можете перейти к параметрам и использовать «разделенные транзакции», которые могут помочь.

SQL Data Compare также выполнит частичное обновление BLOB-объектов, что решит проблему «огромных BLOB-объектов».

Это, конечно, если основано на последней версии Data Compare. Некоторые версии могут не иметь этих функций.

Другим вариантом может быть использование SQL Compare для создания сценария схемы в папке, а затем использование SDC для синхронизации данных в этой папке. Тогда у вас есть файл для каждой таблицы, а не один массивный файл.

Надеюсь, это поможет.

0 голосов
/ 07 марта 2014

USE sqlcmd команда

Пример sqlcmd -S myServer \ instanceName -i C: \ myScript.sql

0 голосов
/ 04 июня 2009

1-800-RedGate-поддержка .....

или

  • разбить скрипт транзакции на более мелкие файлы
  • установить базу данных в однопользовательском режиме
  • полное резервное копирование базы данных
  • запустить каждый меньший файл скрипта; в случае сбоя: восстановите резервную копию, исправьте скрипт, попробуйте еще раз
  • выход из однопользовательского режима, все сделано
...