Как открыть огромный файл .sql
Я использую sql server 2012, где мне нужно запустить сценарий инструкции вставки. Но размер файла — 2,7 гб. когда я собираюсь открыть файл в редакторе sql, он показывает мне ошибку SystemOutOfMemory. Блокнот также не может открыть никаких предложений, как его открыть.
18 ответов
Редактор SQL может открыть файл размером до 500 МБ без очень хороших спецификаций, похоже, что-то идет не так, если вы хотите вставить данные из одной базы данных в другую, попробуйте использовать мастер импорта / экспорта, пакет SSIS или утилиту командной строки создание сценария таблицы с последующей вставкой — не лучший подход.
У меня возникла такая же проблема при открытии файла SQL размером 3 ГБ. Поэтому я использовал IntelliJ, чтобы открыть файл, и это сработало для меня. Я не предлагаю загружать и устанавливать IntelliJ, чтобы открыть большой файл. Но это будет самое простое решение для большого сообщества разработчиков или пользователей IDE в их повседневной жизни.
EmEditor — лучшее решение для вас.
Я столкнулся с аналогичной ситуацией, когда мне пришлось отредактировать файл .sql размером 3 ГБ. После долгих исследований и нескольких окон «Не отвечает» EmEditor справился со своей задачей.
Пробовал много редакторов, ничего не работало, все вылетало или зависало (на windows).
На время или на короткий срок вы можете использовать пробную версию. Для более длительного / постоянного использования вам нужно будет купить премиум.
Ниже находится ссылка для скачивания.
Сегодня у меня была такая же проблема с мегагигабайтными файлами sql, поэтому я написал утилиту командной строки, чтобы разделить их на более мелкие файлы для обработки.
Исходный код тоже есть (Visual Studio 2015)
Легко открыл для меня файл размером 4 ГБ
Во первых вы что-то делаете не так. Опишите, как и почему вы получили файл размером 2,7 ГБ. Скорее всего есть альтернативное решение вашей проблемы.
Вы можете запустить файл такого размера с помощью утилиты командной строки sqlcmd.exe. Утилита MSDN sqlcmd
Но это будет происходить очень-очень-очень медленно, так как вставка будет одна за другой
Также не вижу смысла открывать такой большой файл в редакторе. Но если хотите — я открыл файл> 3Gb во внутреннем редакторе файлового менеджера FarManager3.0 x64 (моя конфигурация Win7 x64, 8 ГБ оперативной памяти, i7-3770). И это тоже было довольно медленно
Возможно, нам стоит поискать другие варианты передачи данных:
Я открыл файл sql 5.14 ГБ в редакторе IntelliJ IDEA . Загрузка не занимает даже 30 секунд.
Вы всегда можете использовать утилиту командной строки.
Откройте cmd и введите:
Я только что успешно запустил файл размером 7 ГБ с 8 миллионами вставок.
У меня аналогичная проблема с дампом .sql размером 6 ГБ, который мне передал колледж. Все еще не понимаю, как он до этого добрался.
Мне удалось открыть файл через терминал в Linux с помощью vi / vim.
Почему бы вам не попробовать создать виртуальную машину с использованием centos или какой-либо другой разновидности, передать туда файл (через ssh и с помощью filezilla) и открыть его там? Установите серверную версию без графического интерфейса.
Бьюсь об заклад, вы сможете открыть его там. В противном случае раскол было бы на что обратить внимание.
010 Editor может обрабатывать файлы любого размера. Я просто использовал его для редактирования файла размером 3 ГБ, на котором разбились Chrome, TextPad и все остальное.
У меня та же проблема, но я ее решил.
У меня был файл .sql размером 5 ГБ. В этом файле мне пришлось отредактировать из-за синтаксической ошибки. Я пробовал с несколькими редакторами, но ничего не вышло.
Затем после того, как я попробовал с редактором кода Visual Studio . И это работает.
- Поэтому сначала загрузите VSC с https://code.visualstudio.com/download.
- После установки VSC вам необходимо загрузить свой файл. Если размер файла больше исходного размера загружаемого файла.
- Затем после того, как VSC предложит вам увеличить максимальный размер файла в МБ.
- Так что вы должны максимально использовать это, как хотите. (Предлагаю вам. Увеличьте размер файла — в три раза больше, чем хотите).
- Затем вам нужно перезапустить VSC. После этого вы можете открыть свой файл.
- И я надеюсь, что файл откроется.
Sublime Text действительно хорошо работал на Mac. Я много пробовал, PHPstorm работал отлично, но только в режиме чтения. Sublime Text фактически открывает для редактирования полный файл, но для его загрузки требуется некоторое время. Тем не менее, во время загрузки есть индикатор выполнения.
Большие файлы дампа mysql можно открыть с помощью приложения gVim.
Почему бы просто не импортировать файл в SQL Server и не просмотреть его в Enterprise Manager? Вы можете напрямую импортировать его или использовать PowerShell, но последний, вероятно, будет работать в одночасье (это проще для небольших файлов, особенно для их большого количества). Как только он будет там, вы можете с легкостью делать все, что хотите, и размер файла не будет проблемой.
Я считаю, что для кросс-платформенных приложений лучше всего подходит VSCode. Если он заметит, что это большой файл, он автоматически отключит поиск по синтаксису и все полезные функции, но останется, по крайней мере, с базовым поиском и заменой и т. Д. Я регулярно использую это для файлов размером около 1-3 ГБ для WordPress, потому что иногда постоянные ссылки не обновляются при изменении доменных имен для сайтов разработки / тестирования и т. д.
Если у вас установлен Linux или Git Bash в Windows, тогда у вас будет доступ к vim, что я рекомендую для всего 4 ГБ +. Мне пришлось вручную изменить строки в файле MySQL размером 6 ГБ +, и он отлично работает. Вы подумаете, что это не работает, потому что чтение с диска в ОЗУ может занять около минуты, но он это сделает. Вы захотите эффективно рассчитывать количество сохранений, потому что на диск будут записаны полные 6 ГБ, а для навигации также потребуется использование поиска, номеров строк и т. Д., Но это работает.
Использование большого редактора файлов, такого как ultra edit, является простым решением для редактирования, а затем запускать его из CMD с помощью утилиты SQLCMD.
Попробуйте открыть файл в браузере, а затем скопируйте нужные строки в редактор. У меня это сработало.
Как вы импортируете большой MS SQL файл .sql?
Я использую сравнение данных SQL RedGate и создаю файл .sql, поэтому я могу запустить его на своей локальной машине. Но проблема в том, что файл превышает 300 МБ, а это значит, что я не могу копировать и вставлять, потому что буфер обмена не сможет его обработать, и когда я пытаюсь открыть файл в SQL Server Management Studio, я получаю сообщение об ошибке о слишком большом файле.
Есть ли способ запустить большой файл .sql? Файл в основном содержит данные для двух новых таблиц.
9 ответов
В командной строке запустите sqlcmd :
Просто замените <server> на расположение вашего поля SQL и <your file here> на имя вашего script. Не забывайте, что если вы используете экземпляр SQL, синтаксис следующий:
Вот список всех аргументов, которые вы можете передать sqlcmd:
У меня была точно такая же проблема, и я некоторое время боролся, а затем нашел решение, которое должно установить параметр -a в sqlcmd , чтобы изменить размер пакета по умолчанию:
Вы также можете использовать этот инструмент. Это действительно полезно.
- Возьмите командную строку с правами администратора
- Измените каталог, в котором хранится файл .sql
Выполните следующую команду
sqlcmd -S ‘your server name’ -U ‘user name of server’ -P ‘password of server’ -d ‘db name’-i script.sql
Я использую MSSQL Express 2014, и ни один из решений не работал у меня. Все они просто разбили SQL. Поскольку мне нужно было запустить один script со многими простыми инструкциями вставки, которые я использовал, написав небольшое консольное приложение в качестве крайней меры:
Запустите его в командной строке с помощью osql, см. здесь:
Надеюсь, что это поможет вам!
В основном файл содержит данные для двух новых таблиц.
Тогда вам может показаться проще просто DTS (или SSIS, если это SQL Server 2005+), данные перейдут, если оба сервера находятся в одной сети.
Если два сервера не находятся в одной сети, вы можете создать резервную копию исходной базы данных и восстановить ее в новой базе данных на конечном сервере. Затем вы можете использовать DTS/SSIS или даже простой INSERT INTO SELECT , чтобы перенести две таблицы в целевую базу данных.
Ваш вопрос очень похож на этот
Вы можете сохранить файл / script в формате .txt или .sql и запустить его из Sql Server Management Studio (я думаю, что меню Open/Query, а затем просто запустите запрос в интерфейсе SSMS). Вам нужно обновить первую строку, указав базу данных, которая будет создана или выбрана на вашем локальном компьютере.
Если вам приходится часто делать эту передачу данных, вы можете перейти к репликации. В зависимости от ваших потребностей репликация моментальных снимков может быть в порядке. Если вам нужно синхронизировать данные между двумя серверами, вы можете пойти на более сложную модель, такую как репликация слиянием.
EDIT: я не заметил, что у вас возникли проблемы с SSMS, связанными с размером файла. Затем вы можете перейти к командной строке, как это было предложено другими, репликации моментальных снимков (опубликовать на своем основном сервере, подписаться на ваш локальный, реплицировать, затем отказаться от подписки) или даже выполнить резервное копирование/восстановление
Как открыть и работать с очень большим файлом .SQL, созданным в дампе?
Пожалуйста, есть ли более эффективный способ сделать это? Может быть, разделить файл .SQL?
Я думаю, это тоже может помочь: dba.stackexchange.com/questions/219954/very-large-mysql-backup
Давайте вернемся на шаг назад. Вопрос действительно о загрузке .sql или о клонировании базы данных? Существуют способы клонирования, которые не требуют медленного шага, о котором вы спрашиваете, и могут быть быстрее.
Можно ли избежать этого с помощью mysqldump? Гораздо лучше сделать снимок другого типа.
Если вы говорите об открытии файла в редакторе, чтобы затем разделить его вручную, вам может понадобиться что-то вроде ЭмПравить.
Это сервер, который уже отключен, поэтому я поторопился с дампом @Evert.
Это сервер, который уже был отключен, поэтому я поспешил с дампом. Теперь мне нужно использовать этот файл .SQL для воссоздания базы данных на другом компьютере @RickJames
Под «прекращением» я предполагаю, что у вас нет доступа к серверу; следовательно, все, что у вас есть, это дамп?
`ПОКАЖИТЕ ПЕРЕМЕННЫЕ, КАК ‘%timeout%’;
Да, теперь у меня есть только дамп @RickJames






Ответы 3
2 вещи, которые могут быть полезны:
- Используйте pv , чтобы увидеть, какая часть файла .sql уже прочитана. Это может дать вам индикатор выполнения, который, по крайней мере, говорит вам, что это не отстой.
- Войдите в MySQL и используйте SHOW PROCESSLIST , чтобы увидеть, что MySQL в данный момент выполняет. Если он все еще работает, просто дайте ему завершиться.
Если он включен, может действительно помочь отключение binlog на время восстановления. Еще одна вещь, которая может оказаться полезной, а может и не помочь. если у вас есть выбор, попробуйте использовать самые быстрые доступные диски. У вас может быть такой вариант, если вы работаете с хостерами, такими как Amazon. Вы действительно почувствуете боль, если будете (например) делать это на стандартном хосте EC2.
Спасибо большое. Итак, мне нужно сначала установить средство просмотра каналов? Затем введите что-то вроде: pv siafi.sql | mysql —user=reinaldo —password = «type_here» —database=siafi < /home/reinaldo/Documentos/Code/test/siafi.sql
@ReinaldoChaves: общий синтаксис будет pv file.sql | mysql. pv уже выводит все в STDOUT, поэтому вам не нужно также использовать <.
Я набрал: pv /home/reinaldo/Documentos/Code/test/siafi.sql | mysql —user = reinaldo —password = «type_here» —database = siafi </home/reinaldo/Documents/Code/test/siafi.sql
Однако по прошествии более часа процент так и не вышел из 0%
Однако я набрал SHOW PROCESSLIST; в другом Терминале и задача выполняется
Разбейте файл на более мелкие фрагменты и обработайте их отдельно.
Вы, вероятно, достигли высшей точки ведения журнала, и mysql пытается откатить все назад, а это медленный процесс.
Разделите файл на куски примерно по 1 Гб, разбивая на целые строки. Возможно использование:
Затем запустите их по порядку, используя текущую команду.
Вам придется поэкспериментировать с split, чтобы получить правильный размер, и вы не сказали, какая у вас ОС, а split реализации/параметры различаются. split —number=100 заставить работать на вас.
Большое спасибо @Bohemian. Я использую Ubuntu 16.04, 8 ГБ ОЗУ. Я набрал эту команду в терминале: split -l 1000000 /home/reinaldo/Documentos/Code/test/siafi.sql часть.
Примерно через 40 минут обработка прекратилась. Были ли созданы новые файлы? Не создано после
Затем я набрал: pv /home/reinaldo/Documentos/Code/test/siafi.sql | mysql —user = reinaldo —password = «type_here» —database = siafi </home/reinaldo/Documents/Code/test/siafi.sql
Однако по прошествии более часа процент так и не вышел из 0%
Однако я набрал SHOW PROCESSLIST; в другом Терминале и задача выполняется. Я думаю, это все, что нужно ждать, верно?
Вы можете использовать сторонние инструменты, такие как https://philiplb.de/sqldumpsplitter3/
Очень прост в использовании, может определить размер, местоположение и т. д.
Или используйте этот тоже то же самое, но интерфейс немного красочный и используется для использования
Пожалуйста, не пишите ЗАГЛАВНЫМИ БУКВАМИ. Это считается плохим стилем.
Md Masududzaman Khan
Другие вопросы по теме
Похожие вопросы
Находите ответы на сложные технические вопросы по программированию, с которыми сталкиваются инженеры по всему миру в своей ежедневной практике на сайте RedDeveloper.
Как работать с файлом SQL объемом 20 ГБ?
У меня есть база данных одной компании, которую я скачала в инете. Она весит более 20 гб. В файле скрипты на языке sql.
Я хочу произвести поиск в этой базе по номеру телефону пользователей, используя Python. Например, если есть номер в базе, то вывести имя и адрес пользователя.
Чтобы это сделать, наверное, надо сначала выполнить sql команды, чтобы сгенерировалась сама база данных.
Написал такой скрипт:
- Вопрос задан 09 янв.
- 351 просмотр
Простой 7 комментариев
- Вконтакте

Что, всё это в одной таблице? Тогда можно прямо вычитывать и парсить блоки VALUES.
А если нет, то только восстанавливать БД.


Вы выбрали плохой путь по ряду причин.
Во-первых, вы пытаетесь вычитать весь 20гб файл в оперативную память. Это будет долго, отожрёт кучу свопа и не факт. что завршится успешно.
Во-вторых, вы пытаетесь запустить весь SQL за один раз — это вы правильно поняли.ч то проблематично.
Ну а в-третьих.
В общем, следует глазами посмотреть в SQL и понять что там. Если там дамп БД, то сперва идут стейтменты для содания таблиц, индексов, хранимок, а потом уже операции вставки в эти таблицы.
Ваш файл называется «часть 3», так что, возможно, часть нужных стейтментов для создания структур просто оказались в других фвйлах.
Обычно кусок SQL, который создаст все таблицы, не так уж и велик по размеру. Можно открыть файлы с дампом текстовым редактором и вытащить оттуда куски SQL из начала с созданием структуры. Положить эти кусуи в отдельный файл. Иногда в SQL-файле с дампом лежит и команда создания базы, посмотрите внимательно.
Когда у вас операции вставки данных в БД в отдельном огромном файле, всё тсановится чуточку проще.
Если у вас задача одноразовая и нужно просто найти один номер и больше ничего, то можно просто воспользоваться командой grep на SQL файле. Она поищет нужный номер и покажет строчки, в которой он встретился. Параметры командной строки могут настроить выхлоп так, чтобы показывались несколько строчек. Это, возможно пригодится, если отдельные стейтменты со вставками занимают по много строк. Так можно быстро найти нужные данные не возясь с поднятием БД.
Если задача более-менее систематическая, то, конечно, лучше выполнить SQL и занести все данные в БД. Для этого имеет смысл воспользоваться стандартными утилитами, а не городить такой вот велосипед с квадратными колёсами.
Если описанные действия нужно проделывать в рамках какого-то более широкого автоматизированного процесса, а не одноразово руками, то можно тулзы для БД запускать и из питона, просто системным вызовом консольной команды.