背景
公司用的数据库是oracle,家里装的是mysql,start with递归查询的sql只能用oracle处理,所以需要再装一个oracle,docker肯定是最方便的。
环境信息
- 系统:Debian 10
- docker:最新版。官方脚本(curl -sSL https://get.docker.com/ | sh)
docker-compose
为了方便这里用docker-compose。考虑用sudo -i切到root用户会方便很多
1 | version: "3" |
一些解释
把端口重新映射到15210是为了减少一些密码爆破
这里只能用命名卷进行挂载,挂载点会报错
可能的报错
cp: cannot stat ‘/u01/app/oracle/product/11.2.0/xe/network/admin/listener.ora.tmpl’: No such file or directory
docker主要有两种挂载方式,命名卷和挂载点,内部实现不同,如果是这个报错说明你可能是用的挂载点这种卷使用方式,改成上面yml里的命名卷就行。根因的话,需要深入研究两种挂载方式的实现原理。
连接说明
- database(serviceName)是XE
- 初始用户名密码是system/oracle
修改密码
初始用户名密码是system/oracle,最好是需要改一下的。另密码貌似只能字母数字,常用的特殊字符都不行,解释。
1 | # 找到oracle镜像id |
数据备份与恢复
备份
- 这里要备份的docker卷一般在/var/lib/docker/volumes/目录下,而且卷名称可能和你在yml里命名不一样,可以看下日志看看具体名称,需要自己判别一下。
- 备份的时候容器需要关掉
- 如果cpu很烂就仅打包不压缩
- docker volume相关命令可以看卷信息
1 | # 打包并压缩 |
恢复
- 运行相同的compose配置文件
- 将备份文件解压覆盖新的卷
1 | # 解包解压缩 |