第一步:導出服務器上DB2的表結構(使用命令行,如已編目,可跳過3,4)
1.運行cmd
2.輸入db2cmd
3.創建節點
db2 catalog tcpip node mynode remote 192.168.1.90 server 50000
4.創建遠程數據庫實例
db2 catalog db dbname as mydb at node mynode
5.連接數據庫 www.2cto.com
db2 CONNECT TO mydb user username using pssword
6.導出表結構
db2look -d dbname -e -a -x -i username -w password -o ddlfile.sql
導出過程截圖如下:
導出的文件是D:\out.sql
第二步:在待導入的DB2數據庫中執行DDL,創建表結構
用TOAD等客戶端連接待導入的DB2數據庫,復制D:\out.sql中的所有SQL到TOAD中,執行
(如2個數據庫中的用戶名不同,需手動替換out.sql中的用戶名)
第三步:准備批量導出導入的SQL腳本
語法如下:
export to [path(例:D:"TABLE1.ixf)] of ixf select [字段(例: * or col1,col2,col3)] from TABLE1;
我沒找到支持批量導出的客戶端,所以自己寫一個java類,用循環生成導出導入所有表數據的SQL
代碼如下(運行時需引入db2jcc.jar):
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.sql.*;
www.2cto.com
public class ExportDB2 {
/** *//**
* @param args
*/
public static void main(String[] args) {
String driver = "com.ibm.db2.jcc.DB2Driver" ;
String url = "jdbc:db2://ip:50000/dbname" ;
String userName = "user1" ;
String passWord = "psw1" ;
Connection conn = null ;
Statement st = null ;
ResultSet rs = null ;
String sql = null ;
try {
Class. forName(driver).newInstance();
conn = DriverManager. getConnection(url, userName, passWord);
st = conn.createStatement();
sql = new String("SELECT name FROM sysibm.systables where creator = 'user1' order by name");
rs = st.executeQuery(sql);
String table = null ;
String exportCMD = null ;
String importCMD = null ;
// 文件路徑
File file= new File( "d:\\exportCMD.txt " );
File file2 = new File("d:\\importCMD.txt" );
BufferedWriter out= new BufferedWriter(
new FileWriter(file, true));
BufferedWriter out2= new BufferedWriter(
new FileWriter(file2, true));
while (rs.next()){ www.2cto.com
table = rs.getString(1);
exportCMD = "export to D:\\db2-bak\\ixf\\" + table +".ixf of ixf select * from " +table+ ";";
out.write(exportCMD);
out.newLine();
importCMD = "import from D:\\db2-bak\\ixf\\" + table +".ixf of ixf into " +table+ ";";
out2.write(importCMD);
out2.newLine();
}
out.close();
out= null ;
file= null ;
out2.close();
out2= null ;
file2= null ;
conn.close();
System. out .println("Finished!" );
} catch (Exception e){
System. out .println("error:" + e.getMessage() );
System. out .println(e.toString());
}
}
}
www.2cto.com
運行後,在D盤生成這兩個文件,一個是導出所有表中數據的SQL,一個是導入所有表中數據的SQL
第四步:批量導出表中數據
用TOAD等客戶端連接服務器上的DB2數據庫,復制D:\exportCMD.txt中的所有SQL到TOAD中,執行
導出的全部ixf文件,存在於D:\bd2-bak\ixf\
第五步:批量導入表中數據
用TOAD等客戶端連接待導入的DB2數據庫,復制D:\importCMD.txt中的所有SQL到TOAD中,執行
大功告成。
摘自 雷明慶的專欄