Docker 安装 Oracle 11g 数据库

前言

Docker 镜像说明

本文使用了 DockerHub 平台上的 Oracle 11g 镜像,基于 Ubuntu 18.04 LTS 系统,数据库版本是 Oracle Express Edition 11g Release 2 (11.2.0.2.0)。

Oracle 各版本介绍

在 Oracle 数据库的发展中,数据库一直处于不断升级状态,一共有以下几个版本:

  • Oracle 8i:Oracle 8i 表示 Oracle 正式向 Internet 上发展,其中 i 表示就是 internet。
  • Oracle 9i:Oracle 8i 是一个过渡版本,Oracle 9i 是一个更加完善的数据库版本。
  • Oracle 10g:g 表示 grid,代表网格的意思,即这种数据库采用网格计算的方式进行操作。
  • Oracle 11g:是 Oracle 10g 的稳定版本,Oracle 11g 是目前使用最广泛的版本。
  • Oracle 12c:是 Oracle 2013 年推出的数据库版本,c 代表 Cloud,代表云计算的意思,同时 Oracle 12c 支持大数据的处理能力。
  • Oracle 18c、Oracle 19c 是对 12c 版本的完善和发展。

快速开始

Docker 镜像拉取

1
# docker pull oracleinanutshell/oracle-xe-11g

Docker 启动容器

  • 启动容器
1
# docker run -d -p 1521:1521 --name oracle-11g oracleinanutshell/oracle-xe-11g
  • 允许远程连接
1
# docker run -d -p 1521:1521 --name oracle-11g -e ORACLE_ALLOW_REMOTE=true oracleinanutshell/oracle-xe-11g
  • 出于性能考虑,启动容器时可能需要禁用磁盘异步 IO
1
# docker run -d -p 1521:1521 --name oracle-11g -e ORACLE_DISABLE_ASYNCH_IO=true oracleinanutshell/oracle-xe-11g
  • 使用默认密码启用 XDB 用户(xdb
1
# docker run -d -p 1521:1521 --name oracle-11g -e ORACLE_ENABLE_XDB=true oracleinanutshell/oracle-xe-11g
  • 启动 APEX 用户
1
# docker run -d -p 1521:1521 --name oracle-11g -p 8080:8080 oracleinanutshell/oracle-xe-11g
1
2
3
# 浏览器访问 http://localhost:8080/apex/apex_admin 后,可以使用以下账号登录
username: ADMIN
password: admin

对于最新的 APEX(18.1)用户,请先拉取 oracleinanutshell/oracle-xe-11g:18.04-apex 镜像

1
# docker run -d -p 1521:1521 --name oracle-11g -p 8080:8080 oracleinanutshell/oracle-xe-11g:18.04-apex
1
2
3
# 浏览器访问 http://localhost:8080/apex/apex_admin 后,可以使用以下账号登录
username: ADMIN
password: Oracle_11g

Docker-Compose 启动容器

1
2
3
4
5
6
7
8
version: '3'

services:
oracle-db:
image: oracleinanutshell/oracle-xe-11g:latest
ports:
- 1521:1521
- 8080:8080

Oracle 连接密码

默认情况下,密码验证是禁用的(密码永不过期),可以使用以下配置信息连接 Oracle 数据库

1
2
3
4
5
hostname: localhost
port: 1521
sid: xe
username: system
password: oracle

提示

SYSSYSTEM 用户的默认密码都是 oracle

Oracle 连接测试

  • 连接 Docker 容器
1
# docker exec -it oracle-11g /bin/bash
  • 切换到 SQLPlus 进行操作
1
# sqlplus /nolog
  • 连接 Oracle 11g 数据库
1
2
3
4
5
# 连接Oracle数据库
SQL> conn system/oracle

# 查看Oracle的版本信息
SQL> SELECT BANNER FROM V$VERSION;
  • 创建表和插入测试数据
1
2
3
4
5
6
7
8
9
10
11
-- 创建表
CREATE TABLE t_employee(id number(11) primary key, last_name varchar(255) DEFAULT NULL, gender char(1) DEFAULT NULL, email varchar(255) DEFAULT NULL, age number DEFAULT NULL);

-- 插入数据
insert into t_employee(id, last_name, gender, email, age) values(1, 'Jim','1', 'jim@gmail.com', 26);
insert into t_employee(id, last_name, gender, email, age) values(2, 'Peter','1', 'peter@gmail.com', 29);
insert into t_employee(id, last_name, gender, email, age) values(3, 'David','1', 'david@gmail.com', 28);
insert into t_employee(id, last_name, gender, email, age) values(4, 'Tom','1', 'tom@gmail.com', 25);

-- 查询数据
select * from t_employee;

Java 连接 Oracel 数据库

下载 Oracle 驱动包

由于 Oracle 授权的问题,无法从 Maven 中央仓库下载 Oracle 的数据库驱动包,Oracle 11g 的数据库驱动包可以 点击这里 下载得到。

Maven 引入 Oracle 驱动包

将 Oralce 数据库驱动包存放到项目中的 lib 目录下,然后使用以下方式让 Maven 引入驱动包依赖。当然也可以使用其他方式引入,例如直接使用 Maven 命令 mvn install 将驱动包安装到本地仓库,接着按照平时的方式直接引入驱动包依赖即可,这里不再累述。

1
2
3
4
5
6
7
<dependency>
<groupId>oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.2.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/ojdbc6.jar</systemPath>
</dependency>

配置 Oracle 的 JDBC 连接信息

1
2
3
4
driver-class-name=oracle.jdbc.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:xe
username=system
password=oracle

提示

更多关于 Java 连接 Oracle 数据库的教程内容,可以查看教程 《MyBatis-Plus 中 如何生成 Oralce 的主键》