SQLplus с человеческим лицом
Oracle SQL*plus кошмарен и сложен в установке, что и подвигло меня на написание этой памятки.
Установка
Утилита входит в состав СУБД Оракл и описанное ниже необходимо, если вам не нужна развернутая на вашем компьютере СУБД, а только sqlplus для усправления удаленной БД.
Скачать http://www.oracle.com/technetwork/database/database-technologies/instant-client/downloads/index.html и установить его
sudo apt-get install alien
sudo alien -i oracle-instantclient*-sqlplus*.rpm
sudo apt-get install libaio1
sudo sensible-editor /etc/ld.so.conf.d/oracle.conf
# указать в файле путь /usr/lib/oracle/12.2/client64/lib/
sudo ldconfig
sudo ln -s /usr/bin/sqlplus64 /usr/bin/sqlplus
Добавить в .bashrc
export ORACLE_HOME=/usr/lib/oracle/12.2/client64/lib
export LD_LIBRARY_PATH="$ORACLE_HOME"
export LD_LIBRARY_PATH="$ORACLE_HOME"
export TNS_ADMIN=$ORACLE_HOME/admin/network
Сохранить в файле $ORACLE_HOME/admin/network/tnsnames.ora
параметры соединения с ваше БД:
your_db_name =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(Host = localhost)(Port = 1521))
(SERVER=DEDICATED)
)
(CONNECT_DATA = (SERVICE_NAME = your_db))
)
Использование
После этого с БД в режиме суперпользователя можно соединиться:
sqlplus sys/sys_password@your_db_name as SYSDBA
Чтобы работала история команд (по стрелке вверх) и автодополнение (по TAB
) устанавливаем rlwrap
:
sudo apt-get install rlwrap
Слова для автодополнения (разделенные пробелами или новыми строками) помещаем в
~/.command_completions
Для удоства создаем alias sql
:
alias -p sql='rlwrap -f ~/.command_completions sqlplus'
Памятка про sys
Чтобы соединиться удаленно как супер-пользователь БД (SYSDBA) не с той машины, где
работает СУБД, надо установить пользователю sys
внешний пароль.
Поскольку изначально у него пароль, с которым можно войти только локально.
Внешний пароль который мы установим (в данношм случае sys_password
) перекроет
старый пароль и для внутренних логинов:
alter user sys identified by sys_password;
Ошибки компиляции
Если найдены ошибки при компиляции пакета, sqlplus пишет только “Warning: Package created with compilation errors.”.
Чтобы увидеть сами ошибки надо использовать:
select * from dba_errors order by sequence;
Настройки
SET AUTOCOMMIT 1;
- коммит после каждой строки, полезно если выполняются взаимозависимые insert.
/
надо добавлять после кода процедур и пакетов, чтобы они были скомпилированы.
EXIT
удобно добавлять внутрь скриптового файла (передаваемого в командной строке как @file_name
), чтобы SQLplus завершил работу после его выполнения.