2009-09-14

아파치 더비 - 테이블 스페이스 정리

아파치 더비를 사용할 때 테이블 스페이스를 정리하는 방법이다. 이를 Reorganization이라고 한다.


테이블 스페이스와 관려한 정보를 포함한 테이블 목록은 다음 SQL로 조회한다.

  SELECT TABLENAME,
         (SELECT SUM(NUMALLOCATEDPAGES * PAGESIZE)
            FROM new org.apache.derby.diag.SpaceTable('DB', T.TABLENAME) X),
         (SELECT SUM(ESTIMSPACESAVING)
            FROM new org.apache.derby.diag.SpaceTable('DB', T.TABLENAME) X)
    FROM SYS.SYSTABLES T
ORDER BY TABLENAME

SELECT 절 두번째 칼럼은 해당 테이블이 사용하고 있는 테이블 스페이스 크기를 의미하고, 세번째 칼럼은 테이블 스페이스 정리를 통해서 확보할 수 있는 크기를 의미한다.


실제 테이블 스페이스 정리는 Stored Procedure로 처리한다.

CALL SYSCS_UTIL.SYSCS_COMPRESS_TABLE('DB', ?, 1)

바인딩 파라미터에 테이블 이름을 사용한다.

이를 수행하는 자바 코드는 다음과 같다.

String tableName = ...
if (tableName != null) {
  Connection con = null;
  CallableStatement cstat = null;
  try {
    con = getConnection();
    cstat = con.prepareCall("CALL SYSCS_UTIL.SYSCS_COMPRESS_TABLE('DB', ?, 1)");
    cstat.setString(1, tableName);
    cstat.execute();
  } catch (SQLException e) {
    throw new RuntimeException(e);
  } finally {
    closeResource(con, cstat);
  }
}


* DB 대신에 데이터베이스 이름을 사용한다.

No comments: