Я создаю и запускаю базу данных 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 локально в контейнере докера, а затем, вероятно, перезапустить экземпляр с помощью команд SHUTDOWN и STARTUP.

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

1
Alexey Starinsky 12 Мар 2019 в 18:12

1 ответ

Лучший ответ

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

alter session set container = CDB;

Или что-то типа того.

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

Альтернатива сделать это в 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 

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

env
export ORACLE_SID=<your sid>
2
F.Madsen 12 Мар 2019 в 16:32