oracle-install

README #

镜像官网与文档 #

网页地址: https://container-registry.oracle.com/ords/ocr/ba/database

进入 Oracle Database Free 项目。

docker-compose.yml:

yml
version: "3.7"
services:
  oracle:
    image: container-registry.oracle.com/database/free:23.3.0.0
    container_name: oracle-free
    restart: on-failure
    volumes:
      - oracle_data:/opt/oracle/oradata
    ports:
      - 1234:1521
volumes:
  oracle_data:
    external: true

docker run:

bash
docker volume create oracle_data
docker compose up -d

sqlplus命令 #

1) 执行sqlplus交互式命令:

bash
docker compose exec oracle sqlplus

2)输入账号密码:

text
Enter user-name: sys as sysdba
Enter password:

3)登录后可执行sql语句和维护指令。

sqlplus运维 #

限制内存使用(需要重启):

sql
-- 查看当前配置的 sga_target 和 sga_max_size 大小
SELECT NAME, VALUE, DISPLAY_VALUE, DESCRIPTION FROM V$PARAMETER WHERE NAME IN ('sga_target', 'sga_max_size');

-- 设置 sga_target 和 sga_max_size,保存到spfile配置文件,重启后才会生效。
-- 若设置太小则可能会导致服务无法启动(目前已知 256m 不行),若遇到服务无法启动,参考后面解决办法。
alter system set sga_target=512m scope=spfile;
alter system set sga_max_size=512m scope=spfile;

创建用户:

sql
alter session set "_ORACLE_SCRIPT" = true;
create user yourname identified by "yourpassword";

删除用户:

sql
drop user yourname cascade;

授权:

sql
grant connect, resource, create any view, dba to yourname;
alter user yourname default role connect, resource, dba;

登录用户:

sql
connect yourname;

sga内存设置太小导致无法启动 #

1)停止oracle容器(防止无限重启):

bash
docker compose stop oracle

2)进入新的oracle容器:

bash
# 使用 --volumes-from 参数将指定oracle服务容器中的数据卷挂载过来
# 使用 --env-file 参数将环境变量文件引入进来)
docker run --rm -it --volumes-from oracle-free --env-file .env container-registry.oracle.com/database/free:23.3.0.0 bash

3)运行sqlplus,登录后执行以下sql指令:

sql
-- 通过spfile二进制配置创建pfile文本配置文件
create pfile='/opt/oracle/oradata/dbconfig/tmp.ora' from spfile;

3)退出sqlplus,然后将pfile配置文件中的 sga_targetsga_max_size 改成合适的大小,比如 536870912(即 512MB):

bash
# 使用 vi 编辑pfile配置文件
vi /opt/oracle/oradata/dbconfig/tmp.ora

4)再次运行sqlplus,登录后执行以下sql指令:

sql
-- 手动指定pfile配置文件来启动oracle服务(启动需要花费数秒钟时间)
startup pfile='/opt/oracle/oradata/dbconfig/tmp.ora';

-- 通过pfile文本配置创建spfile二进制配置文件,覆盖掉原来配置有误的spfile(若上面的启动指令执行失败,则无法创建spfile)
create spfile='/opt/oracle/oradata/dbconfig/FREE/spfileFREE.ora' from pfile='/opt/oracle/oradata/dbconfig/tmp.ora';

-- 关闭oracle服务
shutdown;

-- 直接启动服务来验证spfile配置是否有误,若可以正常启动,则关闭服务然后退出sqlplus
startup;
shutdown;

5)删除pfile文件,然后退出容器:

bash
rm /opt/oracle/oradata/dbconfig/tmp.ora

6)启动oracle服务:

bash
docker compose start oracle

imp导入数据 #

导入 dmp 格式的文件:

1)dmp 文件放到 /opt/oracle/export/ 目录下。

2)执行导入命令(交互式):docker compose exec oracle imp

3)输入用户名,例如:camp5s

4)输入密码。

5)开始配置各种选项:

5.1)Import file 这一项填写文件路径,例如:/export/camp_202412.dmp (其中 /export 是容器内目录,映射到容器外部目录 /opt/oracle/export

5.2)Username 这一项填写来源用户,例如:usr_camp

5.3)其他选项全部回车默认。

2025年8月21日