테이블 스페이스와 관려한 정보를 포함한 테이블 목록은 다음 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 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);
}
}
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:
Post a Comment