oracle查看数据库是否恢复成功_记一次解决docker下oracle数据库故障事例

一、问题背景:

某个项目的线上环境oracle数据库挂了,同事急匆匆来找我救火。我简单咨询了一些基本情况:线上环境,docker部署,已正常运行半年。由于宿主机的根目录硬盘空间不够,运维的同事想把oracle数据文件迁移至别的硬盘上。但不知什么原因,容器丢失,运维的同事想重建新的oracle容器。

二、分析问题:

第一步就是看操作历史,以便于全面了解同事都做了哪些操作。通过history命令,分析历史操作,得到以下信息:

1.oracle容器实例是于今年4月份创建,容器名为oracle11g,影射端口为1521,未指定挂载卷;

2.oracle11g容器未被删除,但现在通过docker ps -a却找不到;

3.同事将容器目录下的oradata文件夹mv到了另一块硬盘上;

4.宿主机的根目录空间只剩下3个G;

5.同事尝试创建新的oracle容器,并指定挂载mv出来的数据文件;

仅有数据文件是很难把数据库服务跑起来的,故找回容器oracle11g是解决问题的关键。由于同事已经记录了oracle11g容器的ID,于是找到了容器的所在目录:/mnt/docker-data/containers/,发现容器文件还在。

接着分析历史操作,又发现同事改了docker容器目录containers下oracle11g的hostconfig.json文件,于是推断此项操作是导致容器丢失的关键。

于是,将hostconfig.json文件恢复,重新启动docker服务:

# systemctl restart docker

重启成功之后,通过docker ps -a已经可以找到oracle11g这个容器了。

尝试启动oracle11g:

# docker start oracle11g;

启动成功!于是进入容器,检查数据库状态:

# docker exec -it oracle11g bash   //进入容器
$ source /home/oracle/.bash_profile   //引用环境变量
$ sqlplus / as sysdba   //进入数据库实例
> shutdown immediate //关闭数据库
> startup   //启动数据库

启动数据库时,报错,提示数据文件需要恢复。此问题是由于同事已将容器中的数据文件/oradata通过mv操作转移到了其它硬盘。

至此,问题已很清楚。以下问题需要得到解决:

1.docker的Root_dir是在宿主机的根目录下,目前可用空间仅3G,需要把docker的数据目录改为有更多硬盘空间的目录:/NET_FS;

2.需要根据现有的oracle11g容器创建新的镜像,以通过挂载的方式引用mv出来的数据文件(也可以把数据文件拷备至容器原有的数据文件所在的位置,但是否可行待验证);

三、解决过程:

先解决第2个问题,根据现有容器创建新的镜像:

# docker export oracle11g /NET_FS/oracle11g_image.tar //导出容器,漫长的等待。

容器导出成功后,由于docker所在的文件系统已无多余空间可用,故再调整docker的Root_dir目录:

# systemctl stop docker //停止docker服务;
# cp -R /mnt/docker-data /NET_FS/lib/docker/      //拷备现有的docker数据文件至新的文件系统

整个docker数据文件约100G,经过漫长的等等之后,拷备完成。接下来修改Root_dir参数:

# vim /etc/docker/daemon.json  //添加以下内容
{"data-root": "/NET_FS/lib/docker/docker-data"}

启动docker服务:

# systemctl start docker  //启动服务
# docker info |grep Root   //检验数据文件目录修改是否生效
# docker ps  //查看容器运行状态
# df -h   //也可以通过此命令看到docker的目录已经生效

docker服务正常,其它的容器也正常运行。接下来,将刚才导出的容器,导入为新的镜像:

# cat /NET_FS/oracle11g_image.tar |docker import - oracle11g:v3 //导入容器为镜像 
# docker images  //查看镜像,新的镜像已成功添加。

根据镜像创建新的容器,并挂载指定的oracle数据文件:

# docker run -d --name oracle11g_new -p 1521:1521 -v /NET_FS/oradata /oradata oracle11g:v3 /bin/bash 

容器创建成功,接下来进入容器,启动数据库:

# docker exec -it oracle11g_new bash    //进入容器
$ source /home/oracle/.bash_profile   //引用环境变量
$ sqlplus / as sysdba   //进入数据库实例
> shutdown immediate //关闭数据库
> startup   //启动数据库

数据库顺利启动!经过业务验证,系统已经恢复,至此故障得到解决。

四、总结与反思:

通过此次故障修复,有以下几点反思:

1.生产环境的一切操作要谨慎,随时准备好回退方案。如本例中,在转移数据库数据文件时,用的是mv,非cp;

2.除非知道自己在做什么,否则最好考虑清楚再下手。本例中容器的hostconfig.json文件被修改后,导致找不到容器,同事以为容器“丢失”;

3.线上环境没有预先规划好资源。本例中docker是直接安装至根目录下的,但根目录只有50G的空间,对于生产环境来说,这个空间肯定是不够用的。

4.宿主机没有使用LVM逻辑卷管理,导致后期扩容困难。

5.运维操作不规范,如没有制定妥善的扩容方案,运维人员操作也存在操作风险。

五、写在最后:

在故障处理期间,相关同事已经做好了数据丢失的心理准备,这种压力是特别大的。但幸好问题得到解决,数据也没有丢失。通过此次事件,我也汲取教训,认真反思和总结,以求工作中避免发生不可挽回的事故。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/381551.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[调剂复试]复试后的一点总结

来北京差不多有两天了,调剂的事情也有了结果,之前的忐忑的心也终于放了下来。好不容易有一点空闲的时间,所以想好好地总结一下,谈不上有多少经验,只是希望阅读这篇文章的人能够在迷茫的时候看到方向。 先说下调剂的学…

js取字符串后四位_JS逆向 | 某验滑块加密参数逆向分析

声明:本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢!aHR0cHM6Ly93d3cuZ2VldGVzdC5jb20vZGVtby9zbGlkZS1mbG9hdC5odG1s抓包分析,看到一个加密参数w&…

谨防代理木马和怕米释放有毒程序

江民今日提醒您注意:在今天的病毒中Trojan/PSW.Agent.ann“代理木马”变种ann和TrojanDropper.Psyme.gke“怕米”变种gke值得关注。 英文名称:Trojan/PSW.Agent.ann中文名称:“代理木马”变种ann病毒长度:243200字节病毒类型&…

[python] 命令行模式下出现cp65001异常

问题 在命令行模式下有时会提示cp65001异常,很显然是命令行编码和python环境编码不匹配。 解决 切换命令行编码 unknown encoding: cp65001异常 python安装后进入命令行交互模式,输入任何代码都报unknown encoding: cp65001异常 需要将编码(UTF-8)修改…

挖掘城市ip_德国卡尔斯草莓农庄:旅游IP打造要创意更要形象!

什么是IP?名人圈:杨超越游戏圈:王者荣耀影视界:延禧攻略出版界:Harry Potter相声界:郭德纲……别忙着争先恐后,知道你的IP数不胜数~~你知道的IP数不胜数,一个人、一部作品、一个品牌、一座城市…

rust种的南瓜为什么老是消失_冷天早餐别将就,用南瓜和萝卜这样做,鲜香松软,营养好吃又管饱...

导语:11月我家爱吃这菜,加根萝卜简单一卷,有颜有料,孩子经常点名吃。冷天早餐别将就,用南瓜和萝卜这样做,鲜香松软,营养好吃又管饱“南瓜再大本地卖,辣椒再小穿省过”记得悦悦小时候…

windows下搭建python运行环境

今天python的环境炸了,刚好也重新做一下,记录下折腾的过程。 文件下载 首先打开官网,找到对应的文件的下载索引。 https://www.python.org/downloads/windows/ 其中3.7.0是版本号,a是代表稳定版本,b代表的是测试版本&…

python云计算开发技术_云计算开发学习笔记:Python3 面向对象技术简介

来源:TechWeb.com.cn Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的。本章节我们将详细介绍Python的面向对象编程。 如果你以前没有接触过面向对象的编程语言,那你可能需要先了解…

ORDER BY NEWID()【原创】

关于ORDER BY NEWID(),我是这么理解的:NEWID()是一个产生随即uniqueidentifier的函数,对于ORDER BY子句来说,如果后面接的是一个常量字符串,那么每次排序的顺序都是一样的,如果后面接的是变量,那…

如何 更换vue的图标_vue如何实现图标点击选中后换一个图标(只单选)

优惠券{{coupon}}{{nocoupon}}{{coupon_left1}}{{num}}{{coupon_left2}}{{coupon_right1}}{{coupon.price}}{{unitPrice}}{{available}}{{universalCoupon}}{{date}}{{application}}这是vue.js代码var content new Vue({el: ".app-web",data: {coupon: 优惠券,nocou…

HK-2000 数采仪系统说明之 5.H2000SService程序调用说明

HK-2000数据采集仪必须启动H2000SService服务(V2版本才有这个程序),启动命令./H2000SService 7002 该命令也可以添加到bject目录下的StartUp.sh脚本里./H2000SService 7002 > /dev/null &这样启动时会自动运行该服务gbDscMonitorES程序运行的计算机必须与HK…

[Beego] 内置的模板函数(不同格式的字符串和html的互转)

在使用beego框架的时候,常常需要把不同形式的字符串转化为html,有时候为了安全考虑会将html转义,而有时候希望能显示html标签。在存储到db中后,再取出来的显示是原本的,即html标签不会生效,这就需要一些内置…

python中isalpha的用法_python函数--isalpha()方法

原博文 2019-09-26 10:59 − isalpha()方法 描述:Python isalpha() 方法检测字符串是否只由字母组成。isalpha()方法语法:str.isalpha()参数:无。返回值:如果字符串至少有一个字符并且所有字符都是字母则返回 True,否则返回 False…

stm32驱动ssd1306配置_STM32 OLED 屏幕 驱动芯片SSD1306 IIC代码

#include "oled.h"#include "stdlib.h"#include "oledfont.h"#include "delay.h"#include "usart.h"//SSD1306 OLED 驱动IC驱动代码//驱动方式:IIC//OLED的显存//存放格式如下.//[0]0 1 2 3 ... 127//[1]0 1 2 3 ... 127//[…

C#数据结构-单链表

理论基础: 链表是用一组任意的存储单元来存储线性表中的数据元素。 如果结点的引用域只存储该结点直接后继结点的存储地址,则该链表叫单链表(Singly Linked List)。 单链表由头引用H唯一确定。头引用指向单链表的第一个结点,也就是把单链表第…

[Golang] string类型和其他类型的值的互转

问题 由于在开发过程中遇到类型转换问题,比如在web中某个参数是以string存在的,这个时候需要转换成其他类型,这里官方的strconv包里有这几种转换方法。 实现 有两个函数可以实现类型的互转(以int转string为例) 1. For…

pandas 根据单号分类_由 “猫捉老鼠”游戏联想的用户分类问题

一、说在最前 用户识别,用户分类,精准营销…这是咱们业务人员常常念叨的话。底层逻辑为无论任何营销目的,在营销手段上,越针对某一细化群体,达成目的的概率也就会越大。那今天就来和大家说道说道用户识别/分类的一种方…

python解释器环境中、用于表示上一次_文学人类学概说_尔雅文学人类学概说答案第四小节课后作业答案...

【判断题】对零星分数的统计资料,经过统计分组整理后,仍然不能发现其特点和规律。【单选题】小明一家三口在食用自制的臭豆腐后,相继出现全身乏力、头晕、头痛,继而出现视力模糊、眼睑下垂、复视、吞咽困难等症状,他们…

[Golang]slice的用法以及和数组的区别

说明 slice是go的一个语言特性,其实有点类似于cpp的vector,可变长度,可以扩展空间。今天详细看了下,做下总结。 slice本质上是一个区间,原型是[]T,大致的实现是这样的: type slice struct {first *Tlen i…

IE Firefox通用DOM

要写出在各大主流浏览器上都兼容的JS代码,就要关注他们的区别,下是IE和FF综合考虑的通用DOM! 1.document.formName.item("itemName") 问题说明:IE下,可以使用document.formName.item("itemName")或document.formName.ele…