1. 抛出问题
前面我们用docker搭了一个oracle服务,
但是突然间想到了一个问题,如果把容器删除了,那新建的表空间,用户,表,等等的信息就一并消失了,我这里只是刚刚搭建,完全可以推倒重来,但是如多已经是在线跑了好久的数据库来说,简直是灾难啊,因为你的数据都随着容器的消失而消失.
2. 解决方法
虽然运行中的容器也可以进行动态进行关联volume,但是个人目前还没掌握,所以有需要的可以自行搜索
启动容器时,通过docker的volume使宿主机的目录与容器的目录进行关联.
1)创建本地目录
sudo mkdir -p -m 755 db/oracle
这里需要注意的是,创建之后需要将目录及其子文件的uid
及gid
改为docker容器中的安装oracle的用户的uid及
gid`否则关联后,在容器中是所属与root的.
sudo chown -R 440:200 db/oracle
2)拷贝数据库文件
将容器中,/opt/oracle/app
目录拷贝到上面创建的目录中.
# linux命令下
sudo docker cp oracle11g:/opt/oracle/app /home/shuu/db/oracle/
文件很大5.4G,我这里还只是一个新的环境,拷贝之前请断开所有与数据库的连接.
在关掉容器之前我还特意解锁了scott用户,并且在emp表中添加了数据.
alter user scott account unlock;
alter user scott identified by tiger;
INSERT INTO SCOTT.EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO) VALUES
(1,'test','CLERK',666,TIMESTAMP '1982-01-23 00:00:00.000000',66,6,10)
;
3)退出,关闭,并删除容器
# 退出oracle用户
exit
# 退出容器
exit