Có một điểm rất quan trọng cần chuẩn hóa trong runbook: không nên để cùng một tham số xuất hiện ở nhiều file mà không biết file nào thắng. Oracle 19c hiện hướng dẫn dùng /etc/sysctl.d/97-oracle-database-sysctl.conf; HugePages có thể tách riêng /etc/sysctl.d/99-nr_hugepages.conf. Các giá trị Oracle công bố cho fs.file-max, fs.aio-max-nr, kernel.sem, network buffer... là minimum, không phải cứ tăng cao hơn là database nhanh hơn. (Oracle Docs)
RUNBOOK CHUẨN HÓA OS/KERNEL/MEMORY CHO ORACLE DATABASE RAC 19c TRÊN LINUX
1. Mục đích
Runbook này chuẩn hóa các tham số Linux phục vụ Oracle Database/RAC 19c, tập trung vào:
SGA/PGA
HugePages
memlockShared Memory
Async I/O
Open Files
Semaphore
Network kernel parameters
Transparent HugePages
Kiểm tra xung đột giữa
/etc/sysctl.confvà/etc/sysctl.d/*.confKiểm tra xung đột giữa
/etc/security/limits.confvà/etc/security/limits.d/*.conf
Nguyên tắc quan trọng:
Không chỉ kiểm tra file cấu hình. Giá trị cuối cùng kernel/process thực sự nhận mới là giá trị quyết định.
2. Phân biệt đúng 4 nhóm file
2.1 Kernel parameters
Có thể tồn tại trong:
/etc/sysctl.confvà:
/etc/sysctl.d/*.confVí dụ:
/etc/sysctl.d/97-oracle-database-sysctl.conf
/etc/sysctl.d/99-nr_hugepages.confCác tham số thuộc nhóm này:
fs.aio-max-nr
fs.file-max
kernel.sem
kernel.shmall
kernel.shmmax
kernel.shmmni
kernel.panic_on_oops
net.ipv4.ip_local_port_range
net.core.rmem_default
net.core.rmem_max
net.core.wmem_default
net.core.wmem_max
vm.nr_hugepages
vm.swappiness2.2 User/process limits
Có thể tồn tại trong:
/etc/security/limits.confvà:
/etc/security/limits.d/*.confVí dụ:
/etc/security/limits.d/oracle-database-preinstall-19c.confCác tham số:
nofile
nproc
stack
memlockthuộc nhóm này.
Không đặt memlock, nofile, nproc, stack trong sysctl.conf.
3. Baseline Oracle 19c
Oracle 19c công bố các minimum kernel parameters quan trọng:
| Parameter | Oracle minimum |
|---|---|
| fs.aio-max-nr | 1048576 |
| fs.file-max | 6815744 |
| kernel.sem | 250 32000 100 128 |
| kernel.shmmni | 4096 |
| kernel.panic_on_oops | 1 |
| net.ipv4.ip_local_port_range | 9000 65500 |
| net.core.rmem_default | 262144 |
| net.core.rmem_max | 4194304 |
| net.core.wmem_default | 262144 |
| net.core.wmem_max | 1048576 |
Lưu ý:
Đây là minimum requirement của Oracle. Nếu giá trị hiện tại lớn hơn và có lý do kỹ thuật hợp lệ thì không giảm một cách máy móc.
4. Kiểm tra toàn bộ cấu hình trước khi thay đổi
Bước 1 – Backup
Thực hiện trên từng node:
mkdir -p /root/oracle_os_backup_$(date +%Y%m%d)
cp -p /etc/sysctl.conf \
/root/oracle_os_backup_$(date +%Y%m%d)/
cp -pr /etc/sysctl.d \
/root/oracle_os_backup_$(date +%Y%m%d)/
cp -p /etc/security/limits.conf \
/root/oracle_os_backup_$(date +%Y%m%d)/
cp -pr /etc/security/limits.d \
/root/oracle_os_backup_$(date +%Y%m%d)/5. Phát hiện tham số bị khai báo trùng
Đây là bước bắt buộc.
Kernel
grep -RniE \
"fs\.aio-max-nr|fs\.file-max|kernel\.sem|kernel\.shmall|kernel\.shmmax|kernel\.shmmni|panic_on_oops|rmem|wmem|ip_local_port_range|nr_hugepages|swappiness" \
/etc/sysctl.conf /etc/sysctl.d/Ví dụ có thể phát hiện:
/etc/sysctl.conf:
fs.aio-max-nr=1048576
/etc/sysctl.d/97-oracle-database-sysctl.conf:
fs.aio-max-nr=1048576Không nên duy trì hai bản cấu hình giống nhau không cần thiết.
Limits
grep -RniE \
"oracle.*(nofile|nproc|stack|memlock)|grid.*(nofile|nproc|stack|memlock)" \
/etc/security/limits.conf /etc/security/limits.d/Đặc biệt kiểm tra:
memlock
nofile
nproc
stack6. Chuẩn hóa file kernel Oracle
Khuyến nghị sử dụng:
/etc/sysctl.d/97-oracle-database-sysctl.confthay vì rải các Oracle parameter khắp nhiều file.
Tạo/sửa:
vi /etc/sysctl.d/97-oracle-database-sysctl.confBaseline:
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.sem = 250 32000 100 128
kernel.shmmni = 4096
kernel.panic_on_oops = 1
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576Không giảm một giá trị production hiện tại chỉ vì nó lớn hơn minimum của Oracle.
Ví dụ:
fs.aio-max-nr = 3145728nếu đã được sizing dựa trên workload thì không cần hạ xuống 1048576.
7. kernel.shmmax
Oracle 19c đưa minimum:
kernel.shmmax >= 50% Physical RAMđơn vị là byte.
Ví dụ RAM 128GB:
128 × 1024³
= 137438953472 bytes50%:
68719476736Minimum:
kernel.shmmax = 68719476736Tuy nhiên không cần thiết phải giới hạn đúng 50%.
Nếu oracle-database-preinstall-19c đã đặt một giá trị lớn như:
kernel.shmmax = 4398046511104thì đây không phải vấn đề cần sửa chỉ vì nó lớn hơn RAM.
Điểm quan trọng:
kernel.shmmax >= Oracle requirement8. kernel.shmall
kernel.shmall được tính theo pages, không phải byte.
Oracle yêu cầu:
SHMALL >= SHMMAX / PAGE_SIZEKiểm tra page size:
getconf PAGE_SIZEThông thường:
4096Ví dụ:
SHMMAX = 68719476736
PAGE_SIZE = 4096thì:
SHMALL >=
68719476736 / 4096
=
16777216 pagesCấu hình:
kernel.shmall = 16777216Nếu hệ thống đã có shmall lớn hơn requirement thì không cần giảm.
9. HugePages
9.1 Kiểm tra HugePage Size
Không hard-code ngay 2MB.
Phải kiểm tra:
grep Hugepagesize /proc/meminfoVí dụ:
Hugepagesize: 2048 kBkhi đó:
HugePage Size = 2MB10. HugePages chỉ sizing cho SGA
Nguyên tắc:
Physical RAM
|
+----- HugePages -----> SGA
|
+----- Normal Pages --> PGA
--> OS
--> Grid
--> ASM
--> Agents
--> Page CacheKhông tính:
HugePages = SGA + PGAMà tính:
HugePages ≈ Total SGA sử dụng HugePages trên NODE11. Công thức sơ bộ
Nếu HugePage Size = 2MB:
HugePages
≈
SGA(GB) × 1024 / 2Ví dụ:
SGA = 72GBthì giá trị lý thuyết:
72 × 1024 / 2
=
36864 pagesKhông nên lấy 36864 rồi mặc định dùng ngay cho production.
Oracle khuyến nghị dùng:
hugepages_settings.shtheo MOS Note 401749.1.
Script cần chạy khi tất cả database cần HugePages đang hoạt động.
12. Cấu hình HugePages
Oracle 19c hướng dẫn có thể tách riêng:
vi /etc/sysctl.d/99-nr_hugepages.confVí dụ sau khi script xác định cần:
36874thì:
vm.nr_hugepages = 36874Apply:
sysctl -p /etc/sysctl.d/99-nr_hugepages.confKiểm tra:
sysctl vm.nr_hugepages
grep Huge /proc/meminfoQuan trọng:
vm.nr_hugepagestrong file chưa đủ để chứng minh Linux đã reserve được toàn bộ.
Phải xem:
HugePages_Total13. Nếu nr_hugepages khác HugePages_Total
Ví dụ:
vm.nr_hugepages = 36874nhưng:
HugePages_Total: 32000nghĩa là Linux chưa allocate được toàn bộ HugePages yêu cầu.
Một nguyên nhân thường gặp:
Memory fragmentationTrong trường hợp này Oracle hướng dẫn có thể cần reboot để HugePages được reserve sớm khi hệ điều hành khởi động.
14. memlock
memlock không nằm trong sysctl.
Cấu hình tại:
/etc/security/limits.confhoặc tốt hơn:
/etc/security/limits.d/oracle-database-preinstall-19c.confOracle 19c hướng dẫn khi HugePages được enable:
memlock >= 90% Physical RAMĐơn vị:
KBCông thức:
memlock(KB)
=
RAM(GB)
× 1024
× 1024
× 90%15. Ví dụ RAM 128GB
128 × 1024 × 1024 × 0.9
≈ 120795955 KBCấu hình:
oracle soft memlock 120795955
oracle hard memlock 120795955Nếu Grid owner cũng cần cấu hình theo thiết kế của hệ thống:
grid soft memlock 120795955
grid hard memlock 120795955Lưu ý đặc biệt:
Exadata:
memlock = unlimitedtheo hướng dẫn Oracle dành cho HugePages.
16. Kiểm tra memlock thực tế
Sau khi thay đổi phải logout/login lại.
su - oracle
ulimit -lVí dụ:
120795955Không được chỉ nhìn:
/etc/security/limits.confrồi kết luận đã thành công.
17. Open Files – nofile
Phải phân biệt hai tham số:
fs.file-maxvà:
nofileChúng hoàn toàn khác nhau.
fs.file-max:
System-wide maximum file handlesnofile:
Per-user/process open file descriptors18. fs.file-max
Oracle minimum:
fs.file-max = 6815744Đặt trong:
/etc/sysctl.d/97-oracle-database-sysctl.confKiểm tra:
sysctl fs.file-max
cat /proc/sys/fs/file-max19. nofile
Cấu hình tại:
/etc/security/limits.d/oracle-database-preinstall-19c.confVí dụ:
oracle soft nofile 65536
oracle hard nofile 65536Đây là cấu hình production phổ biến và phù hợp với hard limit do Oracle preinstall package thiết lập.
Kiểm tra:
su - oracle
ulimit -Sn
ulimit -HnKỳ vọng:
65536
6553620. nproc
Ví dụ baseline:
oracle soft nproc 16384
oracle hard nproc 16384Kiểm tra:
ulimit -Su
ulimit -HuLưu ý:
nproc phải được đánh giá cùng:
Oracle PROCESSES
Grid processes
OS processes
AgentsKhông tăng tùy tiện để chữa vấn đề connection storm.
21. stack
Baseline Oracle preinstall:
oracle soft stack 10240
oracle hard stack 32768Đơn vị:
KBKiểm tra:
ulimit -Ss
ulimit -Hs22. Async I/O
Oracle minimum:
fs.aio-max-nr = 1048576Kiểm tra:
sysctl fs.aio-max-nr
cat /proc/sys/fs/aio-max-nr
cat /proc/sys/fs/aio-nraio-max-nr là giới hạn concurrent outstanding asynchronous I/O requests.
Không nên tăng theo RAM.
Ví dụ sai:
RAM tăng gấp đôi
→ aio-max-nr tăng gấp đôiKhông có công thức Oracle như vậy.
Sizing cao hơn minimum phải dựa vào workload.
23. Transparent HugePages
Standard HugePages và Transparent HugePages là hai cơ chế khác nhau.
Với Oracle Database 19c theo mô hình static HugePages truyền thống, kiểm tra:
cat /sys/kernel/mm/transparent_hugepage/enabledMục tiêu:
always madvise [never]Nếu chưa disable thì phải thực hiện theo phương pháp phù hợp với Oracle Linux/kernel đang sử dụng và kiểm tra lại sau reboot.
24. Oracle Database Memory
Khi dùng HugePages, không dùng AMM.
Kiểm tra:
SHOW PARAMETER memory_target;
SHOW PARAMETER memory_max_target;
SHOW PARAMETER sga_target;
SHOW PARAMETER sga_max_size;
SHOW PARAMETER pga_aggregate_target;
SHOW PARAMETER pga_aggregate_limit;
SHOW PARAMETER use_large_pages;Với cấu hình HugePages production:
MEMORY_TARGET = 0
MEMORY_MAX_TARGET = 0Sử dụng:
SGA_TARGET
SGA_MAX_SIZE
PGA_AGGREGATE_TARGET
PGA_AGGREGATE_LIMIT25. USE_LARGE_PAGES
Sau khi HugePages và memlock đã được kiểm chứng đầy đủ, production có thể cấu hình:
ALTER SYSTEM SET use_large_pages='ONLY'
SCOPE=SPFILE SID='*';Ý nghĩa:
HugePages đủ
|
+----> Oracle START
SGA dùng Large Pages
HugePages thiếu
|
+----> Oracle không STARTƯu điểm là tránh tình trạng database âm thầm chạy bằng regular/mixed pages.
Không bật ONLY trước khi kiểm chứng HugePages và memlock.
26. Apply sysctl
Sau khi chuẩn hóa:
sysctl --systemKiểm tra:
sysctl fs.aio-max-nr
sysctl fs.file-max
sysctl kernel.sem
sysctl kernel.shmall
sysctl kernel.shmmax
sysctl kernel.shmmni
sysctl net.ipv4.ip_local_port_range
sysctl net.core.rmem_default
sysctl net.core.rmem_max
sysctl net.core.wmem_default
sysctl net.core.wmem_max
sysctl vm.nr_hugepages27. Kiểm tra toàn bộ sysctl source
Chạy:
systemd-sysctl --cat-confighoặc:
sysctl --systemvà quan sát file nào đang được đọc.
Sau đó:
grep -Rni "nr_hugepages" \
/etc/sysctl.conf \
/etc/sysctl.d/ \
/usr/lib/sysctl.d/ \
/run/sysctl.d/ 2>/dev/nullLàm tương tự cho tham số nghi ngờ.
Mục tiêu:
1 parameter
|
v
1 authoritative configuration
|
v
1 runtime valueKhông để:
/etc/sysctl.conf
+
97-oracle.conf
+
99-custom.conf
|
v
3 giá trị khác nhau28. Kiểm tra limits source
grep -RniE \
"oracle.*(nofile|nproc|stack|memlock)" \
/etc/security/limits.conf \
/etc/security/limits.d/Sau đó login mới:
su - oracleKiểm tra:
ulimit -Sn
ulimit -Hn
ulimit -Su
ulimit -Hu
ulimit -Ss
ulimit -Hs
ulimit -lRuntime ulimit mới là kết quả cuối cùng.
29. Kiểm tra trước restart Database
Không restart nếu chưa PASS:
grep Huge /proc/meminfo
free -g
ulimit -l
cat /sys/kernel/mm/transparent_hugepage/enabledKiểm tra:
HugePages_Total >= HugePages requirement
memlock đủ
THP đúng trạng thái
Normal RAM còn đủ cho OS/PGA/Grid30. Restart Oracle RAC
Với RAC thực hiện rolling từng node/instance theo kế hoạch thay đổi đã được phê duyệt.
Không restart đồng thời toàn cluster nếu không cần thiết.
Trước thao tác:
crsctl stat res -tKiểm tra:
srvctl status database -d <DB_UNIQUE_NAME>
srvctl status service -d <DB_UNIQUE_NAME>31. Kiểm tra ngay sau startup
grep Huge /proc/meminfoTheo dõi:
HugePages_Total
HugePages_Free
HugePages_Rsvd
HugePages_Surp
HugepagesizeNếu Oracle sử dụng HugePages:
HugePages_Freesẽ giảm đáng kể sau startup.
Nhưng không lấy HugePages_Free=0 làm mục tiêu.
32. Kiểm tra Alert Log
Tìm:
grep -i -A20 -B5 \
"PAGESIZE\|HugePages\|memlock\|ORA-27106" \
$ORACLE_BASE/diag/rdbms/*/*/trace/alert*.logOracle có thể ghi dạng:
PAGESIZE AVAILABLE_PAGES EXPECTED_PAGES ALLOCATED_PAGES ERROR(s)
2048K .... .... .... NONETiêu chí quan trọng:
ALLOCATED_PAGES ≈ EXPECTED_PAGES
ERROR(s) = NONE33. Xử lý ORA-27106
Nếu gặp:
ORA-27106:
system pages not available to allocate memorykhông sửa shmmax, shmall, HugePages và memlock cùng lúc.
Kiểm tra theo thứ tự:
1. Alert log EXPECTED_PAGES
↓
2. HugePages_Total
↓
3. HugePages_Free
↓
4. HugePages_Rsvd
↓
5. vm.nr_hugepages runtime
↓
6. ulimit -l runtime
↓
7. SGA_MAX_SIZE
↓
8. USE_LARGE_PAGES
↓
9. MEMORY_TARGETNếu:
vm.nr_hugepages = 36874nhưng:
HugePages_Total < 36874Linux chưa reserve đủ HugePages.
Nếu không tăng được HugePages_Total, khả năng cao RAM fragmentation; có thể cần reboot server để HugePages được reserve ngay từ boot.
34. Checklist nghiệm thu
Backup
/etc/sysctl.confBackup
/etc/sysctl.dBackup
/etc/security/limits.confBackup
/etc/security/limits.dKhông còn kernel parameter xung đột
fs.aio-max-nr >= 1048576fs.file-max >= 6815744kernel.sem >= 250 32000 100 128kernel.shmmni >= 4096kernel.shmmaxđạt Oracle requirementkernel.shmallđủ theo SHMMAX/page sizevm.nr_hugepagesđược sizing theo workload thực tếHugePages_Totalđạt giá trị yêu cầumemlock >= 90% RAMkhi HugePages enabledulimit -lđúng sau login mớinofileđúngnprocđúngstackđúngTHP đúng trạng thái
MEMORY_TARGET=0MEMORY_MAX_TARGET=0SGA/PGA đúng thiết kế
USE_LARGE_PAGESđúng thiết kếOracle startup thành công
Alert log không có lỗi HugePages
ALLOCATED_PAGES ≈ EXPECTED_PAGESRAC resources ONLINE
Service ONLINE đúng node
Không phát sinh ORA-27106
Không phát sinh ORA-04030/ORA-04031 bất thường
35. Cấu trúc file cuối cùng khuyến nghị
/etc/sysctl.d/97-oracle-database-sysctl.conf
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.sem = 250 32000 100 128
kernel.shmmni = 4096
kernel.panic_on_oops = 1
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
# kernel.shmmax = <sizing thực tế>
# kernel.shmall = <sizing thực tế>/etc/sysctl.d/99-nr_hugepages.conf
vm.nr_hugepages = <GIÁ TRỊ TỪ hugepages_settings.sh>Có thể quản lý vm.swappiness trong một file tuning riêng nếu tổ chức có OS baseline.
/etc/security/limits.d/oracle-database-preinstall-19c.conf
oracle soft nofile 65536
oracle hard nofile 65536
oracle soft nproc 16384
oracle hard nproc 16384
oracle soft stack 10240
oracle hard stack 32768
oracle soft memlock <>=90% RAM, KB>
oracle hard memlock <>=90% RAM, KB>
oracle soft data unlimited
oracle hard data unlimited36. Nguyên tắc vận hành cuối cùng
Không áp dụng công thức:
RAM → suy ra tất cả kernel parameterscho Oracle.
Phải chia thành ba nhóm:
NHÓM 1 – Oracle minimum
fs.file-max
fs.aio-max-nr
kernel.sem
network parameters
|
v
Đạt minimum trướcNHÓM 2 – Phụ thuộc RAM/SGA
kernel.shmmax
kernel.shmall
memlock
HugePages
|
v
Sizing theo server/databaseNHÓM 3 – Per-user/process
nofile
nproc
stack
memlock
|
v
limits.conf / limits.dVà nguyên tắc quan trọng nhất:
File cấu hình chỉ thể hiện mong muốn. Runtime kernel value, runtime
ulimit,/proc/meminfovà Oracle alert log mới chứng minh cấu hình thực sự có hiệu lực.
Một điều tôi muốn sửa so với cách tính trước đó: kernel.shmmax không cần đặt bằng 90% RAM và kernel.shmall cũng không nên mặc định tính bằng 90% RAM. Oracle 19c công bố minimum shmmax = 1/2 physical RAM, còn shmall phải ≥ shmmax tính theo số page. Nếu preinstall RPM đã đặt giá trị lớn hơn thì Oracle cũng nói fixup không hạ giá trị đó xuống. (Oracle Docs)
Riêng HugePages, bài trên tranvanbinh.vn hiện đã cập nhật theo hướng SGA + hugepages_settings.sh; Oracle 19c chính thức hướng dẫn lưu vm.nr_hugepages trong /etc/sysctl.d/99-nr_hugepages.conf, memlock ít nhất 90% RAM khi bật HugePages, logout/login rồi xác minh bằng ulimit -l. Nếu kernel không reserve đủ nr_hugepages vì fragmentation, Oracle nói có thể phải reboot. (Tran Van Binh)
Tài liệu Oracle tham chiếu trực tiếp: Oracle 19c – Minimum Parameter Settings, Oracle 19c – Changing Kernel Parameter Values và Oracle 19c – Configuring HugePages on Linux.
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