昨天使用docker安装oracle11g的时候遇到了不少坑,所以打算记录一下安装过程。
1.拉取oracle11g镜像
docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
下载完成后查看镜像
2.创建oracle临时容器
docker run -d -p 1521:1521 --name oracle11g registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
这里会报一个启动失败,docker的状态是Exited 139。解决办法是在%userprofile%文件夹下创建一个.wslconfig文件。
文件内容
[wsl2]
kernelCommandLine = vsyscall=emulate
创建好之后在命令窗口执行命令重启一下wsl。
wsl --shutdown
wsl -l
3.复制关键文件到宿主机
docker cp oracle11g:/home/oracle/app/oracle/oradata "E:\program files\oracle"
复制完成后,删除临时容器oracle11g。
4.重新创建oracle容器并挂载本地卷
docker run -d --name oracle11g -p 1521:1521 --privileged=true -v "E:/program files/oracle":/home/oracle/app/oracle/oradata registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g:latest
–name:容器名称
-p:端口号 1531:1521 把容器内的端口1521 映射到本地机器1531上
–privileged=true 设置权限
-v:用于挂在本地卷(卷有多种,此处不详述),本地目录:容器内目录。
5.配置数据库
首先进入容器中。
docker exec -it oracle11g bash
切换到root用户,密码helowin。
su root
然后编辑/home/oracle/.bashrc文件配置oracle的环境变量。
vi /home/oracle/.bashrc
在文件的结尾加上这三行。
export ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_2
export ORACLE_SID=helowin
export PATH=$ORACLE_HOME/bin:$PATH
使环境变量生效。
source /home/oracle/.bashrc
6.连接数据库
创建软连接。
ln -s $ORACLE_HOME/bin/sqlplus /usr/bin
切换回oracle用户。
su oracle
连接数据库并修改用户的密码。
sqlplus /nolog
conn /as sysdba
alter user system identified by system;
alter user sys identified by sys;
alter user scott account unlock;
alter user scott identified by tiger;
在这一步的时候我遇到了一个问题,执行修改密码命令的时候数据库并没有启动。但是使用alert database mount;报ORA-00214: control file ‘/home/oracle/app/oracle/oradata/helowin/control01.ctl’
version 1416 inconsistent with file
‘/home/oracle/app/oracle/flash_recovery_area/helowin/control02.ctl’ version 841
解决方法是将控制文件复制到报错中指定的目录下。
cp /home/oracle/app/oracle/flash_recovery_area/helowin/control02.ctl /home/oracle/app/oracle/flash_recovery_area/helowin/control02_bak.ctl
cp /home/oracle/app/oracle/oradata/helowin/control01.ctl /home/oracle/app/oracle/flash_recovery_area/helowin/control02.ctl
然后就可以启动数据库修改密码了。
alter database mount;
alter database open;
此时数据库就可以通过宿主机的navicat进行访问了。
7.导入数据
将dmp文件复制到oracle的容器内。
docker cp "E:\app\oracleData\daochu.dmp" oracle11g:/home/oracle/
然后就可以在oracle容器内正常进行数据库导入操作了。