Ubuntu通过Docker安装Oracle 12c并配置DBeaver连接

目录

出于测试和学习的目的,最近想在Ubuntu Linux上安装oracle server端并在windows上通过客户端连接使用。发现可通过Docker快速安装和配置,这里以12c版本为例记录一下我的安装配置过程。

拉取镜像

假定docker已安装,镜像源已配置。
这里为省事就直接用了第三方镜像(若用oracle官方镜像需要先注册,会稍麻烦一些,参考这篇文章

docker pull truevoly/oracle-12c

这个第三方镜像相关说明可参考github页面 下载好后可运行 docker image ls 确认大小,运行 docker inspect truevoly/oracle-12c 查看imager详情

运行容器

# create local folder for mapping
mkdir -p /home/user_name/app/oracle
chmod 777 /home/user_name/app/oracle

# start container
docker run -d --name oracle-12c \
	-p 9090:8080 -p 1521:1521 \
	-v /home/user_name/app/oracle:/u01/app/oracle/ \
	 truevoly/oracle-12c

Note:上面的p选项和v选项分别用于配置host机到容器的端口(port) 和 文件目录/卷 (volume)映射,port选项为了端口转发,volume选项为了数据共享和持久化

启动后运行命令 docker logs oracle-12c 可查看日志,日志中出现 Database ready to use. Enjoy! ;) 说明一切就绪,可以开始下一步

更新配置和创建用户

根据上述github页面说明,容器运行成功之后会有预设的超级用户system和sys,密码均为oracle,其中sys可以sysdba方式连接(sqlplus sys/oracle as sysdba

进入容器,将 $ORACLE_HOME/bin 加入环境变量,让运行sqlplus更方便

# enter container
docker exec -it oracle-12c /bin/bash

# add env vairable
echo "export PATH=$PATH:$ORACLE_HOME/bin"  >>  ~/.bashrc
source  ~/.bashrc

创建户名 ora_user 并分配权限

# enter sqlplus
sqlplus system/oracle

# or connect as sysdba
# sqlplus sys/oracle as sysdba

SQL> ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
SQL> CREATE USER ora_user IDENTIFIED BY ora_user;
SQL> GRANT ALL PRIVILEGES TO ora_user;

客户端连接

以DBeaver为例,用普通用户ora_user进行连接:

创建表空间并执行SQL

在DBeaver中执行SQL创建表空间

-- Create tablespace, default path is $ORACLE_HOME/dbs
CREATE TABLESPACE ORA_USER_DATA
DATAFILE 'ora_user_data_01.dbf' SIZE 100M AUTOEXTEND ON
NEXT 10M MAXSIZE 1G;

ALTER USER ora_user DEFAULT TABLESPACE ORA_USER_DATA;


创建Table,然后插入测试数,进行查询:

CREATE TABLE students (
    student_id NUMBER(10) PRIMARY KEY,
    first_name VARCHAR2(50),
    last_name VARCHAR2(50),
    birth_date DATE,
    enrollment_date DATE DEFAULT SYSDATE
);

INSERT INTO students (student_id, first_name, last_name, birth_date, enrollment_date)
    VALUES (1, 'Terry', 'Zhang', TO_DATE('2001-01-01', 'YYYY-MM-DD'), TO_DATE('20250801', 'YYYYMMDD'));

SELECT * FROM students; 

至此本地ORACLE测试环境准备完毕, 后续可以按需进行更多操作。

附 - 相关命令- 关闭和重启容器/ORACLE服务

#### stop and start container
# docker container ls -as
docker container stop oracle-12c
docker container start oracle-12c

#### just stop lister
# stop listener
docker exec -it oracle-12c /bin/bash
lsnrctl status
lsnrctl stop

#### just stop oracle instance
# stop service
sqlplus sys/oracle as sysdba

# shut down service
SQL> shutdown immediate;

# start service
SQL> startup;

Note:

  • oracle在未启动状态时,可通过sqlplus sys/oracle as sysdba连接,或切换到oracle用户后通过sqlplus / as sysdba连接
  • 以上示例为 Standard Edtion,存在一些功能限制,若想安装完整版本,可安装 Enterprise Edition

参考链接