Thứ Tư, 25 tháng 3, 2026

Phân biệt WAL log và WAL archive trong PostgreSQL_GM

Phân biệt WAL log và WAL archive đơn giản nhất như này:

  • WAL log là các file Write-Ahead Log gốc mà PostgreSQL đang ghi trong cluster để bảo đảm crash recovery, replication và các cơ chế phục hồi. wal_level quyết định mức thông tin được ghi vào WAL; mức replica đủ cho WAL archiving và replication, còn logical ghi thêm thông tin cho logical decoding.

  • WAL archive không phải một loại log khác, mà là bản sao lâu dài của các file WAL được PostgreSQL đẩy ra nơi lưu trữ ngoài cluster thông qua archive_modearchive_command, để dùng cho PITRlog shipping / warm standby. PostgreSQL yêu cầu muốn khôi phục thành công bằng continuous archiving thì phải có một chuỗi WAL archive liên tục kéo dài ít nhất từ thời điểm bắt đầu base backup.

1) Hiểu đúng bản chất

WAL log là gì?

Mỗi khi có INSERT/UPDATE/DELETE/DDL, PostgreSQL ghi thay đổi vào WAL trước, rồi mới cập nhật data file sau. Vì vậy WAL là “nhật ký thay đổi gốc” của hệ thống. Nó nằm trong cluster và phục vụ vận hành hiện tại: khởi động lại sau sự cố, replication, archiving.

Hình dung dễ hiểu:

  • Data file = sổ cái chính

  • WAL log = nhật ký ghi nhận mọi thay đổi trước khi ghi vào sổ cái

WAL archive là gì?

Khi bật continuous archiving, PostgreSQL sẽ lấy từng file WAL đã hoàn tất và copy sang một nơi lưu trữ riêng bằng archive_command. Nơi đó có thể là thư mục khác, NFS, object storage qua script/module, hoặc máy DR. Bản archive này dùng để khôi phục về một thời điểm bất kỳ hoặc cho standby lấy WAL khi cần.

Hình dung dễ hiểu:

  • WAL log = sổ làm việc đang ghi

  • WAL archive = bản lưu hồ sơ đã đóng tập và cất kho

2) Khác nhau ở đâu?

WAL log

  • nằm trong cluster PostgreSQL, trong khu vực WAL hiện hành

  • PostgreSQL tự quản lý vòng đời và tái sử dụng theo cơ chế WAL

  • phục vụ hoạt động hiện tại và phục hồi tức thời sau crash

  • là nguồn dữ liệu đầu vào cho replication và archiving.

WAL archive

  • nằm ngoài khu vực WAL hoạt động của cluster

  • là bản sao bền vững hơn, lưu dài hạn hơn

  • phục vụ PITR, warm standby, log shipping

  • không thay thế WAL gốc, mà sao chép từ WAL gốc ra.

3) Quan hệ giữa hai cái

Luồng đúng là:

Transaction → WAL log trong cluster → file WAL hoàn tất → archive_command copy sang WAL archive → standby/PITR dùng WAL archive

Nói cách khác:

  • không có WAL log thì không có WAL archive

  • WAL archive là “WAL đã được xuất bản lưu trữ”, không phải cơ chế ghi riêng.

4) WAL archive khác gì streaming replication?

Đây là chỗ nhiều người hay nhầm.

  • Streaming replication: standby nhận WAL trực tiếp qua mạng từ primary, gần real-time hơn.

  • Archive/log shipping: standby lấy WAL theo file từ kho archive bằng restore_command; đây là mô hình warm standby hoặc đường bổ sung khi stream bị gián đoạn.

Thực tế production thường dùng cả hai cùng lúc:

  • streaming để đồng bộ gần real-time

  • archive để PITR và bù WAL khi standby bị hụt.

5) Cấu hình WAL archive

Bước 1: sửa postgresql.conf

Ví dụ:

wal_level = replica
archive_mode = on
archive_command = 'test ! -f /u01/wal_archive/%f && cp %p /u01/wal_archive/%f'

Ý nghĩa:

  • wal_level = replica: ghi đủ thông tin để hỗ trợ replication và archiving. logical cũng được vì nó bao gồm mức cao hơn.

  • archive_mode = on: bật cơ chế archive WAL.

  • archive_command: cứ mỗi file WAL hoàn tất, PostgreSQL gọi lệnh này; %p là đường dẫn file WAL nguồn, %f là tên file WAL.

Bước 2: tạo thư mục archive

mkdir -p /u01/wal_archive
chown -R postgres:postgres /u01/wal_archive
chmod 700 /u01/wal_archive

Thư mục này phải đủ quyền để user chạy PostgreSQL ghi file vào.

Bước 3: restart PostgreSQL

Với các tham số nền như wal_levelarchive_mode, nên restart để chắc chắn có hiệu lực đầy đủ. Việc thay đổi WAL configuration thuộc nhóm cấu hình server runtime/WAL.

systemctl restart postgresql-11

Bước 4: kiểm tra

SHOW wal_level;
SHOW archive_mode;
SHOW archive_command;

Nếu muốn biết giá trị đang có hiệu lực và nguồn gốc:

SELECT name, setting, source
FROM pg_settings
WHERE name IN ('wal_level','archive_mode','archive_command');

6) Kiểm tra archive có chạy thật không

Ép PostgreSQL đổi sang WAL file mới:

SELECT pg_switch_wal();

Hàm này buộc server chuyển sang WAL file mới, giúp WAL hiện tại có thể được archive.

Sau đó kiểm tra thư mục archive:

ls -ltr /u01/wal_archive | tail

Nếu có file WAL mới xuất hiện, archive_command đang hoạt động.

7) Cấu hình standby dùng WAL archive

Ở standby, cấu hình lấy WAL từ archive bằng restore_command:

restore_command = 'cp /u01/wal_archive/%f "%p"'

Ý nghĩa:

  • standby cần file WAL nào thì chạy lệnh này để kéo file từ archive về vị trí PostgreSQL yêu cầu

  • đây là cơ chế cốt lõi của warm standby / archive recovery. PostgreSQL có tài liệu riêng cho các tham số archive recovery như restore_command, archive_cleanup_command.

8) Khi nào nên bật WAL archive?

Nên bật khi:

  • cần PITR

  • cần DR

  • cần giữ chuỗi WAL để base backup có thể phục hồi đầy đủ

  • muốn standby có đường lấy bù WAL ngoài streaming.

Không nhất thiết bật nếu:

  • chỉ là lab nhỏ

  • không cần PITR

  • không cần DR

  • chấp nhận chỉ có backup kiểu dump/base backup đơn giản.

9) Những hiểu nhầm phổ biến

  • “Bật archive là thay thế streaming replication”: sai; hai cơ chế phục vụ khác nhau và thường được dùng cùng nhau.

  • “WAL archive nằm trong pg_wal: sai về mặt vận hành; pg_wal là nơi WAL hoạt động hiện hành, còn archive là nơi bên ngoài do anh chỉ định.

  • “Có base backup là đủ để PITR”: chưa đủ; cần cả base backup và chuỗi WAL archive liên tục.

10) Mẫu cấu hình khuyến nghị dễ dùng

Primary

wal_level = replica
archive_mode = on
archive_command = 'test ! -f /u01/wal_archive/%f && cp %p /u01/wal_archive/%f'
max_wal_senders = 10

max_wal_senders là số tiến trình gửi WAL cho standby/receiver, dùng khi có streaming replication.

Standby dùng archive

restore_command = 'cp /u01/wal_archive/%f "%p"'

Kiểm tra nhanh

SHOW wal_level;
SHOW archive_mode;
SHOW archive_command;
SELECT pg_switch_wal();
ls -ltr /u01/wal_archive | tail

Chốt rất ngắn

  • WAL log = nhật ký thay đổi gốc PostgreSQL đang dùng để vận hành và phục hồi.

  • WAL archive = bản sao lâu dài của các file WAL đó, đẩy ra kho lưu trữ để phục vụ PITR, DR và warm standby.

Tôi có thể viết tiếp cho anh một runbook step-by-step riêng cho PostgreSQL 11 gồm: cấu hình primary, test archive, cấu hình standby với restore_command, và checklist lỗi thường gặp.

=============================
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

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master