Докер: Oracle database 18.4.0 XE хочет настроить новую базу данных при запуске - PullRequest
0 голосов
/ 30 марта 2019

Я пытаюсь настроить контейнер базы данных Oracle. Моя проблема заключается в том, что всякий раз, когда я пытаюсь перезапустить контейнер, сценарий запуска хочет настроить новую базу данных и не может это сделать, поскольку на указанном томе уже настроена база данных.

Что я могу сделать, чтобы контейнер знал, что я хотел бы использовать мою существующую базу данных?

Стартовый скрипт, который я скачал с Oracle GitHub: Link

ОБНОВЛЕНИЕ: Очевидно, что проблема возникает, когда /etc/init.d/oracle-xe-18c start возвращает сообщение о том, что база данных не была настроена, что запускает сценарий запуска, чтобы попытаться настроить ее.

ОБНОВЛЕНИЕ 2: Я попытался создать базу данных без каких-либо переменных среды, и после перезапуска контейнера база данных работает. Это досадный обходной путь, но он, похоже, работает. Если у вас есть другие идеи, пожалуйста, дайте мне знать

Ответы [ 2 ]

0 голосов
/ 15 апреля 2019

Мне кажется, я понимаю источник проблемы от начала до конца.

В документации 1004 * я упустил из виду то, что Express Edition Oracle Database не поддерживает SID / PBD, отличный от установленного по умолчанию. Тем не менее, скрипт конфигурации (вроде бы /etc/init.d/oracle-xe-18c, но не неприглядно) был сделан только частично с учетом этого факта. Это означает, что если я установлю переменные окружения ORACLE_SID и / или ORACLE_PWD при установке, база данных будет запущена и будет работать с 2 подозрительными ошибками при попытке скопировать 2 файла.

mv: cannot stat '/opt/oracle/product/18c/dbhomeXE/dbs/spfileROPIDB.ora': No such file or directory
mv: cannot stat '/opt/oracle/product/18c/dbhomeXE/dbs/orapwROPIDB': No such file or directory

При остановке и перезапуске Docker-контейнера я получу сообщение об ошибке, потому что сценарий конфигурации создал имена папок / файлов в соответствии с этими переменными, однако образ Docker построен так, что поддерживает только имена по умолчанию, заставляя его попытаться перенастроить новую базу данных, но увидев, что она уже существует.

Надеюсь, это имеет смысл.

0 голосов
/ 31 марта 2019

Я думаю, что вы должны подключиться к образу linux с помощью:

docker exec -ti containerid bash

Оказавшись там, вы должны вручную проверить следующее:

, если$ ORACLE_BASE / oradata / $ ORACLE_SID существует так же, как и сценарий, и если $ ORACLE_BASE / admin / $ ORACLE_SID / adump нет.

Еще одна вещь, которую вы должны выполнить вручную, это

/etc/init.d/oracle-xe-18c start | grep -qc "Oracle Database is not configured

ОБНОВЛЕНИЕ ПОСЛЕ КОММЕНТАРИИ =====

У меня нет сценария, но вы должны запустить его с помощью bash -x, чтобы увидеть, что ищет сценарий для отладки того, что происходит

Что не имеет смысла, так это то, что вы говорите, что $ ORACLE_BASE / admin / $ ORACLE_SID / adump не существует, но если докер развернут и у вас запущена база данных, то при первом запуске скрипта он должен был это создать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...