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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

.net千万级数据导出_记一次解决docker下oracle数据库故障事例

發布時間:2023/12/10 数据库 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .net千万级数据导出_记一次解决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.運維操作不規范,如沒有制定妥善的擴容方案,運維人員操作也存在操作風險。

五、寫在最后:

在故障處理期間,相關同事已經做好了數據丟失的心理準備,這種壓力是特別大的。但幸好問題得到解決,數據也沒有丟失。通過此次事件,我也汲取教訓,認真反思和總結,以求工作中避免發生不可挽回的事故。

總結

以上是生活随笔為你收集整理的.net千万级数据导出_记一次解决docker下oracle数据库故障事例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。