Showing posts with label 아파치 더비. Show all posts
Showing posts with label 아파치 더비. Show all posts

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 대신에 데이터베이스 이름을 사용한다.

2008-03-12

아파치 더비에서 자바 함수 만들기

아파치 더비에서 자바 클래스 메소드를 SQL 함수로 사용하는 방법이다.

* 아파치 더비는 자바로 개발된 DBMS이다.


1. 자바 클래스 작성

SQL 함수로 사용하려면 메소드를 public static으로 만들어야 한다. NameUtil 클래스의 toId와 toAlias 메소드처럼...

package com.dimdol.example;

import java.util.HashMap;
import java.util.Map;

public final class NameUtil {

  private static Map ids = new HashMap();

  private static Map alias = new HashMap();

  private AgentUtil() {
    // ids와 alias 초기화
  }

  public static String toId(String key) {
      String result = (String) alias.get(key);
      return result == null ? key : result;
  }

  public static String toAlias(String key) {
    String result = (String) ids.get(key);
    return result == null ? key : result;
  }

}


2. SQL 함수 선언

다음 쿼리로 NameUtil.toId 메소드로 TO_ID 함수를 만든다.

CREATE FUNCTION TO_ID(ALIAS VARCHAR(100)) RETURNS VARCHAR(100) PARAMETER STYLE JAVA NO SQL LANGUAGE JAVA
EXTERNAL NAME 'com.dimdol.example.NameUtil.toId'

다음 쿼리로는 NameUtil.toAlias 메소드로 TO_ALIAS 함수를 만든다.

CREATE FUNCTION TO_ALIAS(ID VARCHAR(100)) RETURNS VARCHAR(100) PARAMETER STYLE JAVA NO SQL LANGUAGE JAVA
EXTERNAL NAME 'com.dimdol.example.NameUtil.toAlias'


3. 사용 방법

이렇게 작성한 SQL 함수를 아래와 같이 사용한다. 일반 SQL 함수와 사용 방법이 다르지 않다.

SELECT TO_ALIAS(ID)
   FROM EMPLOYEE
 WHERE ID = TO_ID('딤돌')