Class DatabaseBackup

java.lang.Object
com.easydesk.torque.DatabaseBackup

public class DatabaseBackup extends Object
DatabaseBackup
Author:
Youngho Cho
  • Constructor Details

    • DatabaseBackup

      public DatabaseBackup()
      새로운 DatabaseBackup 인스턴스를 생성한다.
  • Method Details

    • exportDatabaseToInsertSql

      public void exportDatabaseToInsertSql(String outputPath) throws Exception
      백업 대상 테이블 목록을 Torque.getDatabaseMap().getTables() 가 아니라 JDBC DatabaseMetaData로 직접 조회한다. Torque의 TableMap은 스키마 전체가 한 번에 등록되는 게 아니라, 각 테이블의 생성된 Base*Peer 클래스가 (static 초기화 블록에서) 실제로 "로딩"되는 시점에 하나씩 DatabaseMap에 등록된다 (JVM 클래스 lazy loading). 그래서 이 메서드를 부르는 시점까지 어떤 화면/코드도 건드리지 않은 테이블의 Peer 클래스는 아직 로딩되지 않았을 수 있고, 그런 테이블은 DatabaseMap에 없어서 백업 대상에서 조용히 빠진다. (JUnit 테스트에서는 같은 JVM(surefire reuseForks) 안에서 다른 테스트들이 먼저 돌면서 대부분의 Peer 클래스를 이미 로딩해놓은 상태라 우연히 전체 테이블이 다 나왔던 것이고, 방금 켠 웹 앱에서는 그때까지 실제로 접근한 화면들의 Peer 클래스만 로딩되어 있어서 일부(예: 15개)만 백업됐던 것이다.) JDBC DatabaseMetaData#getTables()는 Peer 클래스 로딩 여부와 무관하게 실제 DB에 존재하는 테이블을 그대로 조회하므로 이 문제가 없다. HSQLDB의 내부 LOB 저장용 테이블 (SYSTEM_LOBS 스키마) 등이 섞여 나오지 않도록 스키마를 "PUBLIC"(사용자 테이블이 생성되는 기본 스키마)으로 한정했다. 테이블은 알파벳/JDBC 순서가 아니라 FK 의존성 순서(부모 테이블 먼저)로 정렬해서 처리한다. 개별 백업 파일(테이블명.sql)을 나중에 손으로 합쳐서 하나의 seed 파일로 쓸 때, 순서를 잘못 맞추면(예: 자식 테이블을 부모보다 먼저 insert) "foreign key no parent" 에러가 나는 문제를 겪은 적이 있어서, 아예 이 메서드가 부모→자식 순서를 계산해서 각 테이블을 그 순서로 처리하고, COMBINED_FILE_NAME로 전체를 이미 올바른 순서로 합친 파일도 같이 만들어준다 - 여러 테이블을 하나의 seed 파일로 합쳐야 할 때는 이 파일을 쓰면 된다.
      Parameters:
      outputPath - 백업 파일을 저장할 경로, null 이면 기본 백업 폴더를 사용한다.
      Throws:
      Exception - 백업 중 오류가 발생한 경우
    • exportTableToInsertSql

      public void exportTableToInsertSql(String tableName, String outputPath) throws Exception
      특정 table backup (테이블명으로 직접 지정)
      Parameters:
      tableName - 백업할 테이블 이름
      outputPath - 백업 파일을 저장할 경로
      Throws:
      Exception - 백업 중 오류가 발생한 경우
    • exportTableToInsertSql

      public void exportTableToInsertSql(TableMap tableMap, String outputPath) throws Exception
      특정 table backup (Torque TableMap으로 지정) - 하위 호환용으로 남겨둠.
      Parameters:
      tableMap - 백업할 테이블의 TableMap
      outputPath - 백업 파일을 저장할 경로
      Throws:
      Exception - 백업 중 오류가 발생한 경우