#oracle #docker
#Oracle #docker
Вопрос:
Я создаю и запускаю базу данных 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 как службу внутри контейнера docker? Является ли это лучшей альтернативой? (По крайней мере, служба запустится при запуске контейнера, и я смогу использовать bash внутри контейнера, но для этого требуется модификация и перестроение файла dockerfile). Я не эксперт в linux / docker / oracle, и мне нужно знать, двигаюсь ли я в правильном направлении или нет.
Ответ №1:
Когда вы подключаетесь к базе данных из sqldeveloper, вы правильно подключаетесь к PDB (подключаемой базе данных), поэтому вам нужно изменить текущий контейнер (DB) на основной контейнер
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>
Комментарии:
1. Попытался изменить набор сеансов container = ‘CDB’;, но получил ORA-65015: отсутствующее или недопустимое имя контейнера
2. Попробуйте без кавычек, я пропустил подключаемый материал в своей собственной среде, поэтому я не могу его протестировать.
3. Без кавычек я получил: ORA-65011: Подключаемая база данных CDB не существует.
4. Какая у вас версия БД 12c, 18c? Для версии 18.1 , похоже, обнаружена ошибка BUG: 28558287 — ORA-65011: ПОДКЛЮЧАЕМАЯ БАЗА ДАННЫХ НЕ СУЩЕСТВУЕТ. — Решение, перезапустите DB —
5. Можете ли вы попробовать альтернативу, которую я даю в своей правке к ответу? Там вы должны напрямую попасть в CDB. Или попробуйте перезапустить обходной путь, описанный в ошибке.