我从official dockerfile运行Oracle Database 12.2.0.1。据我所知
docker stop <container_id>
数据库的当前状态丢失,下次它将重新启动。
如何正确关闭数据库并停止容器,但保存当前状态?
如果我愿意
./sqlplus sys as sysdba
SHUTDOWN IMMEDIATE
容器仍在运行,并且仍消耗11GB的16GB RAM,因此,据我估计,要停止容器,我可能应该终止某些进程,但尚不清楚何时应该执行该操作
docker commit <container_id>
所以理想情况下,我需要像shutdown_oracle_and_commit_container.sh这样的东西。
在docker容器中,oracle实例以runOracle.sh启动,但没有stopOracle.sh
答案 0 :(得分:4)
您应该使用泊坞窗volume将来自数据库的数据存储在容器之外。因此,请使用-v
选项,并将您想要存储数据的任何路径装入容器内的/opt/oracle/oradata
。
来自docs:
-v / opt / oracle / oradata
用于数据库的数据量。
容器中的Unix“ oracle”(uid:54321)用户必须可以写!
如果省略,数据库将不会通过容器重新创建而保留。
因此,根据该运行:
docker run -v /path/to/your/datastore/:/opt/oracle/oradata oracle/database
数据库中的数据现在存储在容器外部。如果您使用docker stop <container_id>
或什至docker rm <container_id>
并再次重新创建容器,则数据将相同。有关更多信息和配置参数,请参见docs。
答案 1 :(得分:0)
要关闭 docker 容器内的数据库,首先
docker exec -it <name> /bin/bash
如果你使用默认名称,
sqlplus /nolog
conn sys/***@<db> as sysdba
就我而言,
shutdown immediate
就是这样。