使用docker运行orcale xe 11g

使用docker运行orcale xe 11g

2022-10-18
technology
docker, oracle

注意: 根据自己实际情况, 替换下面名利中的<var>变量.

启动orcale xe 11g容器 #

Oracle Database XE是人人都可免费使用的 Oracle 数据库. Oracle Database XE 支持最高:

  • 最多 12 GB 的用户磁盘数据
  • 最大 2 GB 的数据库 RAM
  • 最多 2 个 CPU 线程

产品介绍地址: https://www.oracle.com/cn/database/technologies/appdev/xe.html

Oracle Database XE支持容器化部署, 镜像项目地址(这里面也有详细使用文档): https://hub.docker.com/r/oracleinanutshell/oracle-xe-11g

docker run -d \
  --name=oracle-xe-11g \
  --restart=always \
  -p 31521:1521 \
  -p 38080:8080 \
  -v /data/oracle_data:/opt/oracle/oracle_data:rw \
  oracleinanutshell/oracle-xe-11g

该镜像的默认登录信息是:

hostname: localhost
port: 31521
sid: xe
username: system 或者 sys
password: oracle

使用了主机的/data/oracle_data目录作为数据持久化目录.

创建表空间和用户 #

  1. 进入容器
docker exec -it oracle-xe-11g bash
  1. 创建表空间

切换到oracle用户

su oracle

以管理员身份登录数据库, 两个系统账号 system/sys 密码默认都是 oracle

sqlplus system/oracle as sysdba

创建表空间

create tablespace <tablespace-name> logging datafile '/opt/oracle/oracle_data/<tablespace-name>.dbf' size 200m autoextend on next 100m maxsize unlimited;
  1. 创建用户并分配权限

创建和业务相关的用户, 并赋予相关权限.

create user <user-name> identified by <user-password> default tablespace <tablespace-name>;

角色授权

grant connect,resource,dba to <user-name>;

修改字符集 #

一般来说,初装之后数据库字符集都是AMERICAN_AMERICA.AL32UTF8, 有些数据库要求使用特定字符集, 比如需要修改成ZHS16GBK, 先查询现在的字符集:

select userenv('language') from dual;

参考上述步骤, 先以管理员身份登录oracle数据库, 执行变更:

shutdown immediate;
startup mount;
alter system enable restricted session;
alter system set job_queue_processes=0;
alter system set aq_tm_processes=0;
alter database open;
alter database character set internal_use ZHS16GBK;
shutdown immediate;
startup;

最后执行命令检查字符集是否修改完成.

参考文档: https://www.cnblogs.com/geekdc/p/5817306.html

导入dmp文件 #

很多使用, 我们需要从dmp文件导入oracle数据库, 参考上面步骤, 进入oracle-xe-11g容器, 切换到 oracle 用户执行下面命令, 把数据和结构一起导入. 先将dmp文件放到主机目录/data/oracle_data/imp/example.dmp中, 这样映射到容器中需要导入的数据目录为: /opt/oracle/oracle_data/imp/example.dmp, 执行导入:

imp <user-name>/<user-password> file=/opt/oracle/oracle_data/dmp/example.dmp full=y;

修改管理员账号密码 #

为了安全, 我们可能需要修改管理员账号的密码, 可以使用管理员免密登录:

sqlplus /nolog;
conn /as sysdba;

查看用户列表:

select username from dba_users;

修改密码:

alter user sys identified by <new-password>;
alter user system identified by <new-password>;

system是数据库内置的一个普通管理员, 手工创建的任何用户在被授予dba角色后都跟这个用户差不多. sys是数据库的超级用户, 数据库内很多重要的东西(数据字典表、内置包、静态数据字典视图等)都属于这个用户, sys用户必须以sysdba身份登录.

登录信息 #

好了! 现在可以登录了, 登录信息:

host: <host-ip>
port: 31521
user: <user-name>
password: <user-password>
sid: xe