|
IBM Data Movement Tool도 있지만 간단한 데이터를 넘길 때 유용할 수 있을 것 같습니다.
급하게 만들어 쓴거라 프로그램이 이쁘지 않습니다.
가정 : 양쪽에 Table DDL이 만들어져 있다고 가정
사용방법 :
java tc <테이블명>
tc.java
-----------------
import java.sql.*;
import java.io.*;
import java.util.Collection;
import java.sql.DatabaseMetaData;
import java.util.ArrayList;
public class tc
{
static private Connection conora = null;
static private Connection condb2 = null;
static private PreparedStatement pstmt = null;
static private PreparedStatement pstmt2 = null;
static private ResultSet rs = null;
public static void main(String[] args) throws Exception
{
try {
tcopy(args[0]);
} catch(Exception e){
e.toString();
e.printStackTrace();
}
}
public static void tcopy (String table) throws Exception // Method-1
{
StringBuffer query = new StringBuffer();
StringBuffer selectSQL = new StringBuffer();
StringBuffer insertSQL = new StringBuffer();
StringBuffer values = new StringBuffer();
int commit_cnt = 10000;
dbconn();
Collection<String> columns = new ArrayList<String>();
try {
query.append("select * from ");
query.append(table);
pstmt = conora.prepareStatement(query.toString());
rs = pstmt.executeQuery();
ResultSetMetaData md = rs.getMetaData();
for (int i = 1; i <= md.getColumnCount(); i++)
columns.add(md.getColumnName(i));
rs.close();
} catch(Exception e){
e.toString();
e.printStackTrace();
}
System.out.println("Begin copy: " + table);
selectSQL.append("select ");
insertSQL.append("insert into ");
insertSQL.append(table);
insertSQL.append("(");
boolean first = true;
for (String column : columns)
{
if (!first)
{
selectSQL.append(",");
insertSQL.append(",");
values.append(",");
} else
first = false;
selectSQL.append(column);
insertSQL.append(column);
values.append("?");
}
selectSQL.append(" FROM ");
selectSQL.append(table);
insertSQL.append(") VALUES (");
insertSQL.append(values);
insertSQL.append(")");
int rows = 0;
try { // Start Try-1
pstmt = condb2.prepareStatement(insertSQL.toString());
pstmt2 = conora.prepareStatement(selectSQL.toString());
rs = pstmt2.executeQuery();
while(rs.next()) { // Start While-1
rows++;
for (int i = 1; i <= columns.size(); i++)
{
pstmt.setString(i, rs.getString(i));
}
pstmt.execute();
if ( (rows % commit_cnt) == 0) {condb2.commit();System.out.println(rows);}
} // End while
System.out.println("Copied " + rows + " rows.");
System.out.println(" ");
} // End Try
catch(Exception e) {
e.printStackTrace();
}
finally { //Finally-1
try{
if(rs !=null) rs.close();
if(pstmt !=null) pstmt.close();
if(pstmt2 !=null) pstmt2.close();
//stmt.close();
pstmt.close();
conora.close();
condb2.close();
}
catch(Exception ee) {
ee.printStackTrace();
}
} // Finally-1
} // Method-1
public static Connection dbconn() throws SQLException {
try {
Class.forName("oracle.jdbc.OracleDriver");
conora = DriverManager.getConnection("jdbc:oracle:thin:@211.104.95.97:1521:ORCL","system","manager");
Class.forName("com.ibm.db2.jcc.DB2Driver");
condb2 = DriverManager.getConnection("jdbc:db2://localhost:65000/prod2","db2inst1","db2inst1");
}
catch (Exception e) {
System.out.println("SQL :: " + "\n" + e.getMessage()); }
return conora;
}
 |
^ㅇ^ |
|