Запуск Oracle как службы внутри контейнера Docker - PullRequest
1 голос
/ 12 марта 2019

Я создаю и запускаю базу данных Oracle с этим файлом dockerfile , который запускает экземпляр Oracle с помощью команды в последней строке файла dockerfile.

CMD exec $ORACLE_BASE/$RUN_FILE

Экземпляр Oracle работает, ямогу подключиться к нему с Oracle SQL Developer, но я не могу, например,

ALTER SYSTEM SET audit_trail=db SCOPE=SPFILE;

и получить следующие ошибки:

ORA-65040: operation not allowed from within a pluggable database
65040. 00000 -  "operation not allowed from within a pluggable database"
*Cause:    An operation was attempted that can only be performed in the root
       container.
*Action:   Switch to the root container to perform the operation.

Итак, насколько явидите, мне нужно запустить что-то вроде sqlplus локально в контейнере Docker, а затем, вероятно, перезапустить экземпляр с помощью команд SHUTDOWN и STARTUP.

Какой самый простой способ сделать это в моем контейнере?Стоит ли запускать Oracle как службу внутри контейнера докера?Это лучшая альтернатива?(По крайней мере, служба запустится, когда будет запущен контейнер, и я смогу использовать bash внутри контейнера, но это требует модификации и перестройки файла docker).Я не эксперт в linux / docker / oracle, и мне нужно знать, иду ли я в правильном направлении или нет.

1 Ответ

2 голосов
/ 12 марта 2019

При подключении к базе данных из sqldeveloper вы правильно подключитесь к PDB (подключаемой базе данных), поэтому вам нужно заменить текущий контейнер (DB) на основной контейнер

alter session set container = CDB;

или что-то ещевот так.

Вы также можете создать базу данных как традиционную базу данных, не относящуюся к CDB, чтобы избежать пуша Pluggable DB.Просто измените файл ответов, использованный для создания БД.

В качестве альтернативы сделайте это в sqlplus:

Доступ к контейнеру:

docker exec -it <your container-id/name> /bin/bash
cd /opt/oracle/product/18c/dbhome_1/bin
./sqlplus sys/<your syspwd> as sysdba

По какой-то причине иногда отсутствует ORACLE_SIDи даст вам странный

ORA-12162 TNS:net service name is incorrectly specified 

, поэтому, когда в контейнере, пожалуйста, проверьте и подтвердите.установите его перед доступом к БД.

env
export ORACLE_SID=<your sid>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...