Sign inSign up

caixb/oracle

By caixb

Updated 11 months ago

📦Oracle 提供的轻量免费版本,专为开发人员、学生和小型项目设计。

Image
Databases & storage
1

1.4K

caixb/oracle repository overview

镜像使用说明

XE (Express Edition) 是 Oracle 10g/11g 的免费简化版,XE 版本有内存和使用限制,主要用于开发和测试环境。

📌 11.2.0.2.0

1.拉取镜像

docker pull caixb/oracle:11.2.0.2.0

2.启动镜像

docker run -d --name oracle-server-11.2.0.2.0 -p 22:22 -p 1521:1521 caixb/oracle:11.2.0.2.0

3.服务信息

hostname: localhost or docker machine ip
port: 1521
sid: xe
username: system
password: oracle
Password for SYS & SYSTEM is oracle
Password for fareuser, searchuser, bookinguser, checkinuser is rohit123

4.使用 SSH 登录 Oracle 服务容器

$ ssh root@<docker_machine_ip> -p 22

📑 password: admin

4.1.通过 sqlplus 连接 Oracle 服务
# 缺省命令,根据提示输入
sqlplus

# 或
sqlplus system/oracle@localhost:1521

若出现下述提示信息,则修改密码。

ERROR: ORA-28002: the password will expire within 7 days

ALTER USER system IDENTIFIED BY CjaPmyzu;
ALTER USER sys IDENTIFIED BY CjaPmyzu;
4.2.删除多余用户及相关用户表空间

删除 fareuser, searchuser, bookinguser, checkinuser 四个用户。

-- 删除用户及其所有对象(CASCADE选项会删除用户的所有对象)
DROP USER fareuser CASCADE;
DROP USER searchuser CASCADE;
DROP USER bookinguser CASCADE;
DROP USER checkinuser CASCADE;
4.3.清理相关对象
-- 检查是否还有残留的表空间文件(如果需要完全清理)
SELECT file_name, tablespace_name, bytes/1024/1024 as size_mb
FROM dba_data_files
WHERE tablespace_name LIKE '%FARE%' OR tablespace_name LIKE '%SEARCH%' 
   OR tablespace_name LIKE '%BOOK%' OR tablespace_name LIKE '%CHECK%';
-- 如果需要删除相关表空间
DROP TABLESPACE TBS_CHECKINUSER INCLUDING CONTENTS AND DATAFILES;
DROP TABLESPACE TBS_SEARCHUSER INCLUDING CONTENTS AND DATAFILES;
DROP TABLESPACE TBS_FAREUSER INCLUDING CONTENTS AND DATAFILES;
DROP TABLESPACE TBS_BOOKINGUSER INCLUDING CONTENTS AND DATAFILES;
4.4.确认用户已删除
SELECT username, account_status 
FROM dba_users 
WHERE username IN ('FAREUSER', 'SEARCHUSER', 'BOOKINGUSER', 'CHECKINUSER');

5.宿主机不安装 Oracle 服务端连接教程

5.1.安装 Oracle Instant Client 软件

登录 Oracle 官网下载 Oracle Instant Client,下载地址:https://www.oracle.com/database/technologies/instant-client/downloads.html,下载完成后进行解压缩到任意目录。

5.2.创建 TNS 监听文件

在解压缩后的文件夹下创建 network 目录,新建一个文件 tnsnames.ora,内容如下。

格式:

# 数据库1
别名1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 主机1)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = 服务名1)
    )
  )

# 数据库2  
别名2 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 主机2)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = 服务名2)
    )
  )

案例:

dev=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.127.29)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=orcl)))
test=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=xe)))

说明:

  1. dev 为服务别名,企业版的 Oracle 数据库产品的服务一般为 orcl,而免费版的服务别名一般为 XE
  2. 127.0.0.1 为 ip 地址
  3. 1521 为服务的端口
5.3.配置系统变量

仅针对 Window 系统,按住 Win + R 键,输入 sysdm.cpl,选择 高级 ➡️ 系统变量,添加以下系统变量。

TNS_ADMIN:值为 tnsnames.ora 文件所在目录
5.4.安装 PL/SQL Developer 软件
  1. 首次打开会弹出小窗口让你填连接信息,直接 ✖️ 掉,会以 未登录 状态进入软件,在工具栏中找到 首选项

  2. 找到 连接 菜单,填写 Oracle主目录,输入你的 Oracle Instant Client 目录全路径,比如:D:\protable\oracle_instant_client_11.2.0.4.0

  3. 同样的,填写 OCI 库,输入你的 oci 库文件全路径,比如:D:\protable\oracle_instant_client_11.2.0.4.0\oci.dll

  4. 保存,关闭 PL/SQL Developer 软件,重启打开,主机名就会出现在PL/SQL Developer的列表里,输入用户名密码,就可以登录远程oracle 数据库。

5.5.解决 PL/SQL Developer 查询数据出现中文乱码问题
select userenv('language') from dual;

查询的结果:AMERICAN_AMERICA.ZHS16GBK,则配置系统环境变量。

NLS_LANG: AMERICAN_AMERICA.ZHS16GBK

6.创建新用户

 请先使用 sqlplus 使用 system 或 sys 账号连接 oracle 服务。
6.1.登录 Oracle 服务
-- 使用 SYSTEM 或 SYS 用户连接
sqlplus system/oracle@localhost:1521/xe

-- 或者使用 SYS 用户(需要以 SYSDBA 身份连接)
sqlplus sys/oracle@localhost:1521/xe as sysdba

-- 或者缺省,本地连接(推荐,权限更高)
sqlplus sys/password as sysdba
6.2.基本用户创建
-- 创建最简单的用户
CREATE USER dev_user IDENTIFIED BY dev_password;

-- 创建用户并指定默认表空间
CREATE USER app_user IDENTIFIED BY app_password
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp;

-- 创建用户并设置配额
CREATE USER report_user IDENTIFIED BY report_password
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp
QUOTA 100M ON users;
6.3.完整的用户创建模板
-- 完整用户创建示例
CREATE USER airline_app IDENTIFIED BY "Airline@2025"
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp
QUOTA 500M ON users
QUOTA 100M ON temp
PROFILE default
ACCOUNT UNLOCK
PASSWORD EXPIRE;

-- 立即解锁账户(如果创建时锁定了)
ALTER USER airline_app ACCOUNT UNLOCK;
6.4.为用户授权
6.4.1.基本权限授予
-- 授予连接权限
GRANT CREATE SESSION TO airline_app;

-- 授予资源权限(创建表、序列等)
GRANT CONNECT, RESOURCE TO airline_app;

-- 授予特定对象权限
GRANT SELECT, INSERT, UPDATE, DELETE ON system.customers TO airline_app;

-- 授予系统权限
GRANT CREATE TABLE, CREATE VIEW, CREATE SEQUENCE TO airline_app;
6.4.2.角色权限管理
-- 创建自定义角色
CREATE ROLE airline_developer;
CREATE ROLE airline_readonly;

-- 为角色授予权限
GRANT SELECT ANY TABLE, CREATE SESSION TO airline_readonly;
GRANT CONNECT, RESOURCE, CREATE VIEW TO airline_developer;

-- 将角色授予用户
GRANT airline_developer TO airline_app;

-- 查看用户权限
SELECT * FROM user_role_privs WHERE username = 'AIRLINE_APP';
SELECT * FROM user_sys_privs WHERE username = 'AIRLINE_APP';
6.5.开发人员权限用户创建案例
6.5.1.创建用户
-- 创建开发用户
CREATE USER JSGBJD IDENTIFIED BY "gbjd123"
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp
QUOTA 500M ON users
PROFILE default
ACCOUNT UNLOCK
PASSWORD EXPIRE;

-- 立即解锁并设置密码(如果创建时锁定了)
ALTER USER JSGBJD ACCOUNT UNLOCK;
6.5.2.创建开发角色
-- 创建开发角色
CREATE ROLE dev_role;

-- 授予基本的会话权限
GRANT CREATE SESSION TO dev_role;

-- 授予对象创建权限
GRANT CREATE TABLE, CREATE VIEW, CREATE SEQUENCE, CREATE PROCEDURE, CREATE TRIGGER, CREATE TYPE, CREATE SYNONYM TO dev_role;

-- 授予对象管理权限
GRANT ALTER ANY TABLE, DROP ANY TABLE TO dev_role;
GRANT ALTER ANY SEQUENCE, DROP ANY SEQUENCE TO dev_role;
GRANT ALTER ANY PROCEDURE, DROP ANY PROCEDURE TO dev_role;

-- 授予数据操作权限
GRANT SELECT ANY TABLE, INSERT ANY TABLE, UPDATE ANY TABLE, DELETE ANY TABLE TO dev_role;

-- 授予调试和性能监控权限
GRANT DEBUG CONNECT SESSION, DEBUG ANY PROCEDURE TO dev_role;
GRANT SELECT ANY DICTIONARY TO dev_role;

-- 授予索引和约束权限
GRANT CREATE ANY INDEX, ALTER ANY INDEX, DROP ANY INDEX TO dev_role;
6.5.3.授予特定开发工具需要的权限
-- 为常见开发工具授予权限
GRANT UNLIMITED TABLESPACE TO dev_role;

-- 授予执行 DBMS 包的权限(需要 sysdba 权限执行)
GRANT EXECUTE ON DBMS_LOCK TO dev_role;
GRANT EXECUTE ON DBMS_OUTPUT TO dev_role;
GRANT EXECUTE ON DBMS_SQL TO dev_role;
GRANT EXECUTE ON DBMS_UTILITY TO dev_role;
GRANT EXECUTE ON UTL_FILE TO dev_role;

-- 授予统计信息权限(用于性能调优)
GRANT ANALYZE ANY TO dev_role;

-- 授予物化视图权限(如果使用)
GRANT CREATE MATERIALIZED VIEW, ALTER ANY MATERIALIZED VIEW, 
      DROP ANY MATERIALIZED VIEW TO dev_role;
6.5.4.将角色授予开发用户
-- 将开发角色授予用户
GRANT dev_role TO JSGBJD;

-- 授予 CONNECT 角色(包含基本权限)
GRANT CONNECT TO JSGBJD;

-- 授予 RESOURCE 角色(包含资源创建权限)
GRANT RESOURCE TO JSGBJD;

-- 设置默认角色
ALTER USER JSGBJD DEFAULT ROLE dev_role, CONNECT, RESOURCE;
6.5.5.创建开发专用的表空间(可选)
 表空间创建失败,可能是因为 Oracle 容器对应目录操作权限没有,请使用 SSH 登录 Oracle 服务容器进行授权。

授予容器创建文件的权限:

chmod -R 777 /opt/oracle/oradata/XE/
-- 为开发环境创建专用表空间
CREATE TABLESPACE dev_data
DATAFILE '/opt/oracle/oradata/XE/dev_data01.dbf'
SIZE 500M
AUTOEXTEND ON NEXT 100M MAXSIZE 2G;

CREATE TEMPORARY TABLESPACE dev_temp
TEMPFILE '/opt/oracle/oradata/XE/dev_temp01.dbf'
SIZE 200M
AUTOEXTEND ON NEXT 50M MAXSIZE 1G;

-- 修改用户使用开发表空间
ALTER USER JSGBJD 
DEFAULT TABLESPACE dev_data
TEMPORARY TABLESPACE dev_temp
QUOTA UNLIMITED ON dev_data;

Tag summary

Content type

Image

Digest

sha256:c2546bdff

Size

1.4 GB

Last updated

11 months ago

docker pull caixb/oracle:11.2.0.2.0