ORA-01102: cannot mount database in EXCLUSIVE mode报错解决与原因分析

前因

升级salt-master的时候执行了yum update,然后把docker升级了,docker升级的时候覆盖掉了原来的service文件,而且还不知道为啥对iptables也做了更改(可能没改原来就那样。。)
然后起的容器服务就不可用了

后果

所以就去

  1. 清了iptables规则iptables -F
    注:这个命令慎用。。严重程度跟删库差不多了。
  2. 重设了service文件,然后重新systemctl daemon-reloadsystemctl restart docker
    但是去重新起容器的时候告诉我,
Error response from daemon: OCI runtime create failed: container with id ... exists unknown

根据容器id起不来容器了?????

  1. 然后就捣鼓了个啥,好像用容器名起了下?总之没改什么。然后就报了个新错
Error response from daemon failed to listen to abstract unix socket "/containerd-shim/moby/e485fefb2a6633abeb5012f43466888266dabba954c030a33c41a3d562e50ad4/shim.sock" listen unix /containerd-shim/moby/e485fefb2a6633abeb5012f43466888266dabba954c030a33c41a3d562e50ad4/shim.sock bind address already in use unknown
  1. 然后就去查了docker此类进程ps ux|grep docker,杀了下docker-containerd-shim -namespace moby -workdir /home/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby.....之类的,然后再重启就报了新错。。id不存在又id已存在。。最后无奈放弃,只能删除容器,使用原来的挂载重新run一个。于是起oracle的时候就遇到问题了(mongo倒是没问题)。

ps:关于以上的总结:1、3、4这三步走的好失败呀。应该再具体分析下,不然get不到原因。

后果之后的后果果:

oracle启动日志报错

Total System Global Area 5344731136 bytes
Fixed Size                  2213136 bytes
Variable Size            4294970096 bytes
Database Buffers         1006632960 bytes
Redo Buffers               40914944 bytes
ORA-01102: cannot mount database in EXCLUSIVE mode

Starting web management console
BEGIN DBMS_XDB.sethttpport(8080); END;

      *
ERROR at line 1:
ORA-06550: line 1, column 7:
PLS-00201: identifier 'DBMS_XDB.SETHTTPPORT' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

根据报错ORA-01102: cannot mount database in EXCLUSIVE mode,百度了下,参考博客https://blog.csdn.net/lzwgood/article/details/26368323
试了下删除lk<sid>文件,然后再startup,跟博客中报了一样的错,但接下来博客中的解决方法并没有解决我的问题。
于是就去具体查了日志:
容器中oracle的部署目录/u01/app/oracle,所以
切换到trace目录cd /u01/app/oracle/diag/rdbms/xe/EE/trace,并查看alert log
tail -200 alert_EE.log

ALTER DATABASE   MOUNT
ORA-00210: cannot open the specified control file
ORA-00202: control file: '/u01/app/oracle/flash_recovery_area/xe/control02.ctl'
ORA-27086: unable to lock file - already in use
Linux-x86_64 Error: 11: Resource temporarily unavailable
Additional information: 8
ORA-00210: cannot open the specified control file
ORA-00202: control file: '/u01/app/oracle/oradata/xe/control01.ctl'
ORA-27086: unable to lock file - already in use
Linux-x86_64 Error: 11: Resource temporarily unavailable
Additional information: 8
ORA-205 signalled during: ALTER DATABASE   MOUNT...

又看了下alert下的log文件,tail -200 /u01/app/oracle/diag/rdbms/xe/EE/alert/log.xml

<msg time='2019-12-26T09:31:24.722+00:00' org_id='oracle' comp_id='rdbms'
 client_id='' type='UNKNOWN' level='16'
 host_id='d1f21b11dc48' host_addr='172.17.0.2' module=''
 pid='1308'>
 <txt>ORA-00210: cannot open the specified control file
ORA-00202: control file: &apos;/u01/app/oracle/flash_recovery_area/xe/control02.ctl&apos;
ORA-27086: unable to lock file - already in use
Linux-x86_64 Error: 11: Resource temporarily unavailable
Additional information: 8
ORA-00210: cannot open the specified control file
ORA-00202: control file: &apos;/u01/app/oracle/oradata/xe/control01.ctl&apos;
ORA-27086: unable to lock file - already in use
Linux-x86_64 Error: 11: Resource temporarily unavailable
Additional information: 8
 </txt>

为了解决上面的报错,接下来我:

  1. 在容器里和宿主机里都查了下是什么进程在占用,但没get到什么有用的结果,然后就跳过了。
    oracle容器里是oracle进程在占用(需要以特权方式启动--privileged),宿主机上是es用户的oracle进程在占用,没找到具体的进程来源。
    1.1. 宿主机fuser -m -v /home/oralce查询结果:
/home/sgs/tj_oralce: root     kernel mount /home
                     es         1230 F.c.m oracle
                     es         1232 F.c.m oracle
                     es         1236 F.c.m oracle
                     es         1238 F.c.m oracle
....
                     es        24695 F.c.. oracle
                     es        24702 F.c.. oracle
                     es        24799 F.c.. oracle
                     root      29712 F...m dockerd
                     es        31103 F.... java

然后查了下具体什么进程

[root@xxx ~]# ps -ef|grep 24799
root      4127 32057  0 20:59 pts/0    00:00:00 grep --color=auto 24799
es       24799 16907  0 20:32 ?        00:00:00 oracleEE (LOCAL=NO)

或者
1.2. lsof查具体的控制文件

[root@manage ~]# lsof /home/oralce/flash_recovery_area/xe/control02.ctl 
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF       NODE NAME
oracle  19899   es   19u   REG  253,2  9748480 4295450992 /home/oralce/flash_recovery_area/xe/control02.ctl
oracle  19901   es   19u   REG  253,2  9748480 4295450992 /home/oralce/flash_recovery_area/xe/control02.ctl
oracle  19903   es   19uW  REG  253,2  9748480 4295450992 /home/oralce/flash_recovery_area/xe/control02.ctl
oracle  19909   es   21u   REG  253,2  9748480 4295450992 /home/oralce/flash_recovery_area/xe/control02.ctl

再查具体进程:

[root@manage ~]# ps -ef|grep 19899
root      5359 32057  0 21:02 pts/0    00:00:00 grep --color=auto 19899
es       19899 19635  0 13:40 ?        00:00:02 ora_dbw0_EE

还是没get到什么有用信息。

  1. 将两个新的控制文件另存一份
  2. sqlplus /nolog登陆数据库后,切换sys用户conn sys/password as sysdba,然后创建pfilecreate pfile='/path/xepfile.ora’ from spfile;,并修改pfile中控制文件为新另存出来的
    创建pfile的时候遇到了报错:
*
ERROR at line 1:
ORA-07391: sftopn: fopen error, unable to open text file.

属于文件权限问题,oracle用户可能对要创建的文件所在目录没有读写权限。

  1. 使用pfile重启数据库
shutdown immediate; 
startup pfile='/path/xepfile.ora';

startup的时候又有报错:

ORA-01157: cannot identify/lock data file 1 - see DBWR trace file 
ORA-01110: data file 1: '/u01/app/oracle/oradata/xe/system01.dbf'

试了下将datafile drop掉alter database datafile /u01/app/oracle/oradata/xe/system01.dbf offline drop;,然后执行recover databse;
但是没用,依旧报了其它数据文件lock,然后同样的方法继续试下去,发现所有的datafile都是lock,然后就怀疑整体的oracle文件挂载目录由于被占用,所以导致oracle mount失败。
于是,

  1. 在宿主机上将oracle容器的数据挂载目录重新拷贝了一份,然后用新拷贝出来的数据起一个新oracle容器,然后结果是:
    居然可用!居然mount没问题!!由此可见还是文件被占用了。

不愧是我,挖坑自己跳。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,755评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,369评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,799评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,910评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,096评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,159评论 3 411
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,917评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,360评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,673评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,814评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,509评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,156评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,123评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,641评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,728评论 2 351