IMS status IX: Insert rule violation
IMS status code IX means an ISRT call broke an insert rule. Most often the program inserted a logical child, or a concatenated segment, and the logical parent it points to doesn't exist and IMS isn't allowed to create it.
Other names for this code
Also written as status code IX, IMS IX, DL/I status IX, IX status code, insert rule violation IMS.
What it means
IX comes from logical relationships. A logical child segment connects its physical parent to a logical parent, which can be in another database. When a program inserts a logical child, IMS has to find the logical parent so it can build the pointers between them. The DBD's insert rules say what IMS may do when that logical parent doesn't already exist.
With the physical insert rule (P), the logical parent must already exist. IMS won't create it during the insert. With the logical (L) or virtual (V) rules, IMS can insert the logical parent too, using the data the program supplies in the concatenated segment. When the program's insert needs a logical parent that isn't there and the rule doesn't let IMS create one, IMS returns IX and inserts nothing.
Only ISRT returns IX. It's an error in the data or in the order things are loaded, rather than in the call's format.
Common causes
- The program inserted a logical child before inserting its logical parent, and the logical parent's insert rule is P.
- The key of the logical parent in the concatenated segment is wrong, so IMS looks for a parent that doesn't exist.
- A reload or copy utility inserted logical children before all the physical and logical parents were in place.
- A reload tried to insert a virtual logical child that IMS maintains itself, which doesn't need to be loaded.
- The logical parent was deleted earlier in the run or by another job.
How to find the problem
- Identify the segment type of the failed ISRT from the last SSA, then look it up in the DBD. Check whether it's a logical child and which segment is its logical parent.
- Display the I/O area and find the logical parent's concatenated key at the front of it.
- Issue a GU for the logical parent with that key, through a PCB for the logical parent's database. If it gets GE, the parent is missing.
- Check the RULES= value on the logical parent's SEGM statement in the DBD to see which insert rule applies.
How to fix it
- Insert the logical parent first, then the logical child.
- Correct the logical parent's key in the I/O area.
- For a reload, load the databases in the right order, and leave out virtual logical children that IMS builds for you.
- If the design should let IMS create the logical parent, review the insert rule with your database administrator. Changing it means a DBD change and the usual regeneration steps.
IBM documentation
IBM documentation: status IX. Use the documentation for your installed release.
Related codes
Questions
Can I get IX on a database with no logical relationships?
IX is about insert rules, which matter for logical relationships. If your database has none, look closely at whether the program is really using the PCB and DBD you think.
What does the P insert rule mean?
The logical parent must already exist before a logical child that points to it can be inserted. IMS won't create the logical parent for you.
Why did a reload get IX?
Usually a parent wasn't loaded yet, or the reload tried to insert a virtual segment that IMS maintains itself. Load parents first and leave out the virtual segment.