Is there some full list of commands that can cause table to become reorg-pending?
I tried google it for a while, but can't find full list. My exact problem for now - can ADD FOREIGN KEY statement cause table to become reorg-pending?
A table is placed in the reorg pending
mode if you alter its physical structure, such as add or drop a column or change the column data type or nullability.
Some operations do not place the table in reorg pending
, but reorganization is required for the changes to take effect, for example, changing the table COMPRESS
attribute or the inline length of a LOB column.
Adding or dropping a foreign key does not place the table in reorg pending
, nor does it require reorganization. However, changing an existing foreign key from not enforced
to enforced
will put the table in the check pending
mode, which, like reorg pending
, prevents applications from accessing that table.
I don't know of a single good source to read more about reorg
, apart from the DB2 manual, particularly the ALTER TABLE
statement and this article:
Yes the the full list of column alterations that can put your table into reorg pending (read only and can only be table scanned once one of these commits, so pretty drastic) is now listed clearly in the ALTER TABLE
command, excerpted below.
The following is the full list of REORG-recommended ALTER statements that cause a version change and place the table into a REORG-pending state:
- DROP COLUMN
- ALTER COLUMN SET NOT NULL
- ALTER COLUMN DROP NOT NULL
- ALTER COLUMN SET DATA TYPE, except in the following situations:
- Increasing the length of a VARCHAR or VARGRAPHIC column
- Decreasing the length of a VARCHAR or VARGRAPHIC column without truncating trailing blanks from existing data, when no indexes exist on the column
Although each of these can create a new version, and after 3 versions you must reorg, in a single UOW you can modify as many columns as you like. That can also include as many of these in a single ALTER TABLE
command as you like. The sum of all the changes will count as 1 new version in these cases.