- 22
- September
An ERP restore drill means taking a real backup, restoring it onto a test machine, and letting the business users try their critical work until you can prove they are back within the agreed time. A "backup succeeded" message only says a file was written. It says nothing about whether you can get the system back. This is a drill checklist for managers, IT and process owners, written from how Saeree ERP is actually deployed on PostgreSQL, and it builds on your disaster recovery plan.
In one line: A backup file is not enough. Restore it onto a test machine, start the application, open attachments, log in with real roles, post a transaction, and time the whole thing until the business says it works.
Change the question from "did last night's backup run" to "if the main server died right now, who restores it, from which copy, how long does it take, and what does finance need to see before they accept it". The second question forces answers from people who normally sit at different desks: where the files are, who has the passwords, how the network is set up, and who knows what the report totals should be.
The times in this article are examples to explain the method. They are not Saeree ERP service commitments or industry standards. Each organisation sets its own targets. Technical references were checked on 22 September 2026.
1. A Successful Backup Does Not Mean You Can Restore
There are three levels of checking, and each answers a different question. Most organisations stop at the first.
| Level | What it tells you | What it still does not tell you |
|---|---|---|
| The system reports "backup succeeded" | A file was created on schedule | Is it complete, readable, and from the right server? |
| Backup file verification | The file is not corrupt and the size makes sense | Does the database start, and does it hold data up to the time you need? |
| Real restore with business sign-off | Critical work can be done, and how long it took | What failed, who fixes it, and by when? |
Even PostgreSQL's own tooling warns that pg_verifybackup checks the backup files but cannot replace starting the database and using it. You still have to do a test restore and check the data [1].
A working login page is not the finish line either. Some user groups may not be able to log in, attachments may not open, a report may depend on another service. Start from the work the organisation cannot do without, then trace backwards to everything that work depends on.
2. RPO (Recovery Point Objective) and RTO (Recovery Time Objective) in Plain Business Terms
RPO (Recovery Point Objective) is how many minutes or hours of data you can afford to lose. RTO (Recovery Time Objective) is how long the system can stay down before it must be usable again. Business and IT agree these two numbers together, and the agreement must say when the clock starts and what "usable again" means in practice.
Example: the system goes down at 14:00. With an RPO of 15 minutes, the restored data must be complete to at least 13:45. With an RTO of four hours, business users must be doing critical work again by 18:00. Finishing the database restore at 15:00 does not count as done if attachments still will not open or users still cannot log in.
An hourly backup does not mean your RPO is one hour: you have to prove the latest set actually restores, and how far its data reaches. Report the number written in the plan and the number measured in the drill separately.
Ask process owners exactly what they can live with. If two hours of data are lost, which paper documents do they re-key the goods receipts from? While the system is down, who writes transactions down, and who enters them afterwards? Cutting downtime and cutting data loss cost different money. Management needs to see the options alongside drill results before setting targets.
3. What Saeree ERP Is Made Of, and What You Must Back Up
Before planning, know what the system consists of. Saeree ERP has a simple structure: all the data lives in one place.
| Component | How it really is in Saeree ERP | What to prepare |
|---|---|---|
| Database | One PostgreSQL database. Every module (accounting, budgeting, procurement, inventory, HR) lives in that single database, so one backup captures everything and a restore brings back the whole thing. There is no module-by-module restore. | The latest backup, the restore procedure, and a matching PostgreSQL version |
| Attachments | Stored inside the database by default, so they come with the backup. If your organisation configured attachments to be stored in a server folder instead, that folder must be backed up too, at the same point in time as the database. | Check which setting is in use and write it into the runbook |
| Application | A WAR file running on WildFly. It holds no business data. Recovery means installing WildFly, deploying the WAR, and pointing the datasource at the database. | The exact WAR version in production, the WildFly configuration files, and any customised reports |
| Machine | Most customers run on cloud infrastructure as a VM. Both Proxmox and VMware are supported. | VM-level backup from the hypervisor, and a template for building a new machine |
| Accounts and passwords | Database administrator password, WildFly credentials, backup decryption keys, SSL certificates | At least two people who know them, stored securely, never written into the drill report |
| Network | DNS, certificates, firewall rules and authentication | A route to the test machine that is isolated from production |
| Automation | Scheduled jobs, email notifications and integrations with external systems | Disabled or redirected before the restored system is started |
The joint StopRansomware Guide from CISA recommends offline, encrypted backup copies and regular restore testing [3]. In your drill, also test that the person responsible can actually retrieve that copy and use it, without depending on a single individual.
4. Pick a Backup Method That Matches Your RPO
A system running on a VM has three backup options. They can be combined, and most organisations should use at least two.
| Method | What you get | Limitation | Best for |
|---|---|---|---|
| VM-level backup (Proxmox Backup Server, VMware snapshot, or the hypervisor's backup software) | The whole machine: operating system, WildFly and database. Fast to bring back as the same machine. | The image is like a machine that had its plug pulled. PostgreSQL recovers itself on startup, but the recovery point is less precise than a dump, and the files are large. | Short RTO, where the whole machine must come back quickly |
pg_dump of the whole database (the standard tool shipped with Saeree ERP) | One file with every module. Can be moved to a new machine or a newer PostgreSQL. Restored with psql. | Anything after the dump time is lost. With a nightly dump, the RPO you can prove is one day. | The primary set with a clear recovery point, and the easiest one to drill |
| PITR (base backup plus continuous WAL) | Recovery to the exact minute you choose | Requires WAL archiving and ongoing storage management. A pg_dump cannot stand in for the base backup [2]. | An RPO measured in minutes |
A warning about the database restore script shipped with the system: it drops the existing database and creates a new one before importing. Run it on the test machine only, and check the target database name every time before pressing Enter. If you are also upgrading PostgreSQL, test that as a separate exercise so you know whether a problem came from the restore or from the upgrade. Read more in why Saeree ERP chose PostgreSQL and our ERP security guidance.
5. Drill on a Separate Machine, and Close the Exits Before Starting the Application
Build a new VM on a network isolated from production. Before starting WildFly, disable outgoing email, external integrations and scheduled jobs, because the restored database carries production settings with it, including user email addresses and the endpoints it was connected to.
Never drill on the production machine: never restore a backup over the live system to prove it works. Give the test machine a clearly different name, put a warning banner on screen, and agree in advance how the test data will be deleted afterwards.
An example of checking that a dump file really restores. Run it on the test machine, and adjust the database and user names to your system.
# Test machine only createdb -U erp_user erp_test psql -U erp_user -d erp_test -f ExpDat.dmp # Recovered data point = timestamp of the newest record in the database psql -U erp_user -d erp_test -c "select max(created) from c_invoice;"
Agree the scenario before you start, for example "the main server is dead but the backup files are intact" or "the primary administrator cannot be reached". Each scenario tests a different weak point. If IT prepared the machine in advance, say so in the report, so the measured time is not mistaken for a real incident-to-service time.
Start with a handful of critical tasks: open the remaining budget balance, find a purchase order, open its attachment, and post one goods receipt. The people who do that work every day should run the test, not IT on their behalf.
6. The Business Signs Off, Not IT
| Check | How | Who confirms |
|---|---|---|
| How far the data reaches | Look at the newest records and compare with transactions known to be entered before and after the outage | Database administrator and process owner |
| Balances and reports | Print the budget report or the creditor ledger for the same period and compare with the copy kept before the drill | Finance or budgeting |
| Attachments | Open sample documents from several periods, old and recent | Procurement or inventory |
| Permissions and approval chain | Log in with accounts of different roles and submit one item for approval | Process owner |
| New transactions | Post a test record and check the document number and status | Key users |
| External connections | Confirm they are off, or pointed at test endpoints | System administrator |
Prepare reference records before the drill day. "The data looks complete" cannot be repeated, and it usually misses the transactions entered just before the outage.
Write down the time at every step: scenario starts, responsible person reached, backup files retrieved, database restored, application up, business confirms it works. Once you see the times step by step you know where the bottleneck is. Often it is finding a person or waiting for a password, not the speed of the hardware.
Finding problems in a drill is a good result: record what failed, who fixes it and by when, then drill that step again. A frank report makes it easier to get budget for what is needed than a report that says "pass" with hidden conditions.
7. A One-Page Report Management Can Act On
| Section | Must include |
|---|---|
| Scenario drilled | Which system, what kind of failure, what was prepared in advance |
| Targets versus results | Agreed RPO/RTO, how far the recovered data reached, what time the business was ready |
| Sign-off results | Pass, fail or not tested, with evidence |
| What to fix | Who, by when, how much it costs, and the retest date |
| Next round | Retest the fixed step only, or drill the whole system after a machine change, a version upgrade or a cloud migration |
Backup file checks can run often and automatically. A full restore drill belongs after major changes, such as a PostgreSQL upgrade or a move to a new VM, and at least once a year. Set the frequency from how critical the work is and the budget you have, not from someone else's number.
8. What We Recommend to Saeree ERP Customers
Because every module lives in one database and the application is a WAR that can simply be reinstalled, recovering Saeree ERP comes down to one main job: get the database back, complete and at the right point in time. Our recommendations:
- Two layers of backup: a VM-level backup to bring the whole machine back fast, and a daily database dump kept off the machine for a clear recovery point that can also be moved to new hardware.
- If you need an RPO in minutes, add PITR and plan the storage for WAL.
- Keep the production WAR version, the WildFly configuration and customised reports next to the backups, so nobody has to hunt for them during an incident.
- Drill the restore onto a new VM on the Proxmox or VMware you already run, at least once a year and after every major upgrade.
- Use the list of modules your organisation actually uses to decide which departments must sign off.
Time targets, password custody and who performs the restore differ by customer agreement. Our team can build the runbook together with your system administrators. If AI helps summarise the drill report, send only the information you are allowed to share and have the responsible person check it again. AI output is not proof that the restore worked.
Conclusion
Start with one scenario and one set of critical tasks. Check the backup, restore onto a separate machine, time it until the business says it works, then fix what failed before the next round. What the organisation gets is an evidence-backed answer to three questions: in a real incident, how many hours of data would be lost, how many hours would work stop, and who has to do what.
Confidence that you can recover comes from the day you actually did it, not from a message that says the backup succeeded.
— Paitoon Butri
References
Checked 22 September 2026. PostgreSQL 18 documentation is used as the example; use the manual matching your installed version. The checklist and example figures are the author's recommendations.
- PostgreSQL: pg_verifybackup
- PostgreSQL: Continuous Archiving and Point-in-Time Recovery
- CISA, FBI, NSA and MS-ISAC: StopRansomware Guide (2023)
Want to know whether your system can really be restored?
Let Grand Linux build the backup and restore runbook for Saeree ERP together with your administrators, on Proxmox, VMware or the cloud.
Request a Free Demo02-347-7730 | sale@grandlinux.com



