Files
accounting_dev_v2/docs/PRODUCTION-DB-UPGRADE.md
T
2026-09-11 16:03:00 +07:00

42 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Runbook Upgrade Database Production
Jangan arahkan `.env` development ke Production. Lakukan upgrade pada maintenance window dan gunakan salinan staging terbaru terlebih dahulu.
## Sebelum perubahan
1. Bekukan transaksi dan buat full backup database serta uji restore.
2. Catat versi migration Production dan bandingkan struktur, engine, charset, trigger, role, serta foreign key dengan staging.
3. Jalankan pemeriksaan berikut:
```sql
SELECT no_ref, COUNT(*) total, GROUP_CONCAT(id ORDER BY id) journal_ids
FROM journals GROUP BY no_ref HAVING COUNT(*) > 1;
SELECT r.id, r.nama_role, COUNT(u.id) users
FROM roles r LEFT JOIN users u ON u.role_id=r.id GROUP BY r.id, r.nama_role;
```
4. Rekonsiliasi setiap referensi duplikat terhadap dokumen sumber, invoice, stok, aset, dan bukti bank. Tentukan nomor koreksi bersama bagian Finance. Jangan menjalankan `accountingrepair duplicate_refs` di Production.
5. Pastikan role bernama `Admin` tersedia. Tentukan approver Production; seed default menggunakan role tersebut dan wajib ditinjau.
## Urutan deployment
1. Deploy kode dan backup kedua sesaat sebelum migration.
2. Jalankan migration 001–008.
3. Konfigurasi `approval_workflows` dan `approval_workflow_steps` sesuai matriks otorisasi perusahaan. Uji dengan akun non-pembuat.
4. Koreksi duplikat Production menggunakan change script yang telah disetujui dan menyimpan mapping nomor lama/baru.
5. Jalankan migration 009 untuk unique constraint `journals.no_ref`.
6. Jalankan `php index.php accountingcheck`, smoke test submit–approve–post–reverse, laporan, dan tutup/buka periode.
## Struktur baru yang wajib dipertahankan
`approval_workflows`, `approval_workflow_steps`, `approval_requests`, `approval_actions`, dan `immutable_audit_logs`; trigger `trg_immutable_audit_no_update`, `trg_immutable_audit_no_delete`, serta unique index `uq_journals_no_ref`.
Audit log adalah append-only. Koreksi dilakukan dengan event audit baru, bukan UPDATE/DELETE. Akses langsung database ke tabel audit harus dibatasi untuk user aplikasi; DBA darurat harus masuk prosedur change management.
Untuk perubahan invoice/piutang Tahap 5, lanjutkan dengan `PRODUCTION-DB-TAHAP-5.md` setelah seluruh langkah Tahap 4 selesai.
## Rollback
Rollback schema setelah transaksi baru masuk berisiko menghilangkan kontrol dan tidak disarankan. Jika smoke test gagal, hentikan transaksi, rollback kode, pertahankan tabel kontrol untuk investigasi, atau restore backup penuh setelah persetujuan Finance/DBA.