Checking and Proving a Maximo Data Migration
Updated on · VAGANET EAM
In short. The quality of a data migration is checked at three moments: before the load (the file against the target environment's configuration), during (test batch, row-by-row rejections) and after (numeric reconciliation and read-back from Maximo). An API 200 code is not proof; a read-back is.
The customer or the business does not ask "did the load finish?", but "is all our data in Maximo, and correct?". Here is how to answer with numbers.
Before the load: validate the file
Every check done before sending avoids a rejection, a fix and a replay. Check the file against the configuration of the target environment (DEV, UAT or PROD), read at the time of the check:
| Check | Error avoided |
|---|---|
| Columns known to the object structure | Attribute silently ignored or rejected |
| Required attributes filled in | "Required attribute" rejection |
| Lengths and types (dates, numbers, decimals) | Value truncated or rejected, shifted columns |
| Values in value lists | Unknown status, type or unit |
| Existing references (parents, locations, items) | "Linked record does not exist" rejection |
| Duplicate keys in the file | Silent overwrite or rejection |
| File format (delimiter, quotes, encoding) | Rows broken by a description containing a separator |
During: test batch and rejection tracking
First run a test batch of a few dozen real rows. It reveals what no file check can see: automation scripts, conditions, status rules, integration user rights. It also gives the throughput, and therefore the duration of the full load.
During the full load, track rejections in real time and classify them by cause. A single cause producing thousands of rejections should stop the load: better to fix and restart than to replay 100,000 rows in error.
After: reconcile and read back
For each object, produce a reconciliation table:
| Object | Expected | Validated | Loaded | Rejected | Explained gap |
|---|---|---|---|---|---|
| Locations | 12,480 | 12,480 | 12,480 | 0 | — |
| Assets | 48,210 | 48,195 | 48,195 | 0 | 15 source duplicates excluded (signed list) |
| Inventory | 96,004 | 96,004 | 95,990 | 14 | Closed storeroom, to be decided |
Then read back from Maximo: count the records present per site and compare a few key attributes (status, location, parent, cost) with the file. This read-back catches cases that send statuses do not show: a record created on the wrong site, an ignored attribute, a value transformed by a rule.
Classifying load errors
- Configuration: missing value list, attribute or right in the environment; fixed in the configuration, then replayed.
- Mapping: wrong column, wrong transformation rule; fixed in the matrix.
- Source data: duplicate, missing value, orphan reference; fixed at the source with the business.
- Order: linked object not yet loaded; review the load order.
- Technical: network outage, timeout, authentication redirect; replayed as is, provided the load can be resumed without duplicates.
The evidence pack
At cutover, hand the business a pack that fits in a few pages: reconciliation table per object, list of accepted rejections with their justification, read-back result, version of the files and mapping matrix used, date and duration of each load. It is this pack, more than the load itself, that lets you close the project with confidence.
MAS9 automates these three steps: file validation against each environment, test batch and row-by-row rejection tracking, then read-back from Maximo at the end of the load to prove that every row arrived.
Frequently asked questions
How do you prove a Maximo data migration is complete?
By reconciling four figures per object (rows expected, validated, loaded, and rejected with reason) and reading back from Maximo after the load: counting the records present and comparing key attributes with the source file. A positive API response is not enough: only a read-back proves the data is in the database.
What checks should you run before loading a file into Maximo?
Columns known to the object structure, required attributes filled in, lengths and types respected, values present in the target environment's value lists, references to parents and linked objects existing, and no duplicate keys in the file.
What rejection rate is acceptable?
The goal is zero unexplained rejections. Residual rejections must be listed, justified and accepted by the object's business owner before go-live.
Why is a file validated in DEV rejected in PROD?
Because environments diverge: a value added to a list in DEV, a required attribute enabled in PROD, a different automation script. This is why validation must be done against the configuration of the environment actually targeted.
Load your Maximo data without silent errors
MAS9 checks your files against each environment's configuration, resumes an interrupted load without duplicates, then reads Maximo back to prove every row arrived.
Discover MAS9