Как закрыть базу данных Oracle в Docker-контейнере? - PullRequest
1 голос
/ 14 марта 2019

Я запускаю Oracle Database 12.2.0.1 из официального файла Docker . Насколько я вижу, если я делаю

docker stop <container_id>

текущее состояние базы данных потеряно, и в следующий раз она выполнит какой-то чистый запуск.

Как правильно завершить работу базы данных и остановить контейнер, но сохранить текущее состояние?

Если я сделаю

./sqlplus sys as sysdba
SHUTDOWN IMMEDIATE

контейнер продолжает работать и по-прежнему потребляет 11 ГБ из 16 ГБ ОЗУ, поэтому, насколько я догадываюсь, чтобы остановить контейнер, я, вероятно, должен завершить какой-то процесс, но неясно, когда мне делать

docker commit <container_id>

так что в идеале мне нужно что-то вроде shutdown_oracle_and_commit_container.sh.

Внутри docker-контейнера экземпляр oracle запускается с помощью runOracle.sh, но нет stopOracle.sh

1 Ответ

4 голосов
/ 14 марта 2019

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

Из документов :

-v / opt / oracle / oradata

Том данных, используемый для базы данных.

Должен быть доступен для записи пользователю "oracle" (uid: 54321) из Unix внутри контейнера!

Если опущено, база данных не будет сохраняться при восстановлении контейнера.

Итак, согласно этому прогону:

docker run -v /path/to/your/datastore/:/opt/oracle/oradata oracle/database

Данные из вашей базы данных теперь хранятся вне контейнера. Если вы используете docker stop <container_id> или даже docker rm <container_id> и повторно создаете контейнер, ваши данные будут такими же. Для получения дополнительной информации и параметров конфигурации см. документы .

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