Пример PI-Day
Вот очень быстрый и простой тест Oracle MLE, механизма, который позволяет запускать хранимые процедуры JavaScript или Python в базе данных Oracle (в настоящее время находится в стадии бета-тестирования).
Бета-версия MLE предоставляется в виде образа докера, содержащего Oracle Database 12.2 с дополнительными библиотеками MLE. Я создал виртуальную машину в Oracle Cloud, чтобы протестировать ее и показать сквозную демонстрацию в Oracle Linux 7.
Получить программное обеспечение
Вот где можно скачать сервер баз данных с бета-версией MLE:
и клиент SQLcl
Я скачаю их со своей ВМ, где у меня нет браузера,
но загрузка программного обеспечения Oracle требует вмешательства человека для принятия условий лицензии. Затем я запускаю загрузку со своего ноутбука (где я могу войти в свою учетную запись Oracle и принять лицензию), приостанавливаю загрузку и копирую ссылку, содержащую значение «AuthParam». Затем я могу использовать этот URL-адрес, чтобы загрузить его с помощью wget на моей виртуальной машине в каталоге /tmp:
Как только это будет в каталоге /tmp, я устанавливаю и запускаю докер, распаковываю SQLcl и создаю контейнер MLE:
sudo su # install docker and java from OL7 Add-Ons yum-config-manager --enable ol7_addons yum install -y docker-engine docker-compose java #start docker systemctl start docker docker info | grep -A2 ^Storage # install SQLcl, the client to connect to the database unzip -d /tmp /tmp/sqlcl-18.4.0.007.1818.zip* # start the MLE beta docker load --input /tmp/mle-docker-0.3.0.tar.gz* cat > /tmp/mle.yml <<'CAT' version: '3.1' services: ora122MLE: image: mle-docker:0.3.0 restart: always environment: ORACLE_SID: CDB1 ORACLE_PDB: PDB1 ORACLE_PWD: oracle ports: - 1521:1521 volumes: - "/var/tmp/oradata:/opt/oracle/oradata" - "/tmp:/home/oracle/myproject" CAT mkdir -p /var/tmp/oradata docker-compose -f /tmp/mle.yml up
Я мог бы создать образ докера, содержащий SQLcl, но я не фанат контейнеров. Моя ОС - это виртуальная машина, SQLcl работает на виртуальной машине Java, действительно ли мне нужно помещать это в контейнер между двумя виртуальными машинами? В контейнере работает только база данных, потому что именно так поставляется бета-версия.
[Обновление от 17 марта 2019 г.] Это нормально, только если между клиентом и сервером выполняется несколько циклов. Реализация docker-proxy для подключения хоста к контейнеру вообще неэффективна, а затем лучше установить SQLcl в самом контейнере или другом связанном контейнере.
Создание контейнера в docker-compose up занимает много времени. Потерпи. Вот как работают образы докеров базы данных: они должны создать базу данных при создании контейнера.
Причина в том, что база данных хранит постоянные данные, а затем может быть создана только после запуска контейнера. А базу данных Oracle создать просто невозможно. Здесь я помещаю базу данных в /var/tmp, а каталог myproject сопоставляется с /tmp.
Бета-версия MLE основана на официальных сценариях сборки образов Docker, предоставленных Oracle. Все в порядке, когда вы видите «БАЗА ДАННЫХ ГОТОВА К ИСПОЛЬЗОВАНИЮ».
Давайте проверим пароль, который я определил в файле docker-compose, и создадим пользователя DEMO в подключаемой базе данных:
/tmp/sqlcl/bin/sql sys/oracle@//localhost/pdb1 as sysdba connect sys/oracle@//localhost/pdb1 as sysdba grant dba to demo identified by demo; connect demo/demo@//localhost/pdb1
Документация бета-версии MLE находится по адресу: https://oracle.github.io/oracle-db-mle/docker. Поскольку я делаю это 14 марта или 14 марта, который в странах, использующих формат MM/DD, известен как День PI, я создам функцию PI, которая может округлять до 2 знаков после запятой:
connect demo/demo@//localhost/pdb1 create javascript source named "test1.js" as module.exports.PI=function (d) { return Math.round(10**d*Math.PI)/10**d; } / create function PI(decimals in number) return number as language javascript name 'test1\.js.PI(decimals number) return number'; / select PI(2) from dual;
В предыдущей бета-версии нам приходилось использовать внешнюю утилиту (dbjs) для загрузки кода JavaScript. Теперь это намного проще с оператором CREATE SOURCE.
Теперь я готов со средой MLE для дальнейших тестов…