当前位置: 首页 > news >正文

Docker 安装 Oracle 12C

镜像

https://docker.aityp.com/image/docker.io/truevoly/oracle-12c:latest
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/truevoly/oracle-12c:latest
docker tag  swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/truevoly/oracle-12c:latest  docker.io/truevoly/oracle-12c:latest
docker images

创建并启动容器

# 容器内端口默认1521,且通过 -p 参数修改不成功,所以只能修改外部的端口
docker run -itd --name oracle12c --restart=always -p 1522:1521 -e ORACLE_PWD=oracle -v /home/oracle/app/oracle12c/oradata:/home/oracle/app/oracle12c/oradata docker.io/truevoly/oracle-12c:latest

查看日志

docker logs -f --tail 100 oracle12c
Database not initialized. Initializing database.
Starting tnslsnr
Copying database files
1% complete
3% complete
11% complete
18% complete
26% complete
37% complete
Creating and starting Oracle instance
40% complete
45% complete
50% complete
55% complete
56% complete
60% complete
62% complete
Completing Database Creation
66% complete
70% complete
73% complete
85% complete
96% complete
100% complete
Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/xe/xe.log" for further details.
Configuring Apex console
Database initialized. Please visit http://#containeer:8080/em http://#containeer:8080/apex for extra configuration if needed
Starting web management consolePL/SQL procedure successfully completed.Starting import from '/docker-entrypoint-initdb.d':
ls: cannot access /docker-entrypoint-initdb.d/*: No such file or directory
Import finishedDatabase ready to use. Enjoy! ;)

登录到容器内

docker exec -it oracle12c bash

配置环境变量

vi /etc/profile
export ORACLE_HOME=/u01/app/oracle-product/12.1.0/xe
export PATH=$ORACLE_HOME/bin:$PATH
source /etc/profilevi /home/oracle/.bashrc
export ORACLE_HOME=/u01/app/oracle-product/12.1.0/xe
export PATH=$ORACLE_HOME/bin:$PATH
source /home/oracle/.bashrc

登录

# 必须要切到 oracle 用户
su oracle
sqlplus / as sysdba

命令解释:

  • sqlplus / as sysdba : 使用操作系统认证以 SYSDBA 特权用户身份连接到 Oracle 数据库的命令
    • sqlplus:Oracle 提供的命令行工具,用于与数据库交互(SQL*Plus 的缩写)。
    • /:表示使用操作系统认证(OS Authentication),无需显式输入用户名和密码。
    • as sysdba:以 SYSDBA 特权角色连接,拥有最高权限(如启动 / 关闭数据库、创建用户等)。
  • sqlplus sys/oracle as sysdba : 使用用户名密码以 SYSDBA 特权身份连接到 Oracle 数据库 (不过这里用户名密码不管写什么都能连接)
    • sys/oracle:用户名和密码
    • sys:Oracle 数据库的超级管理员用户(拥有最高权限)
    • oracle:默认密码
  • sqlplus /nolog : 启动 SQL*Plus 工具但不立即连接到数据库的命令
  • CONNECT sys/oracle AS SYSDBA :SQL*Plus 中使用用户名密码以 SYSDBA 特权身份连接到 Oracle 数据库的命令。(同样的这里用户名密码不管写什么都能连接)
    • CONNECT:SQL*Plus 内置命令,用于建立或切换数据库连接(可简写为 CONN 或 LOGON)。
  • conn / as sysdba 是 Oracle SQL*Plus 中使用操作系统认证以 SYSDBA 特权身份连接数据库的命令

登录异常

sqlplus / as sysdbaSQL*Plus: Release 12.1.0.2.0 Production on Tue Jun 10 11:32:04 2025Copyright (c) 1982, 2014, Oracle.  All rights reserved.ERROR:
ORA-01017: invalid username/password; logon denied

解决:以oracle用户登录。

启动数据库

SQL> startup
ORACLE instance started.Total System Global Area 1610612736 bytes
Fixed Size                  2924928 bytes
Variable Size            1006636672 bytes
Database Buffers          587202560 bytes
Redo Buffers               13848576 bytes
ORA-01102: cannot mount database in EXCLUSIVE mode

解决 cannot mount database in EXCLUSIVE mode

首先关闭数据库

SHUTDOWN IMMEDIATE;
方法1
su oracle
# 查找共享内存和信号量:
ipcs -m
ipcs -s
# 清理共享内存和信号量:
ipcrm -m <shmid>
ipcrm -s <semid>

参考:https://blog.csdn.net/qq_47502724/article/details/144828940

方法2

和我在之前写的Centos7 安装oracle11 中用的方法一样: 通过 fuser -k 释放占用 lk<SID> 的进程。一般系统自带 fuser 命令,但是我们装的oracle 容器内没有自带,所以需要先安装对应的命令。

sudo apt update
sudo apt install psmisc

需要先联网 update ,再安装 psmisc,联网需要修改 /etc/resolv.conf ,添加 DNS(前提是宿主机也能联网):

nameserver 223.5.5.5
nameserver 10.100.1.12
nameserver 114.114.114.114

在 Docker 容器中使用 vi 编辑文件时, 可能遇到一些体验问题(如方向键乱码、退格键失效等),可通过安装最小化的 vim-tiny

apt-get install -y vim-tiny
ln -s /usr/bin/vim.tiny /usr/bin/vim  # 替换vim为vim-tiny

lk<SID> 在 $ORACLE_HOME/dbs

su oracle
cd $ORACLE_HOME/dbs
fuser -u lkXE
fuser -k lkXE
fuser -u lkXE

查询数据库状态

SELECT status FROM v$instance;STATUS
------------
OPEN

返回值说明:

  • STARTED:实例已启动,但未装载数据库。
  • MOUNTED:实例已装载数据库(ALTER DATABASE MOUNT)。
  • OPEN:数据库正常打开,可读写。
  • OPEN READ ONLY:数据库只读模式。

连接验证

  • SID 和 Service Name 均为 XE
  • 用密码密码: sys/oracle 和 system/oracle
    • sys 用户:具有 “SYSDBA” 或者 “SYSOPER” 系统权限,登录EM(企业管理器)也只能用这两个身份,不能用normal(普通用户)身份。SYSDBA是管理 Oracle 实例的,拥有最高的系统权限,可完成数据库的所有管理任务,如创建数据库、删除数据库、数据库日志归档、执行不完全恢复,以及创建其它的SYSOPER和SYSDBA用户等
    • system 用户:SYSTEM用户:默认拥有普通DBA角色权限,能完成除备份恢复、升级之外的大部分数据库管理任务。但只能用normal身份登录EM,除非对它授予了SYSDBA或SYSOPER系统权限。如果SYSTEM用户以AS SYSDBA登录,其结果实际上是作为SYS用户登录的。

修改密码

alter user system identified by test123;
alter user sys identified by test123;

删除 Docker 容器

docker stop oracle12c
docker rm oracle12c

相关文章:

  • React中修改 state 时必须返回一个新对象 (immutable update)
  • 基于数据库实现配置管理和定时任务启停
  • 常见Modbus协议面试问题
  • 强化微调技术与GRPO算法(1):简介
  • 农田实时监测与管理系统开发
  • map()函数
  • IteraJudge-增量多维评判框架解读
  • 第十节 高频代码题-类型推断题
  • NXP S32K146 T-Box 携手 SDNAND(贴片式 TF 卡):驱动汽车智能革新的黄金组合
  • 接口测试不再难:智能体自动生成 Postman 集合
  • 计算机系统(6)
  • 翻译核心词汇
  • 软考-计算机硬件组成
  • 微信小程序渗透测试指北(附案例)
  • 小结:Spring AOP 切点表达式
  • python-生日悖论
  • OpenCV——图像金字塔
  • std::make_shared简化智能指针 `std::shared_ptr` 的创建过程,并提高性能(减少内存分配次数,提高缓存命中率)
  • 第30节 Node.js C/C++ 插件
  • ARXML可视化转换工具使用说明
  • 谢家华做网站/建站平台如何隐藏技术支持
  • 网站建设 php 企业网站/网页怎么做出来的
  • 自己怎样做网站/品牌宣传策划方案
  • b2b网站做排名是什么意思/外贸推广具体是做什么
  • 龙华营销型网站设计/武汉seo诊断
  • 广扬建设集团网站/中国seo关键词优化工具