1.VẤN ĐỀ
SQL> startup
ORA-27106: system pages not available to allocate memory
Additional information: 6048
Additional information: 1
[oracle@SMW-DB-134 ~]$ more /etc/sysctl.conf
sysctl settings are defined through files in
/usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
Vendors settings live in /usr/lib/sysctl.d/.
To override a whole file, create a new file with the same in
/etc/sysctl.d/ and put new settings there. To override
only specific settings, add a file with a lexically later
name in /etc/sysctl.d/ and put new settings there.
For more information, see sysctl.conf(5) and sysctl.d(5).
oracle-database-preinstall-19c setting for fs.file-max is 6815744
fs.file-max = 6815744
oracle-database-preinstall-19c setting for kernel.sem is '250 32000 100 128'
kernel.sem = 250 32000 100 128
oracle-database-preinstall-19c setting for kernel.shmmni is 4096
kernel.shmmni = 4096
oracle-database-preinstall-19c setting for kernel.shmall is 1073741824 on x86_64
#kernel.shmall = 1073741824kernel.shmall = 29904077
oracle-database-preinstall-19c setting for kernel.shmmax is 4398046511104 on x86_64
#kernel.shmmax = 4398046511104kernel.shmmax = 122487098573
oracle-database-preinstall-19c setting for kernel.panic_on_oops is 1 per Orabug 19212317
kernel.panic_on_oops = 1
oracle-database-preinstall-19c setting for net.core.rmem_default is 262144
net.core.rmem_default = 262144
oracle-database-preinstall-19c setting for net.core.rmem_max is 4194304
net.core.rmem_max = 2096304
oracle-database-preinstall-19c setting for net.core.wmem_default is 262144
net.core.wmem_default = 262144
oracle-database-preinstall-19c setting for net.core.wmem_max is 1048576
net.core.wmem_max = 2096304
oracle-database-preinstall-19c setting for net.ipv4.conf.all.rp_filter is 2
net.ipv4.conf.all.rp_filter = 2
oracle-database-preinstall-19c setting for net.ipv4.conf.default.rp_filter is 2
net.ipv4.conf.default.rp_filter = 2
oracle-database-preinstall-19c setting for fs.aio-max-nr is 1048576
fs.aio-max-nr = 1048576
oracle-database-preinstall-19c setting for net.ipv4.ip_local_port_range is 9000 65500
net.ipv4.ip_local_port_range = 9000 65500
#vm.dirty_background_ratio = 5#vm.dirty_ratio = 10vm.swappiness=0
vm.nr_hugepages = 36874
[oracle@SMW-DB-134 ~]$ more /etc/security/limits.conf
# /etc/security/limits.conf
#
#This file sets the resource limits for the users logged in via PAM.
#It does not affect resource limits of the system services.
#
#Also note that configuration files in /etc/security/limits.d directory,
#which are read in alphabetical order, override the settings in this
#file in case the domain is the same or more specific.
#That means for example that setting a limit for wildcard domain here
#can be overriden with a wildcard setting in a config file in the
#subdirectory, but a user specific setting here can be overriden only
#with a user specific setting in the subdirectory.
#
#Each line describes a limit for a user in the form:
#
#<domain> <type> <item> <value>
#
#Where:
#<domain> can be:
# - a user name
# - a group name, with @group syntax
# - the wildcard *, for default entry
# - the wildcard %, can be also used with %group syntax,
# for maxlogin limit
#
#<type> can have the two values:
# - "soft" for enforcing the soft limits
# - "hard" for enforcing hard limits
#
#<item> can be one of the following:
# - core - limits the core file size (KB)
# - data - max data size (KB)
# - fsize - maximum filesize (KB)
# - memlock - max locked-in-memory address space (KB)
# - nofile - max number of open file descriptors
# - rss - max resident set size (KB)
# - stack - max stack size (KB)
# - cpu - max CPU time (MIN)
# - nproc - max number of processes
# - as - address space limit (KB)
# - maxlogins - max number of logins for this user
# - maxsyslogins - max number of logins on the system
# - priority - the priority to run user process with
# - locks - max number of file locks the user can hold
# - sigpending - max number of pending signals
# - msgqueue - max memory used by POSIX message queues (bytes)
# - nice - max nice priority allowed to raise to values: [-20, 19]
# - rtprio - max realtime priority
#
#<domain> <type> <item> <value>
#
#* soft core 0
#* hard rss 10000
#@student hard nproc 20
#@faculty soft nproc 20
#@faculty hard nproc 50
#ftp hard nproc 0
#@student - maxlogins 4
# End of file
* soft nproc 16384
* hard nproc 65536
* soft nofile 16384
* hard nofile 65536
oracle soft memlock 120795955
oracle hard memlock 120795955
[oracle@SMW-DB-134 ~]$ more /etc/security/limits.d/oracle-database-preinstall-19c.conf
oracle-database-preinstall-19c setting for nofile soft limit is 1024
#oracle soft nofile 1024oracle soft nofile 65536
oracle-database-preinstall-19c setting for nofile hard limit is 65536
oracle hard nofile 65536
oracle-database-preinstall-19c setting for nproc soft limit is 16384
refer orabug15971421 for more info.
oracle soft nproc 16384
oracle-database-preinstall-19c setting for nproc hard limit is 16384
oracle hard nproc 16384
oracle-database-preinstall-19c setting for stack soft limit is 10240KB
oracle soft stack 10240
oracle-database-preinstall-19c setting for stack hard limit is 32768KB
oracle hard stack 32768
oracle-database-preinstall-19c setting for memlock hard limit is maximum of 128GB on x86_64 or 3GB on x86 OR 90 % of RAM
#oracle hard memlock 134217728oracle hard memlock 120795955
oracle-database-preinstall-19c setting for memlock soft limit is maximum of 128GB on x86_64 or 3GB on x86 OR 90% of RAM
#oracle soft memlock 134217728oracle soft memlock 120795955
oracle-database-preinstall-19c setting for data soft limit is 'unlimited'
oracle soft data unlimited
oracle-database-preinstall-19c setting for data hard limit is 'unlimited'
oracle hard data unlimited
2.PHÂN TÍCH NGUYÊN NHÂN
Phân tích ORA-27106 — SMW-DB-134
Chẩn đoán nhanh — Root Cause
ORA-27106: system pages not available to allocate memory
Additional information: 6048 ← số HugePage cần nhưng KHÔNG đủ
Additional information: 1 ← error code từ kernelĐọc ngược từ số liệu trong file cấu hình:
vm.nr_hugepages = 36874 ← tổng HugePage đã cấp phát cho kernel
HugePage size = 2MB
Tổng HugePage RAM = 36874 × 2MB = ~72GB
Additional info 6048 × 2MB = ~11.8GB ← Oracle cần thêm 11.8GB HugePage
nhưng hệ thống không còn đủNguyên nhân: Một process khác (ASM instance, database khác, hoặc process OS) đã chiếm trước một phần HugePage, khiến Oracle database này không đủ trang còn lại khi startup.
Xác minh nguyên nhân — Chạy ngay trước khi fix
bash
# 1. Kiểm tra HugePage còn FREE bao nhiêu
grep -i huge /proc/meminfo
# Cần xem:
# HugePages_Total = 36874
# HugePages_Free = ??? ← nếu thấp → xác nhận nguyên nhân
# HugePages_Rsvd = ??? ← đã reserve nhưng chưa dùng
# HugePages_Surp = 0
# 2. Xem SGA hiện tại trong spfile/pfile
sqlplus / as sysdba
show parameter sga_max_size
show parameter sga_target
-- Hoặc nếu chưa up được:
strings $ORACLE_HOME/dbs/spfile*.ora | grep sga
# 3. Ai đang dùng HugePage?
# Kiểm tra tất cả process đang attach SGA
ipcs -m
# Xem process nào đang hold shared memory segment lớn
ipcs -m | awk '{print $3, $5, $6}' | sort -k3 -rn | head -20
# 4. Kiểm tra ASM instance có đang chạy không (ASM cũng dùng HugePage)
ps -ef | grep asm_pmon
srvctl config asm | grep -i sgaPhân tích file cấu hình — Các vấn đề phát hiện
/etc/sysctl.conf — Có 2 lỗi format nghiêm trọng
bash
# Dòng bị lỗi (comment và value dính liền nhau — KHÔNG có xuống dòng)
#kernel.shmall = 1073741824kernel.shmall = 29904077
#kernel.shmmax = 4398046511104kernel.shmmax = 122487098573Hậu quả: Kernel đọc dòng này sẽ bỏ qua hoàn toàn vì bắt đầu bằng # — có nghĩa là kernel.shmall và kernel.shmmax KHÔNG được apply từ file này. Giá trị đang chạy là giá trị default của kernel hoặc từ file khác trong /etc/sysctl.d/.
bash
# Kiểm tra giá trị thực tế đang chạy
sysctl kernel.shmmax
sysctl kernel.shmall
# Kiểm tra file nào đang override
sysctl --system 2>&1 | grep -E "shmmax|shmall"Tính toán lại tham số
kernel.shmmax = 122487098573 bytes = ~114GB
kernel.shmall = 29904077 pages × 4KB = ~114GB
→ Hai giá trị này khớp nhau, tính cho SGA ~114GB
→ Nhưng format dòng bị broken → có thể không applymemlock — Kiểm tra conflict giữa 2 file
/etc/security/limits.conf:
oracle soft memlock = 120795955 KB (~115GB)
oracle hard memlock = 120795955 KB (~115GB)
/etc/security/limits.d/oracle-database-preinstall-19c.conf:
oracle soft memlock = 120795955 KB (~115GB) ← cùng giá trị, OK
oracle hard memlock = 120795955 KB (~115GB) ← cùng giá trị, OKFile trong
/etc/security/limits.d/override file/etc/security/limits.conf— hai file cùng giá trị nên không conflict, nhưng nên chỉ giữ 1 nơi để tránh nhầm lẫn khi maintain.
3.Thủ tục fix
Bước 1 — Xác định SGA cần bao nhiêu HugePage
bash
# Lấy SGA_MAX_SIZE từ spfile (khi instance chưa up)
strings /u01/app/oracle/product/19.0.0/dbhome_1/dbs/spfile*.ora \
| grep -i "sga_max\|sga_target"
# Hoặc startup nomount với pfile tối thiểu để đọc
sqlplus / as sysdba <<EOF
startup nomount pfile='/tmp/init_min.ora';
show parameter sga_max_size;
show parameter sga_target;
shutdown abort;
EOFBước 2 — Tính tổng HugePage cần thiết
bash
# Công thức:
# Tổng = (SGA_DB / 2MB) + (SGA_ASM / 2MB) + buffer 1%
# Ví dụ nếu SGA_DB = 114GB, SGA_ASM = 2GB:
echo "DB pages: $((114*1024/2))" # = 58368
echo "ASM pages: $((2*1024/2))" # = 1024
echo "Buffer : 600"
echo "Total cần: $((58368+1024+600))" # = 59992Bước 3 — Fix format /etc/sysctl.conf và tăng HugePage
bash
# Backup trước
cp /etc/sysctl.conf /etc/sysctl.conf.bak.$(date +%Y%m%d)
# Sửa các dòng bị broken format
vi /etc/sysctl.confSửa từ (bị lỗi):
bash
#kernel.shmall = 1073741824kernel.shmall = 29904077
#kernel.shmmax = 4398046511104kernel.shmmax = 122487098573Thành (đúng — tách thành 2 dòng rõ ràng):
bash
# Oracle default (tham khảo)
# kernel.shmall = 1073741824
# kernel.shmmax = 4398046511104
# Giá trị production cho SMW-DB-134
kernel.shmall = 29904077
kernel.shmmax = 122487098573Cập nhật HugePage:
bash
# Thêm/sửa dòng vm.nr_hugepages
# Giả sử cần 59992 (tính theo Bước 2)
sed -i 's/vm.nr_hugepages = 36874/vm.nr_hugepages = 59992/' /etc/sysctl.conf
# Apply ngay
sysctl -p /etc/sysctl.conf
# Verify
grep -i huge /proc/meminfoBước 4 — Nếu hệ thống không đủ RAM vật lý để cấp thêm HugePage
bash
# Kiểm tra RAM còn trống
free -g
grep MemFree /proc/meminfo
# Nếu RAM không đủ → phải giảm SGA trong spfile
sqlplus / as sysdba <<EOF
startup nomount pfile='/tmp/init_min.ora';
create pfile='/tmp/spfile_dump.ora' from spfile;
shutdown abort;
EOF
vi /tmp/spfile_dump.ora
# Giảm sga_max_size và sga_target xuống mức phù hợp với HugePage available
sqlplus / as sysdba <<EOF
startup pfile='/tmp/spfile_dump.ora';
create spfile from pfile='/tmp/spfile_dump.ora';
shutdown immediate;
startup;
EOFBước 5 — Verify sau fix
bash
# Kiểm tra HugePage sau khi instance up
grep -i huge /proc/meminfo
# HugePages_Free phải > 0 (còn dư, không cạn sát)
# Kiểm tra instance up bình thường
sqlplus / as sysdba
select status from v$instance;
show sga;Tóm tắt vấn đề và hành động
| # | Vấn đề | Mức độ | Hành động |
|---|---|---|---|
| 1 | HugePages_Free không đủ cho SGA (6048 trang thiếu) | 🔴 BLOCKING | Tăng vm.nr_hugepages |
| 2 | Format shmall/shmmax bị broken (dính #) | 🔴 Tiềm ẩn | Fix format ngay |
| 3 | memlock định nghĩa 2 nơi (limits.conf + limits.d) | 🟡 Rủi ro maintain | Gộp về 1 file |
| 4 | vm.dirty_background_ratio bị comment nhưng format sai |
TƯ VẤN: Click Here hoặc Hotline/Zalo 090.29.12.888
=============================
Website không chứa bất kỳ quảng cáo nào, mọi đóng góp để duy trì phát triển cho website (donation) xin vui lòng gửi về STK 90.2142.8888 - Ngân hàng Vietcombank Thăng Long - TRAN VAN BINH
=============================
Nếu bạn không muốn bị AI thay thế và tiết kiệm 3-5 NĂM trên con đường trở thành DBA chuyên nghiệp hay làm chủ Database thì hãy đăng ký ngay KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE, được Coaching trực tiếp từ tôi với toàn bộ bí kíp thực chiến, thủ tục, quy trình của gần 20 năm kinh nghiệm (mà bạn sẽ KHÔNG THỂ tìm kiếm trên Internet/Google) từ đó giúp bạn dễ dàng quản trị mọi hệ thống Core tại Việt Nam và trên thế giới, đỗ OCP.
- CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
- Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
2 khóa học online qua video giúp bạn nhanh chóng có những kiến thức nền tảng về Linux, Oracle, học mọi nơi, chỉ cần có Internet/4G:
- Oracle cơ bản: https://bit.ly/admin_1200
- Linux: https://bit.ly/linux_1200
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội
=============================
cơ sở dữ liệu, cơ sở dữ liệu quốc gia, database, AI, trí tuệ nhân tạo, artificial intelligence, machine learning, deep learning, LLM, ChatGPT, DeepSeek, Grok, oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c/21c/23c/23ai, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, docker, k8s, micro service, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty