Cli-IDE для oracle-субд. Ну. Почти IDE

Добрый день.

Первый вопрос: зачем, есть же Toad/SQL-developer/PLSQL-developer и т.п. графические ide-среды.

Ну. Да. Есть. Однако не всем именно они нужны, как средство работы с объектами oracle-субд.

Т.е. я тут, в этой статье – не именно для oracle-разработчиков буду рассказывать что то. Скорее для dba, т.е. людей у которых работа с объектами субд – значительно более специфичная, им не нужен такой ide-комбайн как Toad/SQL-developer/PLSQL-developer;

Второй момент: сейчас: удалёнка, везде и всюду. В этой связи доступ на работу – организовывается удалённый.

Либо: через что то типа VDI/RDP. Либо: выдаётся рабочий ноутбук и от на нём, с него – работай.

В первом случае – ну, часто подразумевается графический интерфейс удалённого рабочего стола и: виндовый и с ограничением по ресурсам.

Во втором случае: ну, организации часто пытаются и тут сэкономить – выдадут что нибудь с 8Гб оперативы и – как хочешь, так на этом и работай. Т.е.: файрфокс/хром, с N>>10 кол-вом вкладок, какой нибудь Toad/SQL-developer/PLSQL-developer, скайп/зум, ещё что то.

В обоих случаях: возникает вопрос – а как то бы тут сэкономить, на ресурсах, например – на IDE для oracle-субд.

Ну и, как мне кажется, находится, под этот запрос, интересный проект: VoraX

Проект, на настоящее время, абандонед, увы.

Вот хочу, по ряду причин, обратить внимание сообщества на этот проект. С одной стороны – чтобы больше народу посмотрело, с разных сторон и что то, какие то за/против увидели/оценили.

С другой стороны – уже появились, у меня, к этому проекту хотелки, но, не понятно как к ним подступится – нет ни времени, ни ресурса этим заниматься. Может быть тоже – кто то подскажет. А то и: свой форк запилит: штука то – весьма интересная.

В русскояз-м сегменте интернета практически нет упоминаний об этом проекте, есть упоминание воракса, в хабр-комменте, одного из контрбьютеров воракс-проекта.

В функционально-пользовательском смысле про возможности/свойства воракс-а отлично рассказывает автор проекта, здесь.

В инженерно-техническом смысле это – vim-плагин. Часть кода плагина: собственно дополнительные vim-функции, обеспечивающие работу в пользовательском инт-се. Часть – это руби-скрипты, которым выполняется, например, запуск-взаимодействие с sqlplus, работа с репозиторем подключений.

Т.е. воракс – это честная скл-сессия в субд, со всеми отсюда вытекающими последствиями: возможность выполнять транзакции из нескольких команд, например. Во всяких dbext, vim-dadbod, Emacs в скл-моде: такого не получится – они, при выполнении каждой конкретной скл-команды: запускают скл-плюс, подключаются в бд, выполняют команду, получают результат, закрывают соединение в бд.

Ещё часть, релевантного к воракс-у, руби-кода распространяется в виде gem-пакета с именем “vorax”, который надо доставлять в руби отдельно. В этом гем-е проверяются и, если надо, предварительно ставятся зависимости, в частности racc gem. Ему, этому gem-пакету, нужен ruby-dev ОС-пакет, его надо ставить в систему.

Соответственно: требуется, установленными на машине: ruby, vim с поддержкой ruby, oracle-клиент (можно инстант-клиент).

На LinuxMint – всё это ставится без проблем, я делал так:

apt install gawk bison libffi-dev libgdbm-dev libncurses-dev libsqlite3-dev libyaml-dev zlib1g-dev -y 
apt install sqlite3 libgmp-dev libreadline-dev checkinstall libxml2-dev libxslt-dev -y 
apt install build-essential ruby-dev pkg-config -y
ruby -v
gem install vorax
gem list | sort

Потом сборка vim-а, с поддрежкой ruby:

mkdir ~/Vim4VoraX; cd ~/Vim4VoraX
git clone https://github.com/vim/vim.git
cd ./vim/src/
#make distclean
./configure --enable-rubyinterp --with-features=huge
make
./vim --version | grep ruby; pwd
sudo apt remove vim
sudo checkinstall --pkgname vim4vorax4 --pkgversion 8.2.0 --install
#dpkg -r vim4vorax4
#in vim:
#:ruby puts RUBY_VERSION

Затем патоген-ом доставил собственно vorax-плагин в vim, использовал более современный форк, уважаемого kish4ever:

cd ~/.vim/bundle && git clone https://github.com/kakash1hatake/vorax4.git

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

Ну. Пара-тройка скринов, мы все – любим скрины:

Дока есть вот тут и в файле /vorax4/doc/vorax.txt – здесь и далее: путь относительный, от директории куда ставился vim-плагин.

Из некоторых вкусностей, которые успел заметить за те два дня что разглядываю этот плагин:

  1. Профили подключения: шифруются, хранятся в виде xml-файла profiles.xml, в, по умолчанию, домашнем каталоге. Профиль-менеджер, технически, это скрипт: /vorax4/vorax/ruby/lib/vorax/profiles_manager.rb

  2. Есть некий функционал, задающий режим отображения выхлопа селект-команд, в окне (точнее: буфере, если в vim-терминах) вывода. Бегло: поддерживается аппенд-мода вывода, поддерживается лимитирование строк в выборке (дописывается WHERE ROWNUM <= :limit), подерживается задание режима в котором не усекаются имена полей, если они длинее ширины столбца, есть Топ-режим отображения. Есть ещё несколько функций. Конечно можно выполнять set-команды и прочие команды склплюс-а и задавая какое то своё форматирование. Однако, в остальном – это всё тот же склплюс, со своими плюсами и минусами, касательно вывода. Об этом – несколько ещё поговорю, ниже. В правом нижнем углу окна вывода – подсказывается текущая мода отображения.

  3. Вот про выполнение команд и всякое форматирование: есть режим <Leader>E: т.н.: sanbdox-мода. В ней можно выполнить какой то скл-скрипт, который может выполнять свои склплюс-команды настройки скл-сессии. При этом, настройки скл-сессии самого воракс-а, из которого был, в такой моде выполнения, вызван некий скл-скрипт – будут запомнены, а после выполнения скрипта – восстановлены. Also: поддерживается обработка sigint сигналов 2,9 при выполнении команд – они посылаются склплюс-у. Also: поддерживается выполнение конкретной команды, на которой стоит курcор (или то что выделено, в visual-моде ), в верхнем vim-окне.

  4. plsql-подпрограммы, их определение, можно получить из объектного вьювера, в отдельный буфер (в терминах vim-а), просто встав на элемент в тривью и жмакнув “Enter”. Что тут интересно – конкретно вот этот буфер, его содержимое, при попытке изменить-скомпилировать ддл-код процедурного объекта, воракс будет отправлять в субд as is, цитирую:

The default key mapping for compiling is c. “C” stands, obviously, for “C”ompile. For convenience, you may also use @. Two things happen when a PLSQL object is compiled:

* the buffer content is sent as it is to the server.

* as soon as the buffer content is executed, Vorax will check the ALL_ERRORS view to see if any relevant errors exist. If such errors are found, they are loaded into a Vim quickfix window, along with the error line, error column and the message itself.

Note: Pay attention that during the compilation of an PLSQL object, the substitution variables feature is disabled.

Проблемки (ну. с моей т.з.):

Спулинг выборок из воракс-а в файл. Формально – работает. Однако выясняется что воракс, обменивается с склплюс-ом (читает/пишет на/с стдоут/стдин) данными особенным образом – он обрамляет пользовательский текст в свои текстовые брекеты. Взаимодействие с склплюс – делается скриптом: /vorax4/vorax/ruby/lib/vorax/sqlplus.rb, там это выглядит, например, таким образом (пара скринов):

В итоге, в спул-файл, выписывается, кроме самой выборки – ещё куча служебных строк, от обмена данными между воракс-ом и склплюс-ом. Всё это – обходится конечно, но надо сделать дополнительные усилия, для обхода.

Второй момент.

Разглядывая склплюсовое форматирование выборок, в окне вывода, в воракс-е, вспомнил про SQLcl: какой он весь из себя модный-молодёжный, как там всё здорово с форматированием выборок. Ну и: тут же пришла в голову мысль о костыле рационализаторско-конструкторском усовершенствовании – а пуркуа бы и не па вписать в /vorax4/vorax/ruby/lib/vorax/sqlplus.rb вместо вызова бинаря sqlplus, вызов sql;

Да, виновен/мне стыдно: на тот момент ещё не знал что SQLcl – вызывается шельником <SQLcl-хоум>/sqlcl/bin/sql, который запускает ява-процесс, к которым и взаимодействует пользователь.

Поэтому, конечно, тут ничего не получилось: воракс – честно запускал шельник /sqlcl/bin/sql и потом выдавал ошибку – ой что то оно не отвечает.

Плюс, не известно – как бы ещё SQLcl реагировал, на эти текстовые брекеты воракс-а, типа #set blockterm, которыми он окружает текст пользовательских команд, получаемых от пользователя.

Пробовалось вписать, в вызов явы, в функции run в шелнике <SQLcl-хоум>/sqlcl/bin/sql ехес-команду баш-а, т.е., вот так:

function run {
 if  [  "m$SQLCL_DEBUG" != "m" ]; then
   echo "JAVA=$JAVA"
   echo "JAVA_OPTS=${APP_VM_OPTS[@]}"
   echo "DEBUG=$DEBUG"
   echo "CPLIST=$CPLIST"
   echo "LD_LIBRARY_PATH=$LD_LIBRARY_PATH"
   echo "exec $JAVA  $CUSTOM_JDBC $CYGWIN "${APP_VM_OPTS[@]}" -client $SQLCL_DEBUG -cp "$CPLIST" oracle.dbtools.raptor.scriptrunner.cmdline.SqlCli "

 fi
exec $JAVA  $CUSTOM_JDBC $CYGWIN "${APP_VM_OPTS[@]}" -client $SQLCL_DEBUG -cp "$CPLIST" oracle.dbtools.raptor.scriptrunner.cmdline.SqlCli "$@"
}

Не выгорело, так же – сбоит.

Отдельно оговорюсь: в руби/яве – не понимаю ничего.

Собственно, зачем обращаю внимание собщества на этот проектик.

Интересны отзывы о этой штуке, может быть кто пользовался/пользуется, может рассказать плюсы/минусы которые с опытом работы становятся видны.

Ещё любопытно, как бы скрестить воракс-а с SQLcl, может быть есть, какие то, у кого то идеи об этом?

Так же, вопрос, какие ещё есть/знаете варианты работы с oracle-субд через cli-приложения, сопоставимые, или более продвинутые чем воракс, т.е.: коннекшен-менеджмент, обжект-браузер, и вот это вот всё.

Спасибо за внимание, ваше время.

Let’s block ads! (Why?)

Read More

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *