Oracle移植到DB2应该具备这俩个数据库哪些方面的知识,特别是DB2?(暂时以数据库为层面讨论,不计算版本)谢谢各位
解决方案 »
- 两个sql的不同之处?
- Oracle instance 登陆不上。
- 请指出以下存储过程的错误
- oracle从dual表中怎样获取系统的当前时间,具体到毫秒
- 如何查到Oracle安装需要哪些补丁?
- 新手提问:ORACLE怎么让A用户只能访问B用户的一部分表?
- 如何在sql语句中判断出某个字段的数据都是数字?急~
- 怎样输出一个变量
- 想学ORACLE,请高手给点建议!
- ORACLE中的主键与外键是否有关联更新的功能?
- ORA-39112: Dependent object type COMMENT skipped
- oracle 11g中 在dos中 输入 :sqlplus scott/tiger 为什么出现错误?
http://www.360doc.com/content/08/1226/11/16915_2201788.shtml
2、把oracle中数据导出到文本文件中,数据之间以逗号分隔
3、在db2的命令行处理器中,连接上数据库,用import 语句导入,语句如下:
import from c:\test.txt of del insert into 表名
而数据移植的过程可以采用文本文件导出在导入的方式,也可以用ETL工具,如BO的Data Integrater,或者MS的SSIS,或者IBM的DS等。这些只需要配置好源数据库和目标数据库的连接,以及表字段之间的映射即可实现数据的迁移,非常简单方便。
DB2 预编译器不能识别声明部分中用户定义的数据类型(typefef,#define macros),位于 EXEC SQL BEGIN DECLARE SECTION 和 EXEC SQL END DECLARE SECTION 语句之间。
由于参数类型不同,使用用户定义函数(UDF)(比如 ||、rawtohex、hextoraw,等等)开发的应用程序不能在 DB2 上编译。
使用 DECODE 函数的 Oracle 应用程序不能在 DB2 上正确编译。
需要在 DB2 中执行与包含 NOWAIT 的 Oracle SQL 语句类似的行为。
需要在 DB2 中处理大小超过 32672 的主机变量。
当移植到 DB2 时,需要考虑 Oracle 的 “Select for update” 语句
把Oracle的数据移植到DB2数据库中我们的Java程序起到一个转换器的作用,把Oracle中的不同的数据类型映射为相应的DB2数据库中的类型同时把从Oracle中查询出的数据插入到DB2数据库中从而完成整个移植过程。下面我就结合Java程序给大家是如何实现这一功能的
1.导入必需的java类
import java.text.*;
import java.util.*;
import java.io.*;
import java.sql.*;
import java.lang.*;
2.下面是从属性文件中读取在转换器使用的配置信息
//下面的代码是读属性文件的信息
Properties props=new Properties();
File f=new File("OracleToDb2.properties");
FileInputStream in=new FileInputStream(f);
props.load(in);
String db2_dbname=props.getProperty("db2_dbname");
String db2_username=props.getProperty("db2_username");
String db2_password=props.getProperty("db2_password");
String oracle_url=props.getProperty("oracle_url");
String oracle_dbname=props.getProperty("oracle_dbname");
String oracle_username=props.getProperty("oracle_username");
String oracle_password=props.getProperty("oracle_password");
String io_tables=props.getProperty("io_tables");
通过java的输入流来读取文件中的内容
其中
OracleToDb2.properties为属性文件名;
db2_dbname, db2_username, db2_password 分别为目标DB2数据库的数据库名,数据库用户名,口令。
oracle_url ,oracle_dbname,oracle_username,oracle_password分别为oracle数据库的地址,数据库名,用户名,口令。
io_tables为从Oracle移植到DB2的表名
下面是属性文件的全部内容:
db2_dbname=db2DatabaseName
db2_username=db2UserName
db2_password=db2Password
db2_host=127.0.0.1
oracle_url=127.0.0.1
oracle_dbname=oracleDatabaseName
oracle_username=oracleUsername
oracle_password=oraclePassword
io_tables=io_tables
3.接着分别建立DB2和ORACLE数据库的连接
其中的参数为从属性文件中读入的值,jdbc用的是廋客户机的type4:
DriverManager.registerDriver(new COM.ibm.db2.jdbc.app.DB2Driver());
Class.forName ("oracle.jdbc.driver.OracleDriver").newInstance ();
Connection connOra = DriverManager.getConnection("jdbc:db2:"+db2_dbname, db2_username,db2_password);
//Connection connOra = DriverManager.getConnection("jdbc:db2://"+db2_host+":"+db2_port+"/"+db2_dbname, db2_username,db2_password);
Connection connDB2 =DriverManager.getConnection("jdbc:oracle:thin:@"+oracle_url+":1521:"+oracle_dbname,oracle_username, oracle_password);
4.转换器的核心java类
转换器的核心java类的方法为一个静态的java方法MigrateTable,我在代码中给解释具体的功能的内容和为什么:
//引入oracle和db2的连接及需要移植的表
public static void MigrateTable(Connection connOra, Connection connDB2, String strTableName)
throws Exception
{
//进行防错处理
if (strTableName.length() <3)
return;
int nRows = 0;
FileWriter fw = null;
PrintWriter pw = null;
Statement stmt = null;
ResultSet rst = null;
Statement stmtDelete = null;
PreparedStatement stmtUp = null;
try
{
//记录转换过程中的信息
fw = new FileWriter("OracleToDb2.log", true);
pw = new PrintWriter(fw);
System.out.println("migrating table " + strTableName);
pw.println("migrating table " + strTableName);
//确定连接赋予SQL语句
stmt = connOra.createStatement();
//进行表内容的查询
rst = stmt.executeQuery("select * from " + strTableName);
//读入表的元数据
ResultSetMetaData meta = rst.getMetaData();
String strSql = "insert into " + strTableName;
String strFields = "(";
String strValues = " values(";
//根据读入的表的元数据的内容进行递归的读取
Object arObjData[] = new Object[meta.getColumnCount()];
for (int i = 0; i < arObjData.length; i ++)
{
if (i > 0)
{
strValues = strValues + ", ";
strFields = strFields + ", ";
}
strValues = strValues + "?";
strFields = strFields + meta.getColumnName(i + 1);
}
strValues = strValues + ")";
strFields = strFields + ")";
strSql = strSql + strFields + strValues;
//建立DB2数据库的连接
stmtDelete = connDB2.createStatement();
//删除原DB2数据库表中的数据
stmtDelete.executeUpdate("delete from " + strTableName);
stmtDelete.close();
stmtUp = connDB2.prepareStatement(strSql);
while (rst.next())
{
for (int i = 0; i
上面的代码示整个转换器的关键部分,它实现了整个移植过程的大部分功能而且可以实现代码页,二进制的数据的移植是一个功能强大的移植工具。下面我就运行的步骤作详细的演示:
在操作系统上的类路径中加入jdk的路径。
配置属性文件。
把oracle数据库中的表结构倒成.ddl文件,并调整其中的数据类型映射为DB2中的类型建立表。
编译整个Java文件
执行
查看日志信息
下面是整个程序的完整代码:
import java.text.*;
import java.util.*;
import java.io.*;
import java.sql.*;
import java.lang.*;
public class OracleToDb2
{
public static void main(String[] args)
throws Exception
{
//下面的代码是读属性文件的信息
Properties props=new Properties();
File f=new File("OracleToDb2.properties");
FileInputStream in=new FileInputStream(f);
props.load(in);
String db2_dbname=props.getProperty("db2_dbname");
String db2_username=props.getProperty("db2_username");
String db2_password=props.getProperty("db2_password");
String oracle_url=props.getProperty("oracle_url");
String oracle_dbname=props.getProperty("oracle_dbname");
String oracle_username=props.getProperty("oracle_username");
String oracle_password=props.getProperty("oracle_password");
String io_tables=props.getProperty("io_tables");
//建立DB2和ORACLE数据库的分别连接
// String db2_url = "jdbc:db2://"+db2_host+":"+db2_port+"/"+db2_dbname;
DriverManager.registerDriver(new COM.ibm.db2.jdbc.app.DB2Driver());
//DriverManager.registerDriver(new COM.ibm.db2.jdbc.net.DB2Driver());
Class.forName ("oracle.jdbc.driver.OracleDriver").newInstance ();
Connection connOra = DriverManager.getConnection("jdbc:db2:"+db2_dbname, db2_username,db2_password);
//Connection connOra = DriverManager.getConnection("
jdbc:db2://"+db2_host+":"+db2_port+"/"+db2_dbname, db2_username,db2_password);
Connection connDB2 = DriverManager.getConnection("
jdbc:oracle:thin:@"+oracle_url+":1521:"+oracle_dbname,oracle_username, oracle_password);
FileReader reader = new FileReader(io_tables);
LineNumberReader lreader = new LineNumberReader(reader);
String strTable = null;
while ((strTable = lreader.readLine()) != null)
{
try
{
MigrateTable(connOra, connDB2, strTable);
}
catch (Exception e)
{
e.printStackTrace();
}
}
reader.close();
connOra.close();
connDB2.close();
System.out.println("ok");
}
public static void MigrateTable(Connection connOra, Connection connDB2, String strTableName)
throws Exception
{
if (strTableName.length() <3)
return;
int nRows = 0;
FileWriter fw = null;
PrintWriter pw = null;
Statement stmt = null;
ResultSet rst = null;
Statement stmtDelete = null;
PreparedStatement stmtUp = null;
try
{
fw = new FileWriter("OracleToDb2.log", true);
pw = new PrintWriter(fw);
System.out.println("migrating table " + strTableName);
pw.println("migrating table " + strTableName);
stmt = connOra.createStatement();
rst = stmt.executeQuery("select * from " + strTableName);
ResultSetMetaData meta = rst.getMetaData();
String strSql = "insert into " + strTableName;
String strFields = "(";
String strValues = " values(";
Object arObjData[] = new Object[meta.getColumnCount()];
for (int i = 0; i < arObjData.length; i ++)
{
if (i > 0)
{
strValues = strValues + ", ";
strFields = strFields + ", ";
}
strValues = strValues + "?";
st
把Oracle的数据移植到DB2数据库中我们的Java程序起到一个转换器的作用,把Oracle中的不同的数据类型映射为相应的DB2数据库中的类型同时把从Oracle中查询出的数据插入到DB2数据库中从而完成整个移植过程。下面我就结合Java程序给大家是如何实现这一功能的
1.导入必需的java类
import java.text.*;
import java.util.*;
import java.io.*;
import java.sql.*;
import java.lang.*;
2.下面是从属性文件中读取在转换器使用的配置信息
//下面的代码是读属性文件的信息
Properties props=new Properties();
File f=new File("OracleToDb2.properties");
FileInputStream in=new FileInputStream(f);
props.load(in);
String db2_dbname=props.getProperty("db2_dbname");
String db2_username=props.getProperty("db2_username");
String db2_password=props.getProperty("db2_password");
String oracle_url=props.getProperty("oracle_url");
String oracle_dbname=props.getProperty("oracle_dbname");
String oracle_username=props.getProperty("oracle_username");
String oracle_password=props.getProperty("oracle_password");
String io_tables=props.getProperty("io_tables");
通过java的输入流来读取文件中的内容
其中
OracleToDb2.properties为属性文件名;
db2_dbname, db2_username, db2_password 分别为目标DB2数据库的数据库名,数据库用户名,口令。
oracle_url ,oracle_dbname,oracle_username,oracle_password分别为oracle数据库的地址,数据库名,用户名,口令。
io_tables为从Oracle移植到DB2的表名
下面是属性文件的全部内容:
db2_dbname=db2DatabaseName
db2_username=db2UserName
db2_password=db2Password
db2_host=127.0.0.1
oracle_url=127.0.0.1
oracle_dbname=oracleDatabaseName
oracle_username=oracleUsername
oracle_password=oraclePassword
io_tables=io_tables
3.接着分别建立DB2和ORACLE数据库的连接
其中的参数为从属性文件中读入的值,jdbc用的是廋客户机的type4:
DriverManager.registerDriver(new COM.ibm.db2.jdbc.app.DB2Driver());
Class.forName ("oracle.jdbc.driver.OracleDriver").newInstance ();
Connection connOra = DriverManager.getConnection("jdbc:db2:"+db2_dbname, db2_username,db2_password);
//Connection connOra = DriverManager.getConnection("jdbc:db2://"+db2_host+":"+db2_port+"/"+db2_dbname, db2_username,db2_password);
Connection connDB2 =DriverManager.getConnection("jdbc:oracle:thin:@"+oracle_url+":1521:"+oracle_dbname,oracle_username, oracle_password);
4.转换器的核心java类
转换器的核心java类的方法为一个静态的java方法MigrateTable,我在代码中给解释具体的功能的内容和为什么:
//引入oracle和db2的连接及需要移植的表
public static void MigrateTable(Connection connOra, Connection connDB2, String strTableName)
throws Exception
{
//进行防错处理
if (strTableName.length() <3)
return;
int nRows = 0;
FileWriter fw = null;
PrintWriter pw = null;
Statement stmt = null;
ResultSet rst = null;
Statement stmtDelete = null;
PreparedStatement stmtUp = null;
try
{
//记录转换过程中的信息
fw = new FileWriter("OracleToDb2.log", true);
pw = new PrintWriter(fw);
System.out.println("migrating table " + strTableName);
pw.println("migrating table " + strTableName);
//确定连接赋予SQL语句
stmt = connOra.createStatement();
//进行表内容的查询
rst = stmt.executeQuery("select * from " + strTableName);
//读入表的元数据
ResultSetMetaData meta = rst.getMetaData();
String strSql = "insert into " + strTableName;
String strFields = "(";
String strValues = " values(";
//根据读入的表的元数据的内容进行递归的读取
Object arObjData[] = new Object[meta.getColumnCount()];
for (int i = 0; i < arObjData.length; i ++)
{
if (i > 0)
{
strValues = strValues + ", ";
strFields = strFields + ", ";
}
strValues = strValues + "?";
strFields = strFields + meta.getColumnName(i + 1);
}
strValues = strValues + ")";
strFields = strFields + ")";
strSql = strSql + strFields + strValues;
//建立DB2数据库的连接
stmtDelete = connDB2.createStatement();
//删除原DB2数据库表中的数据
stmtDelete.executeUpdate("delete from " + strTableName);
stmtDelete.close();
stmtUp = connDB2.prepareStatement(strSql);
while (rst.next())
{
for (int i = 0; i
上面的代码示整个转换器的关键部分,它实现了整个移植过程的大部分功能而且可以实现代码页,二进制的数据的移植是一个功能强大的移植工具。下面我就运行的步骤作详细的演示:
在操作系统上的类路径中加入jdk的路径。
配置属性文件。
把oracle数据库中的表结构倒成.ddl文件,并调整其中的数据类型映射为DB2中的类型建立表。
编译整个Java文件
执行
查看日志信息
下面是整个程序的完整代码:
import java.text.*;
import java.util.*;
import java.io.*;
import java.sql.*;
import java.lang.*;
public class OracleToDb2
{
public static void main(String[] args)
throws Exception
{
//下面的代码是读属性文件的信息
Properties props=new Properties();
File f=new File("OracleToDb2.properties");
FileInputStream in=new FileInputStream(f);
props.load(in);
String db2_dbname=props.getProperty("db2_dbname");
String db2_username=props.getProperty("db2_username");
String db2_password=props.getProperty("db2_password");
String oracle_url=props.getProperty("oracle_url");
String oracle_dbname=props.getProperty("oracle_dbname");
String oracle_username=props.getProperty("oracle_username");
String oracle_password=props.getProperty("oracle_password");
String io_tables=props.getProperty("io_tables");
//建立DB2和ORACLE数据库的分别连接
// String db2_url = "jdbc:db2://"+db2_host+":"+db2_port+"/"+db2_dbname;
DriverManager.registerDriver(new COM.ibm.db2.jdbc.app.DB2Driver());
//DriverManager.registerDriver(new COM.ibm.db2.jdbc.net.DB2Driver());
Class.forName ("oracle.jdbc.driver.OracleDriver").newInstance ();
Connection connOra = DriverManager.getConnection("jdbc:db2:"+db2_dbname, db2_username,db2_password);
//Connection connOra = DriverManager.getConnection("
jdbc:db2://"+db2_host+":"+db2_port+"/"+db2_dbname, db2_username,db2_password);
Connection connDB2 = DriverManager.getConnection("
jdbc:oracle:thin:@"+oracle_url+":1521:"+oracle_dbname,oracle_username, oracle_password);
FileReader reader = new FileReader(io_tables);
LineNumberReader lreader = new LineNumberReader(reader);
String strTable = null;
while ((strTable = lreader.readLine()) != null)
{
try
{
MigrateTable(connOra, connDB2, strTable);
}
catch (Exception e)
{
e.printStackTrace();
}
}
reader.close();
connOra.close();
connDB2.close();
System.out.println("ok");
}
public static void MigrateTable(Connection connOra, Connection connDB2, String strTableName)
throws Exception
{
if (strTableName.length() <3)
return;
int nRows = 0;
FileWriter fw = null;
PrintWriter pw = null;
Statement stmt = null;
ResultSet rst = null;
Statement stmtDelete = null;
PreparedStatement stmtUp = null;
try
{
fw = new FileWriter("OracleToDb2.log", true);
pw = new PrintWriter(fw);
System.out.println("migrating table " + strTableName);
pw.println("migrating table " + strTableName);
stmt = connOra.createStatement();
rst = stmt.executeQuery("select * from " + strTableName);
ResultSetMetaData meta = rst.getMetaData();
String strSql = "insert into " + strTableName;
String strFields = "(";
String strValues = " values(";
Object arObjData[] = new Object[meta.getColumnCount()];
for (int i = 0; i < arObjData.length; i ++)
{
if (i > 0)
{
strValues = strValues + ", ";
strFields = strFields + ", ";
}
strValues = strValues + "?";
st