'오프라인 리오그'에 해당되는 글 1건

  1. 2009.04.02 Table Reorg Pending state
DB2 v9.x 에서는 column을 drop할 수 있는 등의
DB2 v8.x보다 더 유연한 기능을 제공하기 시작했는데

다음과 같은 명령들을 수행하면 해당 Table은 Reorg Pending 상태가 되며
이렇게 Reorg Pending state에 빠지게 만드는 명령을 REORG-recommended operations 라고 한다.

ALTER TABLE foo DROP COLUMN C1
ALTER TABLE bar ALTER COLUMN C1 SET DATA TYPE BIGINT

하지만 테이블의 스키마를 변경하는 경우라고 하더라도
다음의 경우에는 수행 후에도 Reorg Pending에 빠지지 않는다.

ALTER TABLE bar ALTER COLUMN C1 SET NOT NULL
ADD COLUMN
ALTER COLUMN DEFAULT VALUE
RENAME TABLE
ALTER COLUMN SET DATA TYPE VARCHAR/VARGRAPHIC/CLOB/BLOB/DBCLOB


Reorg Pending이 걸리면, 다음 command만을 수행할 수 있는 상태가 되는데

REORG TABLE
DROP TABLE
ALTER TABLE
RENAME TABLE
TRUNCATE TABLE

이렇게 Reorg Pending이 걸린 상태를 확인하려면,
DB2 v9 부터 제공하기 시작한 Snapshot function 또는 Admin view를 조회하면 된다.

db2 "select TABSCHEMA, TABNAME from SYSIBMADM.ADMINTABINFO where REORG_PENDING = 'Y'"


이렇게 Reorg Pending 상태의 테이블에
INPLACE START 를 명시하여 온라인 리오그를 수행하려 하면
SQL0668N + reason code 7 이 발생하게 되고
7        The table is in the reorg pending state. This can occur after
         an ALTER TABLE statement containing a REORG-recommended
         operation.

         Reorganize the table using the REORG TABLE command (note that
         INPLACE REORG TABLE is not allowed for a table that is in the
         reorg pending state).

이런 경우에는
반드시 Offline Reorg(a.k.a Classic Reorg)를 수행해서 해결해야 한다.
Posted by in0de
,