2013-02-28 3 views
-2

동일한 구조를 가진 두 개의 Oracle 데이터베이스가 있습니다. 한 데이터베이스의 내용을 다른 데이터베이스로 복사해야합니다. 나는이 일을 돌볼 JAVA 프로그램을 작성하고있다. 미래에 테이블 구조가 바뀔 수 있기 때문에 프로그램은 스스로 적응할 수 있어야합니다. 내 코드에 문제가JDBC를 사용하여 한 테이블에서 다른 테이블로 테이블을 복사하는 방법은 무엇입니까?

try { 
       ResultSet rsConfig = getConfigRows(srcDatabase); // this method returns SELECT * FROM TEST_TABLE 
       ResultSetMetaData rsmd = rsConfig.getMetaData(); 
       int colCount = rsmd.getColumnCount(); 
       String columns = ""; 
       String values = ""; 
       for (int j = 1; j <= colCount; j++) {      
        columns += rsmd.getColumnName(j); 
        if (j <= colCount) 
         columns += ","; 
        values += "?"; 
        if (j <= colCount) 
         values += ","; 
       } 

       String sql = "INSERT INTO TEST_TABLE(" + columns + ") VALUES(" 
         + values + ")"; 
       PreparedStatement psDest = destDatabase.prepareStatement(sql); 

       while (rsConfig.next()) { 
        for (int j = 1; j <= colCount; j++) { 
         psDest.setObject(j, (Object) rsConfig.getObject(rsmd 
           .getColumnName(j))); 
        } 
        psDest.executeUpdate(); 
       } 

있습니까 : 다음 코드를 시도? 어떤 제안? 어떤 이유로 외부 도구를 사용할 수 없다는 점에 유의해야합니다!

+1

Oracle 덤프를 사용할 수 없으면 ETL 도구를 사용할 수 있습니까? 이것은 다음으로 쉬운 접근 방법이기 때문입니다. –

+2

죄로 추악합니다. 리소스를 닫거나 트랜잭션을 처리하거나 PreparedStatement를 올바르게 사용하지 마십시오. 나는 링크 또는 덤프를 사용합니다. – duffymo

+0

@duffymo 내 리소스를 닫습니다! 그것은 코드의 맨 위에있는 부분입니다. 이것은 테스트 용 초안 코드 일뿐입니다. 나는 이것을 실제 환경에서 사용하지 않을 것이다! – Tohid

답변

3

시간을 낭비하지 마십시오. 데이터베이스 링크를 생성하고 PL/SQL에 몇 줄을 작성하면 완료됩니다.

+0

우리가 하나의 서버에서 이것을하면 데이터베이스 링크가 작동합니다. asak은 다른 서버를 다룰 ​​때 사용할 수 없습니다. – Tohid

+0

아니요, 임의의 Oracle 데이터베이스에서이 작업을 수행 할 수 없습니다. –

1

나는이 접근법에 문제가 있다고 생각합니다. 얼마나 자주 테이블 구조가 변경됩니까? 이 테이블의 데이터는 얼마나 중요한가?

쿼리 및 기타 필요한 구성을 외부화 한 다음 스키마가 더 이상 예상치 못한 경우 정상적인 오류 처리 및 정상 종료를 확인하십시오.

그런 다음 스키마가 변경되면 구성을 업데이트하고 코드는 업데이트 할 수 없습니다.

+0

솔직히 그렇게 많이 변하지 않습니다. 이상적으로 우리는이 프로그램이 우리의 미래 버전과 호환되기를 원했지만 분명히 그것을 할 수있는 쉬운 방법이 없다. 그래서 아마도 당신이 이것에 대한 조언을 취할 것입니다 :) – Tohid

관련 문제