日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

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

發(fā)布時(shí)間:2023/11/30 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle查看数据库是否恢复成功_记一次解决docker下oracle数据库故障事例 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、問(wèn)題背景:

某個(gè)項(xiàng)目的線上環(huán)境oracle數(shù)據(jù)庫(kù)掛了,同事急匆匆來(lái)找我救火。我簡(jiǎn)單咨詢了一些基本情況:線上環(huán)境,docker部署,已正常運(yùn)行半年。由于宿主機(jī)的根目錄硬盤空間不夠,運(yùn)維的同事想把oracle數(shù)據(jù)文件遷移至別的硬盤上。但不知什么原因,容器丟失,運(yùn)維的同事想重建新的oracle容器。

二、分析問(wèn)題:

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

1.oracle容器實(shí)例是于今年4月份創(chuàng)建,容器名為oracle11g,影射端口為1521,未指定掛載卷;

2.oracle11g容器未被刪除,但現(xiàn)在通過(guò)docker ps -a卻找不到;

3.同事將容器目錄下的oradata文件夾mv到了另一塊硬盤上;

4.宿主機(jī)的根目錄空間只剩下3個(gè)G;

5.同事嘗試創(chuàng)建新的oracle容器,并指定掛載mv出來(lái)的數(shù)據(jù)文件;

僅有數(shù)據(jù)文件是很難把數(shù)據(jù)庫(kù)服務(wù)跑起來(lái)的,故找回容器oracle11g是解決問(wèn)題的關(guān)鍵。由于同事已經(jīng)記錄了oracle11g容器的ID,于是找到了容器的所在目錄:/mnt/docker-data/containers/,發(fā)現(xiàn)容器文件還在。

接著分析歷史操作,又發(fā)現(xiàn)同事改了docker容器目錄containers下oracle11g的hostconfig.json文件,于是推斷此項(xiàng)操作是導(dǎo)致容器丟失的關(guān)鍵。

于是,將hostconfig.json文件恢復(fù),重新啟動(dòng)docker服務(wù):

# systemctl restart docker

重啟成功之后,通過(guò)docker ps -a已經(jīng)可以找到oracle11g這個(gè)容器了。

嘗試啟動(dòng)oracle11g:

# docker start oracle11g;

啟動(dòng)成功!于是進(jìn)入容器,檢查數(shù)據(jù)庫(kù)狀態(tài):

# docker exec -it oracle11g bash //進(jìn)入容器 $ source /home/oracle/.bash_profile //引用環(huán)境變量 $ sqlplus / as sysdba //進(jìn)入數(shù)據(jù)庫(kù)實(shí)例 > shutdown immediate //關(guān)閉數(shù)據(jù)庫(kù) > startup //啟動(dòng)數(shù)據(jù)庫(kù)

啟動(dòng)數(shù)據(jù)庫(kù)時(shí),報(bào)錯(cuò),提示數(shù)據(jù)文件需要恢復(fù)。此問(wèn)題是由于同事已將容器中的數(shù)據(jù)文件/oradata通過(guò)mv操作轉(zhuǎn)移到了其它硬盤。

至此,問(wèn)題已很清楚。以下問(wèn)題需要得到解決:

1.docker的Root_dir是在宿主機(jī)的根目錄下,目前可用空間僅3G,需要把docker的數(shù)據(jù)目錄改為有更多硬盤空間的目錄:/NET_FS;

2.需要根據(jù)現(xiàn)有的oracle11g容器創(chuàng)建新的鏡像,以通過(guò)掛載的方式引用mv出來(lái)的數(shù)據(jù)文件(也可以把數(shù)據(jù)文件拷備至容器原有的數(shù)據(jù)文件所在的位置,但是否可行待驗(yàn)證);

三、解決過(guò)程:

先解決第2個(gè)問(wèn)題,根據(jù)現(xiàn)有容器創(chuàng)建新的鏡像:

# docker export oracle11g /NET_FS/oracle11g_image.tar //導(dǎo)出容器,漫長(zhǎng)的等待。

容器導(dǎo)出成功后,由于docker所在的文件系統(tǒng)已無(wú)多余空間可用,故再調(diào)整docker的Root_dir目錄:

# systemctl stop docker //停止docker服務(wù); # cp -R /mnt/docker-data /NET_FS/lib/docker/ //拷備現(xiàn)有的docker數(shù)據(jù)文件至新的文件系統(tǒng)

整個(gè)docker數(shù)據(jù)文件約100G,經(jīng)過(guò)漫長(zhǎng)的等等之后,拷備完成。接下來(lái)修改Root_dir參數(shù):

# vim /etc/docker/daemon.json //添加以下內(nèi)容 {"data-root": "/NET_FS/lib/docker/docker-data"}

啟動(dòng)docker服務(wù):

# systemctl start docker //啟動(dòng)服務(wù) # docker info |grep Root //檢驗(yàn)數(shù)據(jù)文件目錄修改是否生效 # docker ps //查看容器運(yùn)行狀態(tài) # df -h //也可以通過(guò)此命令看到docker的目錄已經(jīng)生效

docker服務(wù)正常,其它的容器也正常運(yùn)行。接下來(lái),將剛才導(dǎo)出的容器,導(dǎo)入為新的鏡像:

# cat /NET_FS/oracle11g_image.tar |docker import - oracle11g:v3 //導(dǎo)入容器為鏡像 # docker images //查看鏡像,新的鏡像已成功添加。

根據(jù)鏡像創(chuàng)建新的容器,并掛載指定的oracle數(shù)據(jù)文件:

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

容器創(chuàng)建成功,接下來(lái)進(jìn)入容器,啟動(dòng)數(shù)據(jù)庫(kù):

# docker exec -it oracle11g_new bash //進(jìn)入容器 $ source /home/oracle/.bash_profile //引用環(huán)境變量 $ sqlplus / as sysdba //進(jìn)入數(shù)據(jù)庫(kù)實(shí)例 > shutdown immediate //關(guān)閉數(shù)據(jù)庫(kù) > startup //啟動(dòng)數(shù)據(jù)庫(kù)

數(shù)據(jù)庫(kù)順利啟動(dòng)!經(jīng)過(guò)業(yè)務(wù)驗(yàn)證,系統(tǒng)已經(jīng)恢復(fù),至此故障得到解決。

四、總結(jié)與反思:

通過(guò)此次故障修復(fù),有以下幾點(diǎn)反思:

1.生產(chǎn)環(huán)境的一切操作要謹(jǐn)慎,隨時(shí)準(zhǔn)備好回退方案。如本例中,在轉(zhuǎn)移數(shù)據(jù)庫(kù)數(shù)據(jù)文件時(shí),用的是mv,非cp;

2.除非知道自己在做什么,否則最好考慮清楚再下手。本例中容器的hostconfig.json文件被修改后,導(dǎo)致找不到容器,同事以為容器“丟失”;

3.線上環(huán)境沒(méi)有預(yù)先規(guī)劃好資源。本例中docker是直接安裝至根目錄下的,但根目錄只有50G的空間,對(duì)于生產(chǎn)環(huán)境來(lái)說(shuō),這個(gè)空間肯定是不夠用的。

4.宿主機(jī)沒(méi)有使用LVM邏輯卷管理,導(dǎo)致后期擴(kuò)容困難。

5.運(yùn)維操作不規(guī)范,如沒(méi)有制定妥善的擴(kuò)容方案,運(yùn)維人員操作也存在操作風(fēng)險(xiǎn)。

五、寫在最后:

在故障處理期間,相關(guān)同事已經(jīng)做好了數(shù)據(jù)丟失的心理準(zhǔn)備,這種壓力是特別大的。但幸好問(wèn)題得到解決,數(shù)據(jù)也沒(méi)有丟失。通過(guò)此次事件,我也汲取教訓(xùn),認(rèn)真反思和總結(jié),以求工作中避免發(fā)生不可挽回的事故。

總結(jié)

以上是生活随笔為你收集整理的oracle查看数据库是否恢复成功_记一次解决docker下oracle数据库故障事例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。