IBM Maximo Data Migration: Running the Project End to End
Updated on · VAGANET EAM
In short. A Maximo data migration is rarely won at load time: it is won at mapping and cleansing of the sources. Organize the project in seven phases, have every file validated by a business owner, rehearse the full load at least twice before production, and finish with a numeric reconciliation.
Replacing a legacy CMMS, consolidating several instances, absorbing an acquired site: every IBM Maximo Manage project includes a data migration workstream. Here is the method that gets you to cutover without surprises.
The seven phases of a data migration project
| Phase | Goal | Deliverable |
|---|---|---|
| 1. Scoping | Scope, volumes, sources, owners, schedule | Signed scoping note |
| 2. Extraction | Pull data out of the source systems at a fixed date | Raw extracts and their date |
| 3. Mapping | Match each source field to a Maximo attribute | Mapping matrix per object |
| 4. Cleansing | Duplicates, naming conventions, missing values, obsolete codes | Target files validated by the business |
| 5. Mock loads | Replay the whole migration on a representative environment | Error report and durations |
| 6. UAT | Users check the data in Maximo | UAT sign-off report |
| 7. Cutover | Freeze sources, final extraction, production load | Signed final reconciliation |
Mapping: the real heart of the project
The mapping matrix links the source model to the Maximo model, object by object. For each target attribute, it states the source, the transformation rule and the default value:
- Keys: which column becomes
ASSETNUM,LOCATION,ITEMNUM; do you keep legacy codes or renumber? - Value lists: a lookup table between source statuses, types and priorities and the values of the Maximo domains.
- Hierarchies: how to rebuild parents (locations, assets) and systems.
- Organization and site: which Maximo site receives each source record.
- Added attributes: data with no standard equivalent, to be created in the configuration before the load.
Version the matrix: each mock load changes it, and production must use the validated version, not the last one modified.
Cleansing the source data
The sources of a fifteen-year-old CMMS invariably contain duplicates, abandoned codes and free-text fields used for purposes other than intended. Handle these cases before the load, in the files, and never in Maximo after the fact:
- duplicate items (the same part under several references) and assets;
- orphan locations or loops in the hierarchy;
- inconsistent units of measure and currencies;
- impossible dates, mixed formats, different decimal separators (comma and period);
- special characters and line breaks in descriptions, which break CSV files.
The decimal separator often trips up projects in countries that use the comma: a cost of
12,50 read as text, or a semicolon delimiter declared incorrectly, shifts every column. Check
the format before sending, not after.
Mock loads
A mock load replays the entire migration, in dependency order (see the load order), on an environment configured like production. It serves three purposes: finding mapping errors, measuring durations and rehearsing the runbook. After each one:
- classify rejections by cause (configuration, mapping, source data, business rule);
- fix at the source or in the matrix, never by hand in Maximo;
- record durations per object to size the cutover window.
Two rehearsals are a minimum; three are common when the volume exceeds a few hundred thousand rows.
Preparing the cutover
Cutover is a timed operation: freeze entry in the old system, final extraction, transformation, load, checks, opening to users. To make it safe:
- write a minute-by-minute runbook based on the last mock load;
- prepare a recovery plan if the load is interrupted: resume at the exact row, with no duplicates, rather than starting over;
- decide the go / no-go criterion in advance (rejection rate, critical objects complete);
- keep the old system read-only during the stabilization period.
Reconcile and prove
A data migration is only finished when you can demonstrate, with figures, that the expected data is in Maximo: rows extracted, rows validated, rows loaded, rows rejected with their reason. The guide quality control and reconciliation details the checks to run object by object.
The most common pitfalls
- Configuring during the load: every attribute or value list added late invalidates the previous rehearsals.
- Fixing in Maximo rather than at the source: the fix is lost on the next load.
- Testing on an environment different from the target: value lists diverge between DEV and PROD.
- Underestimating throughput: a single load of 500,000 assets can take hours; measure it during the rehearsals.
- Not knowing how to resume: a network outage in the middle of a file without a reliable resume mechanism leads to either gaps or duplicates.
Frequently asked questions
How long does a Maximo data migration take?
For a mid-sized implementation (a few sites, a few hundred thousand records), plan on two to four months from scoping to cutover, most of it spent cleansing source data and running mock loads. The final load itself often fits in a weekend window.
Who is responsible for the quality of migrated data?
The business. The technical team guarantees that what is in the validated file arrives intact in Maximo; only business owners can settle a duplicate, a naming convention or a missing value. Name an owner for each object at scoping.
Should you migrate work order history?
Rarely in full. History is expensive to map and load, and rarely consulted. The usual practice is to migrate open work orders, the latest meter readings and a limited history (for example two years) of critical assets, and to archive the rest as read-only.
How do you avoid duplicates when replaying a load?
By loading with an AddChange action (create or update depending on the object key), and with a tool that resumes an interrupted load at the exact row where it stopped instead of restarting everything.
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