> 数据库 > DB2 >

DB2数据库的导出与导入(Windows客户端)

第一步:导出服务器上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.连接数据库    
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.*;
   
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()){    
                  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());
        }
    }
}
   
运行后,在D盘生成这两个文件,一个是导出所有表中数据的SQL,一个是导入所有表中数据的SQL
 
 
第四步:批量导出表中数据
用TOAD等客户端连接服务器上的DB2数据库,复制D:\exportCMD.txt中的所有SQL到TOAD中,执行
导出的全部ixf文件,存在于D:\bd2-bak\ixf\
 
第五步:批量导入表中数据
用TOAD等客户端连接待导入的DB2数据库,复制D:\importCMD.txt中的所有SQL到TOAD中,执行
 
大功告成。
 

(责任编辑:IT)