安装Docker Oracle 11g镜像
硬件配置: 1台CentOS 8服务器
安装
在服务器上安装SSH Server,客户机SSH登录到服务器上后,安装Docker。拉取Oracle 11g的配置镜像, 仓库地址。
从Oracle官网下下载11g版本的安装包,下载页,下载
- linux.x64_11gR2_database_1of2.zip
- linux.x64_11gR2_database_2of2.zip
两个压缩包。按顺序解压到用户目录下
1 | cd ~ |
产生database/文件夹。
指定
install_folder为包含database的目录,如/home/userlocal_dpdump为包含恢复文件的目录
运行
1 | docker run --privileged --name oracle11g -p 1521:1521 -v <install_folder>:/install -v <local_dpdump>:/opt/oracle/dpdump jaspeen/oracle-11g |
从jaspeen/oracle-11g镜像启动一个容器,安装一份Oracle数据库到容器中。安装过程需要需要一定时间,安装无误之后,数据库会自行启动。
最好保存此时的容器状态(安装数据库之后的容器)作为一个新的Image,方便以后如果要重新创建数据库时,可以直接从此镜像创建容器,不需要再次等待安装,oracle-installed镜像大小约为6G。
docker commit oracle11g oracle11g-installed
进入容器中,用sqlplus登录数据库配置用户和创建新的Service,
1 | docker exec -it oracle11g /bin/bash |
创建名称为’xl’的Service之后,启动Service
1 | BEGIN |
恢复备份
恢复备份文件到容器数据库
1 | imp <username>/<password>@127.0.0.1/xl file=/opt/oracle/dpdump/20211223.dmp full=y |
恢复过程中出现了问题:中文会显示乱码,VARCHAR类型字段显示长度超限。原因是数据库的字符集和备份文件的字符集不符合,需要修改数据库字符集为GBK。
这里不推荐使用GBK字符集,Linux Oracle默认的
AL32UTF8UTF-8字符集即可,可以正常显示多国文字。遇到GBK字符集多数 情况下,是因为备份文件是在一台安装了简体中文的系统的Windows机器上生成。
1 | select * from nls_database_parameters; |
确认NLS_CHARACTERSET的值,如果不是ZHS16GBK,则修改为ZHS16GBK。
Log in to database as DBA
1 | SHUTDOWN IMMEDIATE; |
重启数据库容器
1 | docker restart oracle11g |
注意重启后xl Service不会自动启动,需要sqlplus登录数据库手动启动。
重置用户数据
如果.dmp文件恢复中失败,往数据库中写入了不正确的数据,那么我们希望在下次导入前数据库再次清空。遗憾的是Oracle 11g并没有提供清除用户下的全部对象功能。最方便的办法是删除用户然后重新创建。
1 | DROP USER <username> CASCADE; |
提供CASCADE参数以删除该用户Schema下的全部对象,如果该用户有未关闭的Session,DROP是无法成功的,docker restart oracle11g重启数据库即可断开全部连接。