Thứ Năm, 27 tháng 7, 2023

Chia sẻ kinh nghiệm lỗi postgresql: could not locate a valid checkpoint record

Khi làm việc với postgresql và chạy một thời gian dài, có khả năng bạn gặp phải một vấn đề như sau khiến server không thể chạy:
postgresql_error

Nguyên nhân

Trong cấu trúc thư mục của server postgres, có chứa folder pg_wal. WAL viết tắt của write-access log, có thể hiểu đơn giản là các file log mỗi khi bản ghi mới được tạo ra trong database. Bạn có thể tìm hiểu thêm về WAL tại đây
postgresql_structure

Khi tìm kiếm một bản ghi trong transaction log nhưng không tìm thấy, nó sẽ báo lỗi như trên, có thể do file bị mất hay corrupt. Cách xử lý duy nhất khi gặp là reset lại pg_wal.

Nguyên nhân file bị corrupt có thể do chạy nhiều transaction, có câu lệnh sql bị lỗi nhưng không được bắt lỗi để rollback transaction lại, dẫn đến có nhiều transaction chạy liên tục không dừng.

Hướng dẫn xử lý

Để reset lại file WAL bạn cần phải cài postgresql, có sẵn các lệnh của postgresql.

Nếu bạn đã cài sẵn trên máy, bạn có thể chạy lệnh sau:

# Hoặc pg_resetwal -f DATADIR
pg_resetwal DATADIR

DATADIR là đường dẫn trỏ đến thư mục postgresql. Ví dụ /var/lib/postgresql/data

Xong rồi bạn khởi chạy lại postgresql, như vậy bạn đã xử lý thành công

Nếu bạn chạy postgresql bằng docker container nhưng do container không khởi chạy, bạn không thể ssh vào để reset lại được. Trong trường hợp này bạn phải cài postgresql trên máy bạn rồi chạy lệnh như trên.

Cách phòng tránh

Ta thường bắt đầu chạy transaction, thực hiện các lệnh CRUD vào database, thành công xong thì commit. Nhưng trong trường hợp một câu lệnh trong transaction gặp lỗi, ta thường bỏ qua và trả ra error luôn mà quên không thực hiện rollback transaction trước. Dẫn tới càng về sau càng nhiều transaction chạy liên tục.

Để tránh lỗi này hay gặp phải, ta cần xử lý lỗi khi chạy các câu lệnh CRUD trong transaction, nếu gặp lỗi cần rollback lại ngay. Ví dụ thay đổi khi viết code nhiều người có khả năng viết như sau:

   transaction = db.Begin()

   err = transaction.Insert(.....)
   if (err != nil) {
      // Khi có lỗi không rollback transaction tại đây, cần bổ sung transaction.Rollback()
      return err
   }

   transaction.Commit()
=============================
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* 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
=============================
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

=============================
Chia sẻ kinh nghiệm lỗi postgresql: could not locate a valid checkpoint record, 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, 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, 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