docker|Oracle数据库|docker快速部署Oracle11g和数据库的持久化(可用于生产环境)
一、
容器数据持久化的概念
docker做为容器化的领先技术,现在广泛应用于各个平台中,但不知道什么时候有一个说法是docker并不适用容器化数据库,说容器化的数据库性能不稳定,其实,这个说法主要是因为对docker的数据持久化不了解所导致的,数据库持久化做好了,是完全可以在生产环境使用容器化的数据库的
在容器层的 UnionFS(联合文件系统)中对文件/目录的任何修改,无论是手工修改还是
容器在运行过程中的修改,在该容器丢失或被删除后这些修改将全部丢失。即这些修改是无
法保存下来的。若要保存下来这些修改,通常有两种方式:
定制镜像持久化:将这个修改过的容器生成一个新的镜像,让这些修改变为只读的镜像
数据卷持久化:将这些修改通过数据卷同步到宿主机
容器数据持久化主要解决的问题如下:
- 数据丢失:在默认情况下,Docker容器内部产生的数据存储在其自身的存储层上。当容器停止运行或被删除时,与该容器关联的存储层也会被清理,这意味着所有在容器运行期间生成或修改的数据都将永久丢失。
- 迁移和备份困难:由于容器存储层与容器生命周期紧密相连,如果需要将数据从一个容器移动到另一个容器,或者需要对数据进行备份和恢复操作,会非常复杂且不可靠。
- 多容器共享数据:在实际应用中,可能需要多个容器之间共享某些数据,例如数据库服务和Web服务器之间。但是,容器间的直接文件系统交互并不方便,也不利于容器的独立性和可移植性。
- 性能考量:容器存储层通常是通过联合文件系统(如AUFS、OverlayFS等)实现的,频繁写入这类文件系统的性能可能不如直接写入宿主机的磁盘。
二、
docker+docker-compose 部署Oracle11g数据库+数据持久化
1、镜像下载:
本次实验是在VMware虚拟机上实现的,docker环境搭建部署就不在这里废话了,镜像适用的是阿里云的镜像
[root@centos1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g latest 3fa112fd3642 8 years ago 6.85GB
镜像pull命令为:
docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
2、
docker和docker-compose的版本说明
docker的版本是 20.10.7 docker-compose的版本是1.25.1 ,需要说明的是,docker版本应该为至少19版本,其它没有要求
[root@centos1 ~]# docker version
Client:Version: 20.10.7API version: 1.41Go version: go1.13.15Git commit: f0df350Built: Wed Jun 2 11:51:04 2021OS/Arch: linux/amd64Context: defaultExperimental: trueServer: Docker Engine - CommunityEngine:Version: 20.10.7API version: 1.41 (minimum version 1.12)Go version: go1.13.15Git commit: b0f5bc3Built: Wed Jun 2 11:55:29 2021OS/Arch: linux/amd64Experimental: falsecontainerd:Version: v1.4.6GitCommit: d71fcd7d8303cbf684402823e425e9dd2e99285drunc:Version: 1.0.0-rc95GitCommit: b9ee9c6314599f1b4a7f497e1f1f856fe433d3b7docker-init:Version: 0.19.0GitCommit: de40ad0
[root@centos1 ~]# docker-compose version
docker-compose version 1.25.1, build a82fef07
docker-py version: 4.1.0
CPython version: 3.7.4
OpenSSL version: OpenSSL 1.1.0l 10 Sep 2019
3、
docker-compose的编排文件
这里需要说明,该名字是固定的,如果不是docker-compose.yml ,重启,停止oracle数据库需要指定配置文件,十分不方便
cat >docker-compose.yml <<EOF
version: '3.1'
services:oracle:image: registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g:latestrestart: alwayscontainer_name: ogports:- "15211:1521"
EOF
编排文件里没有写volume,这个时候先启动容器,后面在拷贝文件到宿主机目录
启动容器命令为:
docker-compose up -d
4、
将容器中的文件复制到宿主机相关目录内
确保容器状态是正确的

宿主机创建相关用户:
/etc/passwd 文件末尾添加 oracle:x:500:500::/home/oracle:/bin/bash
/etc/group 文件末尾添加 oinstall:x:500:
最为关键的一步,复制需要持久化的文件到宿主机(复制文件的时候,容器必须是正常启动的)
mkdir -p /data/oracle/oradata
docker cp og:/home/oracle/app/oracle/oradata/helowin /data/oracle/oradata/test_data
docker cp og:/home/oracle/app/oracle/flash_recovery_area/helowin /data/oracle/oradata/flash_recovery_area
chown -Rf oracle:oinstall /data/oracle/
这里说明一下,cp的左边是容器的目录,空格后面的是宿主机的目录,宿主机的目录不需要自己创建,会自动完成,文件很快就拷贝完成,完成后,赋予相关用户权限
5、修改编排文件并重新应用编排文件
cat >docker-compose.yml <<EOF
version: '3.1'
services:oracle:image: registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g:latestrestart: alwayscontainer_name: ogvolumes:- "/data/oracle/oradata/test_data:/home/oracle/app/oracle/oradata/helowin"- "/data/oracle/oradata/flash_recovery_area:/home/oracle/app/oracle/flash_recovery_area/helowin"ports:- "15211:1521"
EOF
通过上面修改的编排文件,再次启动容器,这里需要先关闭,在启动,不能使用参数restart直接重启哦:
[root@centos1 ~]# docker-compose down
Stopping og ... done
Removing og ... done
Removing network root_default
[root@centos1 ~]# docker-compose up -d
Creating network "root_default" with the default driver
Creating og ... done
应用新编排文件后,查看容器日志,日志里面必须没有任何error:
root@centos1 ~]# docker logs -f og
/home/oracle/app/oracle/product/11.2.0/dbhome_2
Processing Database instance "helowin": log file /home/oracle/app/oracle/product/11.2.0/dbhome_2/startup.log
Fixed Size 2213776 bytes
Variable Size 402655344 bytes
Database Buffers 1191182336 bytes
Redo Buffers 7360512 bytes
Database mounted.
Database opened.
SQL> Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options/home/oracle/app/oracle/product/11.2.0/dbhome_2/bin/dbstart: Database instance "helowin" warm started.
tail: unrecognized file system type 0x794c7630 for `/home/oracle/app/oracle/product/11.2.0/dbhome_2/startup.log'. Reverting to polling.
🆗,现在Oracle数据库的容器持久化就做好了,使用工具连接也没有任何问题了

sid和服务名都是helowin,随便用哪个都可以,sys用户的密码是oracle,端口由于映射的是15211,因此上面必须这么填写,角色是sysdba
SH这个用户是锁定状态,把锁定去掉后,在重启Oracle容器,可以看到锁定仍然是去掉的,说明持久化成功了

总结:
关键其实就两步,第一个是不带volume,启动容器,容器正常工作,第二步,拷贝容器内文件到宿主机,赋予权限,然后带上volume,先down容器,在up容器,拷贝文件决定了持久化工作是否正常
相关文章:
docker|Oracle数据库|docker快速部署Oracle11g和数据库的持久化(可用于生产环境)
一、 容器数据持久化的概念 docker做为容器化的领先技术,现在广泛应用于各个平台中,但不知道什么时候有一个说法是docker并不适用容器化数据库,说容器化的数据库性能不稳定,其实,这个说法主要是因为对docker的数据持…...
uni-app 聊天界面滚动到消息底部
目录 问题 组件 页面 使用的API 总结 问题 当你发一个消息,但是消息却需要你自己向下滑你才能看见,否则一直呗输入框挡住。 组件 scroll-view组件:一般使用scroll-view组件的都采取使用其scroll-into-view或者scroll-to属性。 scroll-…...
学习风格的类型
学习风格是指个体在学习过程中偏好的方式和方法。不同的学习风格反映了人们在接收、处理和记忆信息方面的不同偏好。了解自己的学习风格可以帮助提高学习效率和效果。以下是几种常见的学习风格类型: 1. 视觉型(Visual Learner) 特点&#x…...
GCP容器镜像仓库使用
GCP容器镜像仓库产品为:Artifact Registry。 1)用户账号认证 GCP需要前置在控制台登陆对应环境账号。然后执行以下命令操作: $ gcloud auth login 2)登陆镜像仓库 $ gcloud auth configure-docker us-west1-docker.pkg.dev …...
【C++ Primer Plus习题】16.10
大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: #include <iostream> #include <string> #include <…...
Django框架全面指南
Django是一个高级的Python Web框架,它鼓励快速开发和清晰、实用的设计。本指南将全面介绍Django的核心概念和使用方法。 1. Django简介 Django遵循"batteries included"哲学,提供了Web开发所需的几乎所有功能。它的主要特点包括: ORM(对象关系映射)URL路由模板…...
git 更新LingDongGui问题解决
今天重新更新灵动gui的代码,以便使用最新的arm-2d,本来以为是比较简单的一件事情(因为以前已经更新过一次),却搞了大半天,折腾不易啊,简单记录下来,有同样遇到问题的同学参考&#x…...
Thymeleaf模版引擎
Thymeleaf是面向Web和独立环境的现代服务器端Java模版引擎,能够处理HTML、XML、JavaScript、CSS甚至纯文本。Thymeleaf旨在提供一个优雅的、高度可维护的创建模版的方式。为了实现这一目标,Thymeleaf建立在自然模版的概念上,将其逻辑注入到模…...
jpa适配mysql切换达梦可能的坑
1、liquibase脚本 (1)达梦数据库不支持,修改字段varchar改成blob <changeSet author"ly" id"v3.0_4_202307111505_101"><renameColumn tableName"PC_SS_ZRQD" oldColumnName"BHNR" newCo…...
922. 按奇偶排序数组 II 双指针 力扣
922. 按奇偶排序数组 II 已解答 简单 相关标签 相关企业 给定一个非负整数数组 nums, nums 中一半整数是 奇数 ,一半整数是 偶数 。 对数组进行排序,以便当 nums[i] 为奇数时,i 也是 奇数 ;当 nums[i] 为偶数时…...
Vue接入高德地图并实现基本的路线规划功能
目录 一、申请密钥 二、安装依赖 三、代码实现 四、运行截图 五、官方文档 一、申请密钥 登录高德开放平台,点击我的应用,先添加新应用,然后再添加Key。 如图所示填写对应的信息,系统就会自动生成。 二、安装依赖 npm i am…...
linux网络编程4
24.9.20学习目录 一.UDP(续)1.广播广播流程 2.多播多播流程 一.UDP(续) 1.广播 由一台主机向该主机所在子网内的所有主机发送数据的方式; 广播只能用UDP或原始IP实现,不能使用TCP; 其作用是将…...
Spring模块详解Ⅳ(Spring ORM和Spring Transaction)
目录 Spring ORM(Object-Relational Mapping)作用核心组件使用步骤事务管理代码演示优点挑战总结 Spring Transaction(Spring事务管理)事务的基本概念Spring事务管理的类型声明式事务管理事务的传播行为(Propagation&a…...
深度图可视化显示(kitti)
文章目录 前言一、读取深度值与图像1、深度值读取2、图像读取 二、深度图可视化1、深度图可视化代码2、深度图可视化结果展示 三、深度图在图像上可视化1、可视化代码2、可视化坐标显示 四、完整代码 前言 kitti数据是一个通用数据,有关kitti的深度图像内容我已有博…...
【Kubernetes知识点】HPA如何控制不同的资源实现自动扩缩容?
【Kubernetes知识点】HPA如何控制不同的资源实现自动扩缩容? 目录 1 概念 1.1 什么是HPA1.2 Deployment 与 HPA 的关系 1.2.1 工作原理 1.3 StatefulSet 与 HPA 的关系 1.3.1 工作原理 2 实验案例:HPA 控制 StatefulSet 进行扩缩容 2.1 部署一个有状态…...
adb devices不显示连接设备怎么解决
adb devices不显示设备,首先用老办法检查。假如是显示adb这个命令不认识,那就是系统路径问题。假如能认识adb这个命令,那就检查一下手机有没有开usb调试。 但是我遇到了更奇怪的问题:我把网上的攻略都试了一遍,设备驱…...
经典sql题(一)求连续登录不少于三天用户
示例数据 假设我们的 test 表有以下数据: iddate12023-10-01 08:00:0012023-10-01 09:00:0012023-10-02 10:00:0012023-10-03 11:00:0022023-10-01 10:00:0022023-10-02 12:00:0022023-10-03 14:00:0022023-10-04 15:00:0032023-10-01 16:00:00 第一步࿱…...
2024java面试-软实力篇
为什么说简历很重要? 一份好的简历可以在整个申请面试以及面试过程中起到非常好的作用。 在不夸大自己能力的情 况 下,写出一份好的简历也是一项很棒的能力。为什么说简历很重要呢? 、 先从面试来说 假如你是网申,你的简历必然…...
「OC」present和push操作区别以及混合推出的实现
「OC」present和push操作区别以及混合推出的实现 文章目录 「OC」present和push操作区别以及混合推出的实现前言present用途while循环越级返回通知越级返回添加present动画 push模态视图和push视图混合跳转操作一:控制器Apresent控制器B,控制器B再将控制…...
【高分系列卫星简介】
高分系列卫星是中国国家高分辨率对地观测系统(简称“高分工程”)的重要组成部分,旨在提供全球范围内的高分辨率遥感数据,广泛应用于环境监测、灾害应急、城市规划、农业估产等多个领域。以下是对高分系列卫星及其数据、相关参数和…...
AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...
Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...
代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...
pgsql:还原数据库后出现重复序列导致“more than one owned sequence found“报错问题的解决
问题: pgsql数据库通过备份数据库文件进行还原时,如果表中有自增序列,还原后可能会出现重复的序列,此时若向表中插入新行时会出现“more than one owned sequence found”的报错提示。 点击菜单“其它”-》“序列”,…...
boost::filesystem::path文件路径使用详解和示例
boost::filesystem::path 是 Boost 库中用于跨平台操作文件路径的类,封装了路径的拼接、分割、提取、判断等常用功能。下面是对它的使用详解,包括常用接口与完整示例。 1. 引入头文件与命名空间 #include <boost/filesystem.hpp> namespace fs b…...
