Как запустить sql файл

Обновлено: 25.06.2024

В практике аудита использование СУБД SQL Server для хранения и анализа данных – одно из непременных условий, существенно повышающих качество проводимой работы.

А обслуживание базы данных, включающее, в том числе, резервное копирование данных, крайне важно для обеспечения ее бесперебойной работы.

В этой статье я поделюсь альтернативным способом того, как мы автоматизировали создание ежедневной резервной копии базы данных для обеспечения возможности восстановления данных в случае какого-либо инцидента. Мы сделали это с помощью служебной программы SQLCMD без запуска SQL Server Management Studio.

Но для начала немного простых примеров использования sqlcmd (все данные тестовые).

Посмотрим, как это работает в интерактивном режиме.

Запускаем командную строку Windows – cmd.

Чтобы подключиться к именованному экземпляру SQL Server, укажем имя сервера и имя экземпляра SQL Server (в примере соответственно DESKTOP\SQLEXPRESS), с которым необходимо соединиться.

–S указывает на server\instance_name;

–E –trusted connection (доверительное соединение).


Отображаемая в командной строке цифра 1> означает, что подключение состоялось и есть готовность принимать запросы для исполнения.

Если ранее при создании пользователя SQL Server для пользователя была включена аутентификацию SQL Server,


то при подключении требуется указать имя пользователя и ввести его пароль.

Чтобы это выполнить, предварительно необходимо выйти из sqlcmd и заново войти с указанием учетных данных:

Командная строка запросит пароль для пользователя DB_User, который необходимо ввести с клавиатуры.

При желании можно указать пароль в командной строке, хотя это не рекомендуется по соображениям безопасности:

Давайте теперь проверим текущую базу данных.

При создании входа в SQL Server можно определить базу данных, в которую необходимо войти, по умолчанию. Если она не указана, то базой данных по умолчанию будет является основная база данных (master).


Следующий пример использования sqlcmd – вывод списка баз данных в экземпляре SQL:


Теперь давайте посмотрим на запуск sqlcmd в командном режиме.

Получим список таблиц в базе данных db1, выведя его в файл tables.txt, используя в sqlcmd подготовленный заранее и сохраненный на жестком диске ПК, сценарий tablesList.sql со следующим содержанием:

Затем вызовем sqlcmd для выполнения созданного сценария tablesList.sql:

В tables.txt отображается следующий результат (для примера выбрана тестовая база данных, состоящая из одной таблицы):


Теперь вернемся к нашей задаче автоматизации резервного копирования с использованием sqlcmd и планировщика задач Windows.

Во-первых, создадим файл сценария резервного копирования базы данных db1 и сохраним его в файле backup.sql:

Файл резервной копии в результате выполнения этого сценария сохраняется в каталог C:\Users\User\SQL\Backup\.

Далее создаем командный файл run-sqlcmd-backup.bat следующего содержания:

И, наконец, открываем Планировщик заданий Windows (подробнее о планировщике заданий Windows можно прочесть в официальных документах Microsoft по этой тематике), для того, чтобы создать задачу резервного копирования базы данных db1, запускающую командный файл run-sqlcmd-backup.bat по необходимому расписанию.


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

Я хочу выполнить текстовый файл, содержащий запросы SQL, в MySQL.

Я попытался запустить source/Desktop/test.sql и получил ошибку:

mysql>. \home\sivakumar\Desktop\test.sql ОШИБКА: не удалось открыть файл '\ home\sivakumar\Desktop\test.sql', ошибка: 2

Есть идеи, что я делаю не так?

ОТВЕТЫ

Ответ 1

Если вы в командной строке MySQL mysql> , вам нужно объявить файл SQL как source .

Ответ 2

У вас довольно много вариантов:

  • используйте клиент командной строки MySQL: mysql -h hostname -u user database < path/to/test.sql
  • Установите инструменты GUI MySQL и откройте свой файл SQL, затем выполните его
  • Используйте phpmysql, если база данных доступна через ваш веб-сервер

Ответ 3

вы можете выполнить инструкции mysql, которые были записаны в текстовом файле, используя следующую команду:

если ваша база данных еще не создана, сначала войдите в свой mysql, используя:

который должен это сделать!

Ответ 4

Все лучшие ответы хороши. Но на всякий случай кто-то хочет запустить запрос из текстового файла на удаленном сервере И сохранить результаты в файл (вместо показа на консоли), вы можете сделать это:

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

Ответ 5

Мой любимый вариант сделать это будет:

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

С комментарием @elcuco я предлагаю использовать эту команду вместе с [пробелом], поэтому она говорит bash игнорировать сохранение в истории, это будет работать из коробки в большинстве bash.

если ваша команда все еще сохраняется в истории, просмотрите следующие решения:

дополнительная безопасность редактирования

На всякий случай, если вы хотите быть более безопасным, вы можете использовать следующую команду и ввести пароль в командной строке:

Ответ 6

Я пришел сюда, ища этот ответ, и вот что я нашел, работает для меня лучше: Примечание. Я использую Ubuntu 16.xx

mysql -u <your_user> - p

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

Ответ 7

Укажите путь к файлу .sql как:

See In The Image:

Ответ 8

Не указывать одинарные кавычки.

Если приведенная выше команда не работает, скопируйте файл на диск c: и повторите попытку. как показано ниже,

Ответ 9

Никогда не рекомендуется передавать аргумент пароля непосредственно из командной строки, он сохраняется в файле

/.bash_history и может быть доступен из других приложений.

Используйте это вместо:

Ответ 10

Ответ 11

Скорее всего, вам просто нужно изменить косую черту /blackslash: от

Таким образом, команда будет следующей:

Ответ 12

используйте следующее из командной строки mysql -

Не используйте цитату. Даже если путь содержит пробел (''), используйте никакую цитату вообще.

Ответ 13

Так как mysql -u yourusername -p yourpassword yourdatabase < text_file не работал на удаленном сервере (Amazon EC2).

Сначала убедитесь, что база данных создана.

Ответ 14

В будущем, я нашел, что это работает против вышеупомянутых методов под Windows в консоли msql:

Если ваш корневой диск не называется "c", тогда просто обменивайтесь тем, что вы вызываете. Сначала попробуйте обратную косую черту, если они не работают, попробуйте косую черту. Если они также не работают, убедитесь, что у вас есть полный путь к файлу, расширение .sql для имени файла, и если ваша версия настаивает на полуколонах, убедитесь в этом и повторите попытку.

Ответ 15

вместо перенаправления я бы сделал следующее

Это выполнит файл path-to-sql-file

Ответ 16

У меня была эта ошибка, и я пробовал все советы, которые я мог получить безрезультатно.

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

Ответ 17

Так много способов сделать это.

Если вы получаете ошибки из командной строки, убедитесь, что вы ранее запустили

Это должно быть выполнено из каталога mysqld.exe, отсюда и CD.

Надеюсь, что это полезно, а не просто излишне.

Ответ 18

Вы можете использовать SQLyog Выполнить SQL script для выполнения файла .sql. Выберите файл и нажмите "Выполнить".:-) Вы получаете 30-дневную бесплатную пробную версию.

И вы получаете ошибку, потому что у вас есть цитаты вокруг имени файла.

Файл должен находиться на клиентском хосте, где вы используете mysql. Имя файла должно быть абсолютным путем, указывающим полное имя файла, или имя пути, которое указано относительно каталога, в котором вы вызывали mysql. Например, если вы запустили mysql на компьютере под управлением Windows в каталоге C:\mysql, а ваш файл script - my_commands.sql в каталоге C:\scripts, обе следующие команды SOURCE сообщают mysql выполнить SQL-запросы в файл:

mysql > SOURCE C:\scripts\my_commands.sql;

Другой способ выполнить файл script - это присвоить ему имя в командной строке mysql. Вызвать mysql и использовать < оператор перенаправления ввода, чтобы указать файл для чтения ввода запроса:

Я хочу выполнить текстовый файл, содержащий запросы SQL, в MySQL.

Я попытался запустить source/Desktop/test.sql и получил ошибку:

mysql>. \home\sivakumar\Desktop\test.sql ОШИБКА: не удалось открыть файл '\ home\sivakumar\Desktop\test.sql', ошибка: 2

Есть идеи, что я делаю не так?

Если вы в командной строке MySQL mysql> , вам нужно объявить файл SQL как source .

У вас довольно много вариантов:

  • используйте клиент командной строки MySQL: mysql -h hostname -u user database < path/to/test.sql
  • Установите инструменты GUI MySQL и откройте свой файл SQL, затем выполните его
  • Используйте phpmysql, если база данных доступна через ваш веб-сервер

вы можете выполнить инструкции mysql, которые были записаны в текстовом файле, используя следующую команду:

если ваша база данных еще не создана, сначала войдите в свой mysql, используя:

который должен это сделать!

Все лучшие ответы хороши. Но на всякий случай кто-то хочет запустить запрос из текстового файла на удаленном сервере И сохранить результаты в файл (вместо показа на консоли), вы можете сделать это:

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

Мой любимый вариант сделать это будет:

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

С комментарием @elcuco я предлагаю использовать эту команду вместе с [пробелом], поэтому она говорит bash игнорировать сохранение в истории, это будет работать из коробки в большинстве bash.

если ваша команда все еще сохраняется в истории, просмотрите следующие решения:

дополнительная безопасность редактирования

На всякий случай, если вы хотите быть более безопасным, вы можете использовать следующую команду и ввести пароль в командной строке:

Я пришел сюда, ища этот ответ, и вот что я нашел, работает для меня лучше: Примечание. Я использую Ubuntu 16.xx

mysql -u <your_user> - p

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

Укажите путь к файлу .sql как:

See In The Image:

Не указывать одинарные кавычки.

Если приведенная выше команда не работает, скопируйте файл на диск c: и повторите попытку. как показано ниже,

Никогда не рекомендуется передавать аргумент пароля непосредственно из командной строки, он сохраняется в файле

/.bash_history и может быть доступен из других приложений.

Используйте это вместо:

Скорее всего, вам просто нужно изменить косую черту /blackslash: от

Таким образом, команда будет следующей:

используйте следующее из командной строки mysql -

Не используйте цитату. Даже если путь содержит пробел (''), используйте никакую цитату вообще.

Так как mysql -u yourusername -p yourpassword yourdatabase < text_file не работал на удаленном сервере (Amazon EC2).

Сначала убедитесь, что база данных создана.

В будущем, я нашел, что это работает против вышеупомянутых методов под Windows в консоли msql:

Если ваш корневой диск не называется "c", тогда просто обменивайтесь тем, что вы вызываете. Сначала попробуйте обратную косую черту, если они не работают, попробуйте косую черту. Если они также не работают, убедитесь, что у вас есть полный путь к файлу, расширение .sql для имени файла, и если ваша версия настаивает на полуколонах, убедитесь в этом и повторите попытку.

вместо перенаправления я бы сделал следующее

Это выполнит файл path-to-sql-file

У меня была эта ошибка, и я пробовал все советы, которые я мог получить безрезультатно.

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

Так много способов сделать это.

Если вы получаете ошибки из командной строки, убедитесь, что вы ранее запустили

Это должно быть выполнено из каталога mysqld.exe, отсюда и CD.

Надеюсь, что это полезно, а не просто излишне.

Вы можете использовать SQLyog Выполнить SQL script для выполнения файла .sql. Выберите файл и нажмите "Выполнить".:-) Вы получаете 30-дневную бесплатную пробную версию.

И вы получаете ошибку, потому что у вас есть цитаты вокруг имени файла.

Файл должен находиться на клиентском хосте, где вы используете mysql. Имя файла должно быть абсолютным путем, указывающим полное имя файла, или имя пути, которое указано относительно каталога, в котором вы вызывали mysql. Например, если вы запустили mysql на компьютере под управлением Windows в каталоге C:\mysql, а ваш файл script - my_commands.sql в каталоге C:\scripts, обе следующие команды SOURCE сообщают mysql выполнить SQL-запросы в файл:

mysql > SOURCE C:\scripts\my_commands.sql;

Другой способ выполнить файл script - это присвоить ему имя в командной строке mysql. Вызвать mysql и использовать < оператор перенаправления ввода, чтобы указать файл для чтения ввода запроса:

Работа с внешними файлами из Oracle SQL*Plus, команды GET, START, символы @ и @@, команды SAVE и SPOOL

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

Отметим, что во всех случаях SQL*Plus подразумевает, что для скрипта используется расширение sql . Если используется именно это расширение, его можно опускать. Если же расширение другое, потребуется указать имя файла вместе с расширением.

Для того, чтобы просмотреть из SQL*Plus код, который находится в файле на диске, можно использовать команду GET , например:

GET C :\ OracleScript . sql

Информация из файла C :\ OracleScript . sql будет загружена в буфер SQL*Plus (и выведена на экран).

Запустить на выполнение код из внешнего файла можно при помощи команды START . Можно также просто дописать символ @ к имени файла:

START C :\ OracleScript . sql

@ C :\ OracleScript . sql

Для запуска внешнего файла можно также использовать формат @@имя_файла. Отличие между применением одного символа At (@) и двумя символами At (@@) — в их поведении, когда полный путь к файлу скрипта не указан. Обычно при использовании двух символов @@ в ситуации, когда этой командой запускается один скрипт из другого скрипта, поиск второго скрипта будет производиться SQL*Plus в том же каталоге, в котором находится первый скрипт. Если же использовать один символ @, то поиск будет производиться в каталоге скриптов по умолчанию (зависит от операционной системы и установленных экземпляров Oracle ).

Сохранить содержимое буфера SQL*Plus в файле можно при помощи команды SAVE :

Для команды SAVE можно указать дополнительные параметры:

  • CREATE (по умолчанию) — создать новый файл;
  • REP ( REPLACE ) — заменить имеющийся на диске файл новым (если такого файла еще нет, он будет просто создан);
  • APP ( APPEND ) — дописать содержимое буфера SQL*Plus к файлу на диске, например:

SAVE c:\MyScript.sql APP

Часто возникает необходимость записать результаты выполнения запросов SQL*Plus в файл. Для этой цели используется команда SPOOL :

SPOOL C :\ ScriptResults . rpt

select * from emp

Для отключения вывода информации в файл используется команда SPOOL OFF .

Отметим некоторые моменты, связанные с перенаправлением вывода SPLPlus в файл:

· если расширение для файла не указано, по умолчанию SQL*Plus добавит расширение lst ;

· перенаправлять вывод можно не только в файл, но и на служебные устройства операционной системы (принтер, NULL ) и т.п.;

· при выводе информации в файл производится буферизация вывода. Поэтому не удивляйтесь, если непосредственно после выполнения запроса обнаружится, что его результаты в файл не добавились. Они будут добавлены полностью только после выполнения команды SPOOL OFF , закрытия SQL*Plus или других действий по очистке кэша результатов;

· команду SPOOL можно использовать для формирования результатов выполнения запросов в формате HTML ;

· отключить/включить вывод результатов на экран SQL*Plus можно при помощи команд SET TERMOUT ON / SET TERMOUT OFF .

Отметим, что запуск внешнего скрипта на выполнение и запись результатов во внешний файл можно осуществить и при помощи параметров командной строки SQL*Plus (см. раздел 1.2.2).

SQL*Plus - программа для работы с СУБД Oracle посредством командной строки. Используя SQL*Plus можно выполнять команды SQL и PL/SQL в интерактивном режиме или используя сценарий.

Основное преимущество SLQ*Plus - доступность, т.к. инструмент доступен практически всегда, когда в системе установлен Oracle. При этом это достаточно мощный инструмент, используя который можно решать различные задачи на удаленных машинах.

К написанию этой статьи меня подтолкнула книга "Oracle SQL*Plus: The Definitive Guide, 2nd Edition", написанная Jonathan Gennick. Как обычно, появилось желание систематизировать информацию и представить ее в удобном виде.

При этом сразу считаю нужным оговориться, что я использую SQLplus для написания и выполнения скриптов на удаленных машинах, в этой статье описываю именно используемые для этого команды.

Область возможного использования SQLplus при этом гораздо шире, например - построение отчетов, в том числе в формате HTML.

Параметры, подключение к базе, запуск скриптов

Выполнить несколько строк кода (не передавая отдельный файл со скриптом), unix:

Выполнение SQL запросов

Запрос может состоять из нескольких строк, содержать комментарии, но не может содержать внутри пустые строки.

Запрос может быть выполнен тремя способами:

  • точка с запятой в конце запроса
  • строка с слешем "/" после запроса
  • пустая строка после запроса (будет помещен в буфер, но не выполнен немедленно)

Выполнение PL/SQL блоков

Пример PL/SQL блока:

Правила выполнения PL/SQL блоков:

  • Первое слово в PL/SQL блоке должно быть из списка: BEGIN, DECLARE, CREATE PROCEDURE,
    CREATE FUNCTION, CREATE TRIGGER, CREATE PACKAGE, CREATE TYPE, CREATE TYPE BODY. Регистр не важен.
  • Блок может состоять из нескольких строк
  • Можно вставлять /* комментарии */, они также могут быть на несколько строк
  • Пустые строки не разрешены внутри блока

Сигнал к выполнению блока может быть подан двумя путями:

  • Строка, содержащая только слеш "/" после блока - выполнить сразу
  • Строка, содержащая точку "." после блока - поместить в буфер. Содержимое буфера может быть выведено командой LIST и выполнено, путем указания одиночного слеша "/" или команды RUN.

Одиночное выражение PL/SQL может быть выполнено, используя:

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

Работа с переменными

Переменные могут быть заданы двумя способами:

Если уже была определена &&variable, то значение будет подставлено во все дальнейшие переменные как &variable так и &&variable.

Если была определена &&variable, и скрипт запущен повтороно в ходе той же сессии работы с SQLplus - будет использовано старое значение переменной. Чтобы этого избежать - можно запрашивать интерактивный ввод в скрипте принудительно, испольтзуя команду:

ACCEPT можно использовать для валидации:

Для ввода дат в определенном формате:

SQL*Plus поддерживает четыре типа переменных: CHAR, NUMBER, BINARY_FLOAT, and BINARY_DOUBLE. При вводе с клавиатуры переменная будет типа CHAR.

Несмотря на это, можно использовать NEW_VALUE, чтобы задать числовую переменную, полученную как результат запроса.

Bind-переменные могут использоваться для передачи данных между PL/SQL и SQL блоками:

Присвоить bind-переменной значение &-переменной:

Вывести значение bind-переменной:

Присвоить &-переменной значение bind-переменной:

Получаем OUT-параметр процедуры в bind-переменную:

Условное выполнение в SQLplus:

Пример скрипта, принимающего несколько переменных на вход в формате c возможностью задать дефолтные значения:

Настройки выполнения скриптов

Действуют на протяжении сессии в SQLplus.

Запомнить настройки перед выполнением скрипта и вернуть обратно по завершении выполнения:

Читайте также: