IBM Control Desk End of Support (2026): Technical Migration Guide
IBM Control Desk 7.6.1.x loses all support December 31, 2026. Technical guide to migrating tickets, CMDB, assets, and work logs to your next ITSM platform.
Planning a migration?
Get a free 30-min call with our engineers. We'll review your setup and map out a custom migration plan — no obligation.
Schedule a free call- 1,500+ migrations completed
- Zero downtime guaranteed
- Transparent, fixed pricing
- Project success responsibility
- Post-migration support included
IBM Control Desk End of Support (2026): Technical Migration Guide
IBM Control Desk 7.6.1.x loses all IBM support on December 31, 2026, when sustained support, the final stage, ends. Standard support already ended on September 30, 2025 (ibm.com). After December 31, 2026: no fixes, no patches, no security updates, no escalation path. If you're still running ICD, you need a migration plan, and you need to understand what "migration" actually means for a Maximo-based ITSM platform where tickets, changes, assets, and CIs all live in a shared relational database with deep cross-references.
This guide covers the end-of-support timeline, the ICD data model and why it makes extraction hard, the realistic target platforms, the extraction approaches that work, and the relationship-mapping problems that break most migrations.
Quick answer: Migrating from IBM Control Desk is a high-complexity data extraction project due to the underlying Maximo relational database structure. Most data migrations complete within 1–5 business days, depending on data volume, complexity, and API rate limits. That timeline describes the data migration ClonePartner performs. Your internal project to rebuild workflows and replatform is a separate effort on your own timeline. With sustained support ending December 31, 2026, start scoping now.
What is IBM Control Desk?
IBM Control Desk (ICD) is an ITIL-compliant IT service management and asset management platform built on IBM's Maximo/Tivoli process automation engine. It manages service requests, incidents, problems, changes, releases, assets, and configuration items in a single relational database. IBM has folded its capabilities into Maximo IT, an add-on to the Manage application within IBM Maximo Application Suite (MAS) (ibm.com). IBM formally announced the transition in September 2023 (ibm.com). The product is no longer sold, and the clock is running down to the final support cutoff.
IBM Control Desk end-of-support timeline
The support withdrawal is staged, not sudden (ibm.com):
| Milestone | Date |
|---|---|
| End of Marketing (no new sales) | April 19, 2024 |
| End of Standard Support | September 30, 2025 |
| Extended Support (optional, one year) | October 1, 2025 – September 30, 2026 |
| Sustained Support (final stage) | October 1, 2025 – December 31, 2026 |
| All support ends | December 31, 2026 |
IBM's own guidance states that after December 31, 2026, there are no support, maintenance, or escalation options available. Organizations with compliance, security, or availability requirements face compounding risk if they continue running unsupported software. (Note that ICD is not the only legacy platform facing this exact cutoff; Cherwell also reaches end of life on December 31, 2026.)
Sustained support is not standard support. IBM's sustained support covers usage questions, known defects, and existing fixes — no new defect fixes and no new security patches (ibm.com). Optional extended support, where bought, covered critical issues only until September 30, 2026. If you haven't started planning, you are already operating on borrowed time.
What data lives inside IBM Control Desk?
ICD's data model is the Maximo data model. Understanding the underlying table structure is the first step to scoping a migration, because the relationships between these tables are where migrations break.
Key foreign key relationships across the core tables
The following join structure governs how ICD data is connected. Any migration that does not preserve these relationships produces broken records in the target system:
| Child Table | Join Columns | Parent Table | Notes |
|---|---|---|---|
WORKLOG |
RECORDKEY + CLASS |
TICKET (TICKETID + CLASS) |
Work logs owned by ticket class |
WORKLOG |
RECORDKEY + CLASS |
WORKORDER (WONUM + WOCLASS) |
Work logs owned by change/release |
COMMLOG |
OWNERID + OWNERTABLE |
TICKET or WORKORDER |
Spans record types via polymorphic join |
MULTIASSETLOCCI |
RECORDKEY + RECORDCLASS |
TICKET or WORKORDER |
Links records to assets, locations, CIs |
MULTIASSETLOCCI |
ASSETNUM + SITEID |
ASSET |
Asset side of the join |
MULTIASSETLOCCI |
CINUM |
CI |
CI side of the join |
DOCLINKS |
OWNERTABLE + OWNERID |
TICKET, WORKORDER, ASSET, CI |
Polymorphic attachment reference |
TKSTATUS |
TICKETID + CLASS |
TICKET |
Status history per ticket |
RELATEDRECORD |
RECORDKEY + CLASS |
TICKET or WORKORDER |
Cross-references between record types |
CI |
ASSETNUM |
ASSET |
Links an authorized CI to the asset it represents |
CLASSSTRUCTURE |
CLASSSTRUCTURE (self-ref) |
CLASSSTRUCTURE |
Hierarchical taxonomy, parent→child |
This polymorphic join pattern — where OWNERTABLE or CLASS determines which parent table a row belongs to — is the most common source of migration failures. A query that filters only on OWNERTABLE='INCIDENT' will silently drop records owned by related SRs, problems, or changes.
Version-specific differences
ICD behavior is not homogeneous across releases and fix packs, and many deployments carry local customizations. Two facts matter for migration tooling:
- ICD 7.6.1.5 is the version IBM requires for the upgrade to Maximo IT (ibm.com).
- Object Structures decide what the REST API returns. A record's child data (work logs,
MULTIASSETLOCCIrows, attachments,CIRELATIONrows) appears in a response only if the Object Structure you query includes that child object. IBM's own attachment example requires addingDOCLINKSas a child before attachments are exposed (ibm-maximo-dev.github.io).
Whatever your release, audit your Object Structures in the Integration Framework before assuming the OSLC API exposes complete relational data.
Tickets: service requests, incidents, and problems
All three ticket types share a single underlying TICKET table, differentiated by its CLASS column. The SR, INCIDENT, and PROBLEM applications are database views on that same table. Incidents carry extra hidden fields (PROBLEMCODE, FR1CODE, FR2CODE) for problem/cause/remedy code reporting. Each ticket carries work logs (WORKLOG), communication logs (COMMLOG), status history (TKSTATUS), and attachments (DOCLINKS).
This shared-table design means that when you extract tickets, you are querying one table with class filters — but the target platform almost certainly separates these into distinct tables or record types. A native CSV export from ICD only gives you the top-level fields from the TICKET table. It drops conversations, inline attachments, status history, and CI relationships. A production-grade migration requires extracting the data relationally.
Changes, releases, and activities
Changes and releases follow the same pattern but sit on the WORKORDER table. WOCHANGE, WORELEASE, and WOACTIVITY are views filtered by work order class (WOCLASS = 'CHANGE', 'RELEASE', 'ACTIVITY'). Changes can spawn activities (child work orders), and tickets can be promoted to changes — creating cross-table references between TICKET and WORKORDER via ORIGRECORDID and ORIGRECORDCLASS that must be preserved.
Assets and the CMDB
IBM Control Desk distinguishes between Assets and Configuration Items (CIs). The ASSET table tracks physical and logical assets for financial and lifecycle management (purchasing, depreciation, warranties). The CI table stores authorized configuration items for operational and configuration management (change control, dependencies, topologies). A CI links to the asset it represents through its ASSETNUM column. The separate ACTCI table holds actual CIs, which ICD promotes to create authorized CIs (ibm.com). CI-to-CI relationships live in the CIRELATION table, which defines upstream/downstream dependencies with the following structure:
| Column | Description |
|---|---|
SOURCECI |
Source CI identifier (CINUM) |
TARGETCI |
Target CI identifier (CINUM) |
RELATIONNUM |
Identifier of the relationship type between the two CIs |
The CIRELATION table is the topology map that change management and impact analysis depend on. Loading CIs without their CIRELATION rows produces an asset list, not a CMDB.
The MULTIASSETLOCCI table links work orders and tickets to multiple assets, locations, and CIs simultaneously. This is the join table that connects "what happened" (tickets/work orders) to "what it happened to" (assets/CIs), and it is the most commonly broken linkage in an ICD migration.
Everything else in scope
A complete ICD extraction typically includes:
- Persons and person groups (
PERSON,PERSONGROUP) — agents, requesters, assignment groups - Locations (
LOCATIONS) — with site and organization hierarchy (SITEID,ORGID) - Solutions / knowledge articles (
SOLUTION) — linked to tickets via classification - SLA records — tied to tickets and assets via
SLARECORDS - Classifications (
CLASSSTRUCTURE) — the hierarchical taxonomy used across tickets, CIs, and assets; self-referential viaPARENTcolumn - Domain values (
SYNONYMDOMAIN,ALNDOMAIN,NUMERICDOMAIN) — custom status codes, priority values, category mappings
Multi-site and multi-tenancy considerations
Large enterprise ICD deployments run across multiple SITEID and ORGID combinations. This creates namespace collision risks during migration: assets are keyed by ASSETNUM plus SITEID, so two different sites can each have an asset numbered "SERVER001" referring to completely different physical assets. Every extracted record must carry its SITEID as part of its natural key, and the target platform must either preserve site context as a field or be pre-scoped to a single site's data. If the target platform does not have a site hierarchy equivalent, the migration must decide — before extraction begins — how to namespace records from multiple sites to prevent collisions. Typically this means prefixing legacy IDs with site codes (e.g., NYC-SERVER001, LON-SERVER001) in a correlation ID field.
Where are teams migrating from IBM Control Desk?
IBM recommends Maximo IT as the successor, but many enterprise IT teams use this end-of-support event as the forcing function for a broader ITSM platform change.
Upgrade to IBM Maximo IT (MAS)
IBM describes Maximo IT as a "lift and shift" of ICD 7.6.1.5 into MAS, with all ITIL processes remaining the same (ibm.com). The upgrade preserves your existing database, but it requires you to be on ICD 7.6.1.5, and it does not support moving from one database platform to another during the upgrade. You cannot upgrade directly from ICD to Maximo IT: you must install MAS first, then deploy Maximo Manage with Maximo IT as an add-on (ibm.com). Ask your IBM sales representative about entitlement trade-ups and licensing transitions.
This is a platform upgrade, not a data migration. The data stays in place; the application layer changes around it.
Important distinction: Upgrading ICD to Maximo IT is IBM's supported in-place upgrade path. Migrating ICD data to a different ITSM platform (ServiceNow, Jira Service Management, Freshservice) is a data migration — a fundamentally different project. The rest of this guide focuses on the data migration scenario.
Migrate to ServiceNow
ServiceNow is the most common destination for ICD shops moving off the IBM stack entirely. ServiceNow's task table hierarchy (incident, problem, change_request, sc_req_item) maps conceptually to ICD's ticket and work order classes, but the table structures are completely different. ServiceNow's CMDB (cmdb_ci and its class extensions) uses a different relationship model than Maximo's CI/ACTCI/CIRELATION structure. This is a full data model conversion.
For teams evaluating this path, our BMC Remedy to ServiceNow migration guide covers many of the same Maximo-heritage data model challenges.
Migrate to Jira Service Management, Freshservice, or another platform
Mid-market teams that do not need ServiceNow's enterprise depth are landing on Jira Service Management or Freshservice. These platforms have simpler data models, which makes field mapping more straightforward — but it means your ICD CMDB complexity will need to be flattened or restructured. (If you are evaluating this trade-off, our guide on migrating from Jira Service Management to ServiceNow details the specific differences between JSM's schema-free Assets and ServiceNow's CSDM.) JSM's Assets schema (formerly Insight) supports typed object relationships, but does not have native equivalents for all Maximo CIRELATION relationship types. Freshservice's CMDB similarly supports basic CI relationships but lacks the relationship-type taxonomy depth that Maximo provides.
How to extract data from IBM Control Desk
ICD offers three extraction paths. Which one you use depends on whether your deployment is on-premises or SaaS, and how much data you're moving.
OSLC / REST API (preferred for automation)
The Maximo Integration Framework exposes OSLC-compliant REST endpoints at /maximo/oslc/os/{object_structure}. By querying an Object Structure that includes the child objects you need, the API returns the parent ticket and its associated child records (like work logs) in a structured JSON payload. You can use oslc.select for field projection, oslc.where for filtering, and oslc.pageSize for pagination. Authentication is via API key, which IBM recommends sending in the apikey header rather than as a query parameter (ibm-maximo-dev.github.io).
A production-grade extraction call for incidents with child work logs. Here {incident_os} stands for an Object Structure over incident tickets that includes WORKLOG and MULTIASSETLOCCI as children. Check the Object Structures application for one that does, or create it:
GET /maximo/oslc/os/{incident_os}?oslc.where=class="INCIDENT"
&oslc.select=ticketid,description,status,reportdate,affectedperson,
worklog{description,logtype,clientviewable,createdate,createby},
multiassetlocci{assetnum,cinum,location,siteid}
&oslc.pageSize=100
&stablepaging=1
&lean=1
Headers: apikey: <your-api-key>
Content-Type: application/jsonStable paging embeds a stable ID in each nextPage link, so the result set does not shift while you page through it (ibm-maximo-dev.github.io). Without it, records added or modified during extraction shift page boundaries and cause duplicates or gaps. The stored set expires after five minutes of inactivity, so do not pause mid-run. The lean=1 parameter strips OSLC metadata from the response, reducing payload size for large extractions.
Rate limits and page sizes: The system property mxe.oslc.maxpagesize caps the page size, and a request that asks for more fails with an error (ibm-maximo-dev.github.io). Check its value on your instance before you choose a page size. For extractions above 100,000 records at a page size of 100, expect multi-hour runs. Build retry logic with exponential backoff into your extraction scripts.
Because IBM Control Desk is often hosted on-premises or in private clouds, extraction speed is directly bottlenecked by the infrastructure's bandwidth and the database's ability to serialize large JSON payloads.
Direct database queries (on-premises only)
For on-premises ICD deployments, SQL queries against the Maximo database (DB2, Oracle, or SQL Server) are the fastest extraction method. You can export the TICKET, WORKORDER, ASSET, CI, CIRELATION, MULTIASSETLOCCI, and relationship tables directly, preserving foreign key references. This bypasses API rate limits entirely.
The trade-offs are real: you need DBA access, you are working with the raw schema (including Maximo's internal columns), and you must handle the view-to-table mapping yourself. Querying the database directly bypasses the Maximo Business Object (MBO) logic, meaning calculated fields, localized strings, and virtual attributes are absent from the results. Extracting attachments directly from the database requires resolving file system paths stored in DOCLINKS — see the attachment section below for the resolution logic.
Direct SQL works well for bulk extraction of structured record data. For attachments and computed fields, the OSLC API is more reliable.
CSV/XML exports (last resort)
Maximo's built-in reporting and export tools can produce CSV or XML dumps, but they lose relational context. A CSV export of incidents will not include inline work logs, will not preserve CI linkages, and will not carry attachment binary data. CSV is useful for record-count validation checks only — never as the primary extraction method for a production migration. Extraction preference order: API (OSLC) > direct SQL > JSON export > CSV.
Attachment extraction: resolving DOCLINKS
Maximo links each attachment to its owner record through the DOCLINKS table, and each DOCLINKS row points to a DOCINFO row that describes the document. DOCINFO holds the URLTYPE and the URLNAME. The common values are:
URLTYPE |
Meaning | Resolution method |
|---|---|---|
FILE |
File stored on the Maximo document library file share | Read the server path in DOCINFO.URLNAME; the mxe.doclink.path01 system property maps that path prefix to a web URL |
URL / WWW |
External URL reference | Retrieve directly from URLNAME |
The URL type is a synonym domain, so your installation may use different internal values. Query the distinct URLTYPE values before you write resolution logic (ibm-maximo-dev.github.io).
For FILE type attachments, the stored path is a path on the document library share, not a downloadable URL. If the Maximo document library is on a file server not accessible from the extraction host, the files cannot be retrieved via direct path resolution — you need file system access to the document library separately from database access. This is the most common production failure point for attachment migration in ICD environments.
The REST API can list and download attachments through the doclinks child of a record, once DOCLINKS is added as a child of the Object Structure (ibm-maximo-dev.github.io):
GET /maximo/oslc/os/{object_structure}/{rest_id}/doclinks?lean=1
Headers: apikey: <your-api-key>{rest_id} is the resource ID from the record's href. The response lists each attachment's metadata. A follow-up GET .../doclinks/{id} request retrieves the file content.
What breaks during an IBM Control Desk migration?
These are the failure modes that appear most consistently across ICD migrations.
CMDB relationship loss
The true value of a CMDB is the relationship graph, not the list of CI records. ICD stores CI-to-CI relationships in CIRELATION. The target platform's CMDB uses a different relationship model. ServiceNow uses cmdb_rel_ci with parent, child, and type references; JSM Assets uses typed relationship links between object schema entries. Neither maps 1:1 to Maximo's CIRELATION structure.
Maximo CIRELATION → ServiceNow cmdb_rel_ci mapping (example meanings):
| ICD relationship meaning | ServiceNow cmdb_rel_type (name) |
ServiceNow direction |
|---|---|---|
| Runs on | Runs on::Runs | child → parent |
| Hosted on | Hosted on::Hosts | child → parent |
| Connected to | Connected by::Connects | bidirectional |
| Depends on | Depends on::Used by | child → parent |
| Backed up by | Backed up by::Backs up | child → parent |
| Virtualized by | Virtualized by::Virtualizes | child → parent |
| Member of | Members::Member of | child → parent |
| Managed by | Managed by::Manages | child → parent |
This is a partial list of example meanings, not ICD codes. Your relationship types are identified by RELATIONNUM, and many deployments add their own. Run SELECT DISTINCT RELATIONNUM FROM CIRELATION before building the mapping table — do not assume any default list covers your environment.
Load sequence for CMDB migration to ServiceNow: Load all CI records first, storing the Maximo CINUM as a correlation ID in a custom field (e.g., u_maximo_ci_id). After all CIs are loaded, query the sys_id for each using the correlation ID, then load CIRELATION rows as cmdb_rel_ci records referencing the new sys_id values. Any CIRELATION row where the parent or child CI does not exist in the target is rejected — this is why CI records must be fully loaded before relationship records.
ServiceNow IRE payload format: When loading CIs into ServiceNow via the Identification and Reconciliation Engine, format the payload to trigger IRE validation. A minimal IRE-compliant payload for a Maximo server CI:
{
"items": [
{
"className": "cmdb_ci_win_server",
"values": {
"name": "MYSERVER01",
"ip_address": "10.0.1.50",
"u_maximo_ci_id": "MYSERVER01"
},
"related": []
}
],
"relations": []
}POST this to /api/now/identifyreconcile, and set the sysparm_data_source query parameter to one of your instance's discovery_source choice values; without it, ServiceNow sends the payload to its incomplete payloads table (servicenow.com). IRE will match against existing CIs using identification rules before creating duplicates. For the full relationship load, populate the relations array after all CI records are confirmed in the target — do not attempt to load CI records and their relationships in a single payload if any referenced CI may not yet exist.
Ticket-to-change cross-references
In ICD, a service request can be promoted to an incident, which can spawn a change. These cross-references span TICKET and WORKORDER via ORIGRECORDID and ORIGRECORDCLASS, and bidirectionally via RELATEDRECORD. If you load tickets and changes independently without rebuilding these links, you lose the audit trail showing how an incident drove a change.
Fix: Extract ORIGRECORDID, ORIGRECORDCLASS, and all rows from RELATEDRECORD where RECORDKEY or RELATEDRECKEY matches your record set. After loading both datasets into the target, run a reconciliation pass using a mapping table of old ICD IDs to new target IDs to re-link records.
Work log ordering and orphaning
Work logs are stored in WORKLOG, linked via RECORDKEY and CLASS. Each work log carries a clientviewable boolean that determines where it maps in the target system:
clientviewable = 1→ customer-visible comments (ServiceNow:commentsfield; Additional Comments)clientviewable = 0→ internal work notes (ServiceNow:work_notesfield; not visible to requesters)
If you load these out of order, the target displays a disjointed timeline. Sort WORKLOG entries by CREATEDATE within each parent record before loading.
Communication logs (COMMLOG) add another layer. A single incident's full communication history can include entries where OWNERTABLE = 'SR' (the originating request), 'INCIDENT' (the incident itself), 'PROBLEM' (a related problem), and 'WOCHANGE' (a resulting change). A query filtered only on OWNERTABLE='INCIDENT' silently drops all entries owned by related record types.
Fix: Walk the full related-record chain for each ticket:
- Start with the incident's
TICKETID. - Query
RELATEDRECORDto find all related SRs, problems, and changes. - Collect
COMMLOGrows whereOWNERIDandOWNERTABLEmatch any record in that chain. - Collect
WORKLOGrows whereRECORDKEYandCLASSmatch any record in that chain. - Merge all entries, sort by
CREATEDATE, and load as a unified conversation thread on the target — with metadata indicating the originalOWNERTABLEfor audit purposes.
Classification hierarchy mismatches
ICD uses CLASSSTRUCTURE for hierarchical classification of tickets, CIs, and assets. The CLASSSTRUCTURE table is self-referential via a PARENT column and can go five or more levels deep. Most ITSM platforms use two or three levels (category → subcategory → item). Deep trees must be mapped before migration — there is no automated solution. The mapping decision affects SLA assignment rules, automation triggers, and reporting categories on the target platform.
Extract the full CLASSSTRUCTURE tree before beginning any other mapping work. Present it to the business stakeholders who own SLA and routing rules — they must sign off on the flattened mapping before the migration begins, because changing it after load requires re-processing every ticket that carries a classification.
Attachment volume and pipeline
Large ICD environments can have tens of gigabytes of attachments. The extraction process for each attachment:
- Query
DOCLINKSfor the specificOWNERTABLE+OWNERIDcombination. - Check
DOCINFO.URLTYPE— handle file and URL attachments differently (see table above). - For
FILEtype, resolve the path inDOCINFO.URLNAME, usingmxe.doclink.path01to map it to a web URL. - Download the binary (from file server or API stream).
- Validate MIME type against target platform's allowed types.
- POST to target attachment API (e.g., ServiceNow:
POST /api/now/attachment/file?table_name=incident&table_sys_id={sys_id}). - Log failures (size limit exceeded, unsupported MIME type) separately — do not fail the parent ticket load.
Attachment migration is typically the longest-running phase and the most likely to surface platform-side rejections. ServiceNow sets its maximum attachment size, in megabytes, with the com.glide.attachment.max_size property, which falls back to 1024 when unset (servicenow.com). Check its value on the target instance before migration begins.
Delta sync mechanism
The step most critical to a clean cutover is also the least obvious. After the bulk migration completes, records continue to be created and modified in ICD during the validation window. The delta sync must capture these without re-loading the full dataset.
The correct mechanism for delta syncing from Maximo:
- Record the cutover timestamp at the start of the bulk migration (not the end).
- Poll
CHANGEDATEandCHANGEBYonTICKET,WORKORDER,ASSET, andCItables. Every Maximo record carries aCHANGEDATEcolumn updated on any modification. Query:WHERE CHANGEDATE >= :bulk_migration_start_timestamp. - For new tickets and work orders, also check
REPORTDATE>= bulk migration start. - For
WORKLOGandCOMMLOG, poll byCREATEDATE>= cutover timestamp — new log entries arrive as new rows. - For attachments, poll
DOCLINKS.CREATEDATE>= cutover timestamp. - Apply upsert logic in the target: if the record's legacy ID already exists (from the bulk load), update it; if not, insert it.
The Maximo Integration Framework's publish channels and queues are an alternative for near-real-time sync but requires Integration Framework configuration that may not be in place on a decommissioning ICD instance. CHANGEDATE polling is more reliable for the migration cutover scenario.
How long does an IBM Control Desk data migration take?
Keep two clocks apart: the data migration (extraction, transformation, loading, and validation), and the customer's own replatform, workflow rebuild, and implementation project.
For the data migration itself:
| Volume | Complexity | Estimated duration |
|---|---|---|
| Under 10,000 records | Small datasets | Under 24 hours |
| Most ICD environments | Varies with CMDB depth, sites, and attachments | 1–5 business days, depending on data volume, complexity, and API rate limits |
| Several hundred thousand records, or 5,000+ documents | Custom engagement with phased bulk + delta sync | Scoped individually |
The CI-to-relationship ratio is the strongest volume predictor. A CMDB with 5,000 CIs and 50,000 CIRELATION rows is a fundamentally different project than 5,000 CIs with 500 relationships — the relationship graph validation alone scales super-linearly with relationship count.
The figures above cover only the data migration ClonePartner performs. Your internal effort to configure the new ITSM platform, rebuild workflow automations, train staff, and complete UAT is a separate project on your own timeline, and ClonePartner does not perform it. With sustained support ending on December 31, 2026, start discovery now.
Step-by-step: migrating tickets, CMDB, and assets from ICD
Step 1: Inventory and scope
Query your ICD database for record counts by type. This determines volume tier and effort:
SELECT 'Incidents' as type, COUNT(*) FROM TICKET WHERE CLASS='INCIDENT'
UNION ALL SELECT 'SRs', COUNT(*) FROM TICKET WHERE CLASS='SR'
UNION ALL SELECT 'Problems', COUNT(*) FROM TICKET WHERE CLASS='PROBLEM'
UNION ALL SELECT 'Changes', COUNT(*) FROM WORKORDER WHERE WOCLASS='CHANGE'
UNION ALL SELECT 'Assets', COUNT(*) FROM ASSET
UNION ALL SELECT 'CIs', COUNT(*) FROM CI
UNION ALL SELECT 'CI Relationships', COUNT(*) FROM CIRELATION
UNION ALL SELECT 'Work Logs', COUNT(*) FROM WORKLOG
UNION ALL SELECT 'Attachments', COUNT(*) FROM DOCLINKS;Also record the distinct SITEID values across TICKET, WORKORDER, ASSET, and CI — multi-site deployments require namespace planning before any other work.
Step 2: Establish API or database access and build field mappings
Establish API access (or database access for on-premises) to ICD and the target platform. Build explicit field mapping tables before writing any extraction code:
Ticket field mapping (ICD → ServiceNow example):
| ICD Column | ICD Table | Target Table | Target Column | Transform required |
|---|---|---|---|---|
TICKETID |
TICKET |
incident |
u_icd_ticket_id |
Store as correlation ID |
CLASS |
TICKET |
(determines table) | — | 'INCIDENT'→incident, 'SR'→sc_req_item, 'PROBLEM'→problem |
DESCRIPTION |
TICKET |
incident |
short_description |
None |
DESCRIPTION_LONGDESCRIPTION |
TICKET |
incident |
description |
Strip HTML if present |
REPORTDATE |
TICKET |
incident |
opened_at |
Timezone conversion |
STATUS |
TICKET |
incident |
state |
Domain lookup via SYNONYMDOMAIN |
OWNER |
TICKET |
incident |
assigned_to |
Person lookup by email |
OWNERGROUP |
TICKET |
incident |
assignment_group |
Group lookup by name |
PRIORITY |
TICKET |
incident |
priority |
Numeric domain mapping |
CLASSSTRUCTURE |
TICKET |
incident |
category/subcategory |
Hierarchy flattening required |
Map status values by querying SYNONYMDOMAIN where DOMAINID is SRSTATUS or INCIDENTSTATUS (tickets) or WOSTATUS (changes) — ICD's internal codes (QUEUED, INPROG, RESOLVED, CLOSED, CANCELLED) are stored differently from their display values and will not match the target's status model.
Step 3: Extract in dependency order
Load order is non-negotiable. The safe sequence:
- Persons and groups (
PERSON,PERSONGROUP) — no dependencies - Locations and sites (
LOCATIONS,SITE,ORGANIZATION) — no dependencies - Domain values (
SYNONYMDOMAIN,ALNDOMAIN) — needed for status/priority transformation - Classifications (
CLASSSTRUCTURE) — self-referential; load parents before children using recursive ordering by level depth - Assets (
ASSET) — depend on locations, persons - CIs (
CI) — depend on assets, classifications - CI relationships (
CIRELATION) — depend on all CIs existing in target - Service requests, incidents, problems (
TICKET) — depend on persons, CIs, assets - Changes, releases, activities (
WORKORDER) — depend on tickets for cross-references - Work logs and communication logs (
WORKLOG,COMMLOG) — depend on parent tickets/changes existing in target - Attachments (
DOCLINKS) — depend on all parent records existing in target
Loading out of order means broken foreign key references. CI relationships loaded before CIs exist produce constraint violations. Attachments loaded before parent records exist produce orphaned files.
Step 4: Sample migration and validation
Run a sample migration with records that exercise every relationship type: an incident with CI linkages via MULTIASSETLOCCI, a change spawned from a ticket (with ORIGRECORDCLASS populated), work logs spanning related records, and a CI with CIRELATION rows. Validate with:
- Record-count parity: source ICD count vs. target count per type
- Field-level spot checks on 10% sample: compare source field values to target field values
- Referential integrity: every
CIRELATIONrow references CIs that exist in the target - Conversation completeness: work log count per ticket matches between source and target
- Attachment reachability: attachment URLs in the target are resolvable and serve the correct file
Step 5: Full migration and delta sync
Run the bulk migration during the working days before go-live, while agents keep working in ICD. Go live on a Monday morning: freeze ICD before the working day starts, run the final delta sync using the CHANGEDATE polling methodology described above (about 30 minutes for changed records only), and have agents log in to the new platform that morning. The cutover timestamp must be recorded at the start of the bulk migration run, not the end.
For environments with continuous ticket flow, run a background sync using 15-minute CHANGEDATE polling windows during the validation period, then perform a fast final delta at cutover. Validate the delta record count against the number of records with CHANGEDATE >= bulk migration start before confirming the cutover is complete.
Step 6: Post-migration validation
Multi-stage validation:
- Record-count parity across all entity types
- Field-level validation on a statistical sample (minimum 10% of records per type)
- Referential integrity checks across the full relationship graph — CI→incident links via
MULTIASSETLOCCI, ticket→change cross-references, asset hierarchies, CI relationship topology - Conversation thread validation — spot-check that work log count and ordering matches between source and target
- Attachment validation — confirm attachment file is retrievable on target for a sample of records with known attachments
Security and compliance
When extracting sensitive ITSM data, security controls should be verified, not assumed. Relevant controls for an ICD data migration:
- Encryption in transit: All API calls should use TLS 1.2 or higher. If using direct SQL extraction, the database connection should be encrypted (TLS on the Db2, Oracle, or SQL Server connection).
- Encryption at rest: Staging data should be stored with AES-256 encryption. Verify that any intermediary storage (S3 buckets, local staging servers) has encryption at rest enabled — this is not the default in all configurations.
- Data minimization: Extract only the fields required for migration. Do not stage full TICKET payloads including personally identifiable information (PII) unless the target platform will receive that data.
- Retention: Staging databases and extracted flat files should be deleted within 30 days of migration completion. Document the deletion for GDPR and CCPA purposes.
- Access control: Migration credentials (ICD API keys, target platform service accounts) should be provisioned with minimum required scope and rotated immediately after migration completes.
Should you handle this migration in-house or use a service?
Handle in-house if:
- Fewer than 10,000 total records
- Single-site deployment (
SITEIDcount = 1) - Flat CMDB (fewer than 5,000
CIRELATIONrows) - No cross-ticket or ticket-to-change cross-references to preserve
- Engineering team has Maximo DBA access and Python/scripting capability
Use a managed migration service if:
- Complex CMDB topology (deep
CIRELATIONgraph, custom relationship types) - Multi-site deployment with namespace collision risk
- Hundreds of thousands of records with attachment volumes in the tens of gigabytes
- Hard December 2026 deadline with no tolerance for a failed first attempt
- Compliance requirements (HIPAA, SOC 2 audit evidence) that require documented migration controls
The cost of a failed first attempt — re-extraction, re-mapping, re-loading, and re-validation — almost always exceeds the cost of a managed engagement. The delta sync complexity and CMDB relationship validation are where in-house efforts are most likely to produce silently broken data that is not caught until post-go-live.
For a broader look at migration approaches, see our help desk data migration checklist and our analysis of in-house vs. outsourced data migration.
What happens if you miss the December 2026 deadline?
The software does not stop working on January 1, 2027. But running unsupported ITSM software creates compounding risk:
- Security vulnerabilities go unpatched. Sustained support already excludes new security patches, and after December 31, 2026 IBM provides no fixes, patches, or security updates at all. Every month on unsupported software widens the attack surface against a platform that holds sensitive incident, change, and asset data.
- Compliance exposure. SOC 2, ISO 27001, and regulatory audits flag unsupported software as a control deficiency. For organizations handling PHI, running an unsupported ITSM platform complicates HIPAA safeguard attestation.
- No escalation path. When something breaks — and eventually it will — IBM will not help. You are relying entirely on internal Maximo expertise or third-party consultants.
- Integration rot. As connected systems (email servers, LDAP/AD, monitoring tools) update, ICD's static integration layer will start failing. No patches means no compatibility fixes.
Treat December 31 as the date after which every week of delay adds uninsured risk, not as a cliff edge where everything breaks at midnight. Start scoping now.
Frequently Asked Questions
- When does IBM Control Desk end of support happen?
- IBM Control Desk 7.6.1.x standard support ended September 30, 2025. Sustained support — the final stage — ends December 31, 2026. After that date, IBM provides no fixes, patches, or security updates, and no support, maintenance, or escalation options.
- What is the replacement for IBM Control Desk?
- IBM's recommended successor is Maximo IT, an add-on to the Manage application within IBM Maximo Application Suite (MAS). IBM describes it as a lift-and-shift of ICD 7.6.1.5 where all ITIL processes remain the same. Organizations not staying on the IBM stack commonly migrate to ServiceNow, Jira Service Management, or Freshservice.
- Can I export IBM Control Desk tickets to CSV?
- You can export top-level ticket fields to CSV, but native CSV exports drop relational data like work logs, inline attachments, status history, and CI relationships. A production migration requires API or database extraction to preserve this data.
- How long does an IBM Control Desk data migration take?
- The data migration itself — extraction, transformation, loading, and validation — typically completes within 1–5 business days, depending on data volume, complexity, and API rate limits. Small datasets under 10,000 records can finish in under 24 hours. Very large migrations take longer, and ClonePartner gives a timeline after scoping. This is separate from your own replatforming project, which ClonePartner does not perform.
- Can I migrate IBM Control Desk data to ServiceNow?
- Yes. ICD's ticket classes (SR, Incident, Problem), changes, assets, and CMDB CIs can be mapped to ServiceNow's task table hierarchy and CMDB. The main challenges are converting Maximo's shared TICKET table into ServiceNow's separate tables and rebuilding CI relationships in ServiceNow's cmdb_rel_ci structure.