背景:Oralce运行在Docker中,当删除容器后,数据库的数据将会丢失,本篇将介绍如何将oracle的数据文件持久化保存在宿主机的文件目录下
宿主机创建目录
mkdir -p /data/oracle/oradata/
运行docker(此docker并没有持久化)
docker run -d -p 1521:1521 --name oracle11g harbor.supcon.com/database/oracle11204:oracle11g
获取该docker数据文件路径
select name from v$datafile;
SYS@LHR11G> select name from v$datafile;
NAME
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
/u01/app/oracle/oradata/LHR11G/system01.dbf
/u01/app/oracle/oradata/LHR11G/sysaux01.dbf
/u01/app/oracle/oradata/LHR11G/undotbs01.dbf
/u01/app/oracle/oradata/LHR11G/users01.dbf
/u01/app/oracle/oradata/LHR11G/example01.dbf
在宿主机下执行以下命令,将数据文件拷贝到宿主机的目录下
docker cp oracle11g:/u01/app/oracle/oradata/LHR11G/ /data/oracle/oradata/
删除容器
(由于如果控制文件与数据文件在同一个目录中,则需要将控制文件提前备份到宿主机中)
docker stop oracle11g
docker rm oracle11g
重新建立容器,并制定文件目录映射
docker run -d -p 1522:1521 --name oracle11g -v /data/oracle/oradata/LHR11G:/u01/app/oracle/oradata harbor.supcon.com/database/oracle_11g:oracle11g
进入容器,赋权
chown -R oracle:oinstall /data/oracle/oradata/LHR11G
制定一个控制文件
alter system set control_files='/u01/app/oracle/oradata/LHR11G/control01.ctl' scope=spfile;
启动
SYS@LHR11G> startup
ORACLE instance started.
Total System Global Area 325685248 bytes
Fixed Size 2252944 bytes
Variable Size 184553328 bytes
Database Buffers 134217728 bytes
Redo Buffers 4661248 bytes
Database mounted.
Database opened.