Oracle 12c Docker安裝問題排查 sga_target 1536M is too small

一、問題描述

在虛擬機環境(4核16GB內存)上部署 truevoly/oracle-12c 容器鏡像時,一切運行正常。然而,當在一臺?128 核 CPU 和 512GB 內存的物理服務器上運行時,容器啟動時出現了 ORA-00821 等錯誤,提示 SGA 的內存配置不足。

二、原因

通過在 GitHub 上查找相關資料,發現每個單獨的線程大約會增加 22MB 的內存需求。因此,當核心數增多時,Oracle 數據庫啟動時會嘗試為每個 CPU 核心分配內存,這就導致了內存需求大幅增加。

三、排查思路

剛開始可能走了點彎路,主要是在問AI,而忽略GitHub案例

1、啟動鏡像

docker run --restart always -d -p 8081:8080 -p 1522:1521 -v /usr/local/oracle/data_temp:/home/oracle/data_temp -v /etc/localtime:/etc/localtime:ro --name orac1 truevoly/oracle-12c

2、查看啟動日志

docker logs -f 4eea316971a1706b1faf6dd469c276c334234f1f6f63824997aa71c00670abd5

正常情況下可以走到100%,訪問數據庫

Database not initialized. Initializing database.

Starting tnslsnr

Copying database files

1% complete

2% complete

4% complete

DBCA Operation failed.

Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/xe/xe.log" for further details.

3、登錄容器內部查看報錯日志

docker exec -it orac1 bash

cat? /u01/app/oracle/cfgtoollogs/dbca/xe/xe.log

Unique database identifier check passed.

/ has enough space. Required space is 6140 MB , available space is 2318404 MB.

File Validations Successful.

Copying database files

DBCA_PROGRESS : 1%

DBCA_PROGRESS : 2%

ORA-00821: Specified value of sga_target 1536M is too small, needs to be at least 1968M

ORA-01078: failure in processing system parameters

DBCA_PROGRESS : 4%

ORA-01034: ORACLE not available

ORA-01034: ORACLE not available

DBCA_PROGRESS : DBCA Operation failed.

我的第一反應是服務器資源充足,內存并不缺乏,因此懷疑是否是之前調整的內核參數,尤其是大頁內存設置,導致了這個問題,把配置還原后不是這個原因。

報錯解釋

  • ORA-00821: Specified value of sga_target 1536M is too small, needs to be at least 1968M
  • 這個錯誤表示 Oracle 在初始化時嘗試為 sga_target 設置 1536M 的內存大小,但實際上 Oracle 需要的最小值是 1968M。因此,sga_target 設置過小,導致初始化失敗。
  • ORA-01078: failure in processing system parameters
  • 這個錯誤通常是在處理系統參數(如 sga_target)時失敗,通常與內存設置有關,表明數據庫無法使用當前配置啟動。
  • ORA-01034: ORACLE not available
  • 這個錯誤表明 Oracle 實例在嘗試啟動時沒有成功運行。通常是由于數據庫無法使用給定的內存配置而未能啟動。

錯誤的根本原因是數據庫初始化時內存分配不足,導致 sga_target 的值過小,無法滿足 Oracle 數據庫的需求。

3、限制容器的內存和 CPU 配置

github上面有說通過限制CPU來解決,這個思路有點啟發

通過 docker run 命令,限制容器的內存和 CPU 使用,確保容器的資源分配符合 Oracle 數據庫的要求,然后沒有解決我的問題。

docker run --memory-swappiness=0 --memory="1g" --cpus="1.0" --rm=true --name=oracle1 -p 1521:1521 -e ORACLE_PASSWORD=123456 orac1 truevoly/oracle-12c


--memory="1g":限制容器使用的內存為 1GB。
--cpus="1.0":限制容器使用 1 個 CPU 核心。
--memory-swappiness=0:禁用容器的交換內存,避免性能下降。

?對資源限制感興趣的話可以去docker幫助文檔

https://docs.docker.com/config/containers/resource_constraints/#configure-the-default-cfs-scheduler

4、容器內部修改內存配置


進入容器后,設置適當的 DBCA_TOTAL_MEMORY 來解決內存不足的問題,并重新執行初始化腳本:

想起來了之前做RAC的時候好像碰到過類似的問題

docker exec -it 4eea316971a1 bash
export DBCA_TOTAL_MEMORY=4096
執行腳本驗證
root@4eea316971a1:/# bash entrypoint.sh 
通過設置 DBCA_TOTAL_MEMORY 環境變量為 4096MB,能夠幫助 Oracle 在容器中成功初始化。

已經生效了,看到了問題解決

四、優化Dockerfile

1、構建Dockerfile

將entrypoint.sh 拷貝到本地

修改腳本,重新build

2、重新運行觀察

可以正常初始化

數據庫鏈接正常

總結:

在虛擬機上運行時,由于核心數較少,內存需求較低,容器能夠成功啟動。但在物理機上,由于 128 核 CPU,內存需求顯著增加,導致了內存分配不足,進而觸發了錯誤。

這個鏡像很好用的,我看網上分享oracle 12c快速啟動大部分都在用這個鏡像,估計很少在128C內存上運行吧。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/896379.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/896379.shtml
英文地址,請注明出處:http://en.pswp.cn/news/896379.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

DeepSeek 提示詞:高效的提示詞設計

🧑 博主簡介:CSDN博客專家,歷代文學網(PC端可以訪問:https://literature.sinhy.com/#/?__c1000,移動端可微信小程序搜索“歷代文學”)總架構師,15年工作經驗,精通Java編…

KIMI K1.5:大規模強化學習在大語言模型中的應用與工程實踐

目錄 1、核心技術創新:長上下文強化學習 2、策略優化的技術細節 2.1、在線鏡像下降變體 2.2、長度懲罰機制 2.3、智能采樣策略 3、工程架構創新 3.1、混合部署框架 3.2、代碼沙箱與獎勵模型 3.3、分布式系統架構 4、實驗成果與性能提升 5、結論與未來展望 大語言模…

從 0 到 1:使用 Docker 部署個人博客系統

引言 在當今數字化時代,擁有一個個人博客來記錄自己的學習、生活和見解是一件非常有意義的事情。然而,傳統的博客部署方式往往涉及復雜的環境配置和依賴管理,容易讓人望而卻步。而 Docker 的出現,為我們提供了一種簡單、高效的解…

多進程網絡服務端詳細說明文檔

多進程網絡服務端詳細說明文檔 一、概述 本項目實現了一個基于多進程的 TCP 網絡服務端,主要用于處理多個客戶端的連接請求。為了提高代碼的可維護性和可復用性,分成了頭文件(.h)和多個源文件(.cpp)。具體…

HDFS數據多目錄、異構存儲、回收站

1.NameNode元數據多目錄 HDFS集群中可以在hdfs-site.xml中配置“dfs.namenode.name.dir”屬性來指定NameNode存儲數據的目錄,默認NameNode數據存儲在${hadoop.tmp.dir}/dfs/name目錄,“hadoop.tmp.dir”配置項在core-site.xml中。 我們也可以將NameNod…

TFChat:騰訊大模型知識引擎(DeepSeek R1)+飛書機器人實現AI智能助手

效果 TFChat項目地址 https://github.com/fish2018/TFChat 騰訊大模型知識引擎用的是DeepSeek R1,項目為sanic和redis實現,利用httpx異步處理流式響應,同時使用buffer來避免頻繁調用飛書接口更新卡片的網絡耗時。為了進一步減少網絡IO消耗&…

HTML5 面試題

1. HTML5 新增了哪些重要特性? 語義化標簽:這些標簽有助于提高頁面的可讀性和可維護性。多媒體支持:HTML5 引入了 和 標簽,可以直接嵌入音頻和視頻文件,無需依賴插件。本地存儲:引入了 localStorage 和 se…

【Linux】Linux常用命令

目錄 文件和目錄相關命令查看和管理進程磁盤和文件系統管理用戶和權限管理網絡相關命令文本處理命令系統狀態查看命令軟件包管理命令計劃任務和后臺作業其他常用命令 1. 文件和目錄相關命令 命令作用示例pwd顯示當前工作目錄pwdls列出目錄內容ls -l 查看詳細信息cd切換目錄cd…

布署elfk-準備工作

建議申請5臺機器部署elfk: filebeat(每臺app)--> logstash(2臺keepalived)--> elasticsearch(3臺)--> kibana(部署es上)采集輸出 處理轉發 分布式存儲 展示 ELK中文社區: 搜索客,搜索人自己的社區 官方…

DeepSeek:我的AI助手之旅

★【前言】: 初次使用AI助手幫我寫作,就像摸石頭過河一樣,一點點的前行。我在慢慢的摸索,慢慢的體會中,感悟出的一點個人心得體會現分享給大家。這也說明一個問題,網站上各種使用方法和技巧是對于已經使用過的人來說的方便和快捷,但對于剛剛接觸的使用者來說,網上的各…

esp8266 rtos sdk開發環境搭建

1. 安裝必要的工具 1.1 安裝 Git Git 用于從遠程倉庫克隆代碼,你可以從Git 官方網站下載 Windows 版本的安裝程序。安裝過程中可保持默認設置,安裝完成后,在命令提示符(CMD)或 PowerShell 中輸入git --version&#…

C# | GDI+圖像測距輔助線的實現思路

C# | GDI圖像測距輔助線的實現思路 文章目錄 C# | GDI圖像測距輔助線的實現思路一、輔助線需求概述二、坐標系與角度計算2.1 笛卡爾坐標系2.2 線長和角度計算方法2.3 文本角度矯正計算方法2.4 坐標變換實現步驟 三、與if判斷方式對比四、總結 一、輔助線需求概述 在圖像測量工…

記錄此刻:歷時兩月,初步實現基于FPGA的NVMe SSD固態硬盤存儲控制器設計!

背景 為滿足實驗室橫向項目需求,在2024年12月中下旬導師提出基于FPGA的NVMe SSD控制器研發項目。項目核心目標為:通過PCIe 3.0 x4接口實現單盤3000MB/s的持續讀取速率。 實現過程 調研 花了半個月的時間查閱了一些使用FPGA實現NVME SSD控制器的論文、…

python編寫liunx服務器登陸自動巡檢腳本

前言: 用戶需要一份用Python編寫的Linux系統巡檢腳本,檢查內存、磁盤、CPU使用率,還有網絡連通性。 首先,我得確定用戶的使用場景。可能用戶是系統管理員,需要定期監控服務器狀態,確保系統正常運行。 或者…

【二分查找】P9698 [GDCPC2023] Path Planning|普及

本文涉及的基礎知識點 本博文代碼打包下載 C二分查找 [GDCPC2023] Path Planning 題面翻譯 【題目描述】 有一個 n n n 行 m m m 列的網格。網格里的每個格子都寫著一個整數,其中第 i i i 行第 j j j 列的格子里寫著整數 a i , j a_{i, j} ai,j?。從 0…

springboot015基于SpringBoot的在線視頻教育平臺的設計與實現(源碼+數據庫+文檔)

源碼地址:基于SpringBoot的在線視頻教育平臺的設計與實現 文章目錄 1.項目簡介2.部分數據庫結構與測試用例3.系統功能結構4.包含的文件列表(含論文)前端運行截圖后端運行截圖 1.項目簡介 ? 隨著科學技術的飛速發展,各行各業都在…

《深度剖析:生成對抗網絡中生成器與判別器的高效協作之道》

在人工智能的前沿領域,生成對抗網絡(GAN)以其獨特的對抗學習機制,為數據生成和處理帶來了革命性的變革。生成器與判別器作為GAN的核心組件,它們之間的協作效率直接決定了GAN在圖像生成、數據增強、風格遷移等眾多應用中…

學習Flask:[特殊字符] Day 3:數據庫集成

學習目標:使用SQLAlchemy操作數據庫 from flask_sqlalchemy import SQLAlchemyapp.config[SQLALCHEMY_DATABASE_URI] sqlite:///site.db db SQLAlchemy(app)class User(db.Model):id db.Column(db.Integer, primary_keyTrue)username db.Column(db.String(20),…

可以免費無限次下載PPT的網站

前言 最近發現了一個超實用的網站,想分享給大家。 在學習和工作的過程中,想必做PPT是一件讓大家都很頭疼的一件事。 想下載一些PPT模板減少做PPT的工作量,但網上大多精美的PPT都是需要付費才能下載使用。 即使免費也有次數限制&#xff0…