sql server2005 全库迁移至oracle11g 原来用sql server2005数据库,客户需要,需要整体迁移到oracle 11g。用c# 的B/S结构程序。有没有什么好的方法啊。。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 前段时间做了一个这样的需求,由于数量大,尝试了一些方法,发你看一下,希望能给你帮助。SQL server向oracle迁移方案1、使用MS SQL自带的import/export工具,import/export工具可以方便的把数据迁移到oracle。需要通过odbc for oracle作为目的源。能保证绝大部分数据导入到oracle中,但是预先你必须在oracle建立user和相应的tablespace。以为sql7中有一些特殊datatype,如:text,image等。当一个table中有多于一个text和image的字段时,将出现错误,不能执行。这时你需要做出选择,或者把后者text镜像为varchar2(4000),或者镜像为long datatype。但long datatype一个table里只能有一个,而且还有可能遇到字符集的问题。2、使用oracle的sql*load,虽然麻烦些,但是是最有效的办法。可以使用各种方法把数据源导到一个外部文件中(a、我用的java输出txt文档 或者 b、MS SQL带的BCP工具)。然后使用SQL*load(load的使用方法你可以去查一下,比较简单。)把这些数据导入到oracle中。 3、使用程序进行移植: 程序语言:java 数据库连接sql server:jdbc-odbc桥 数据库连接oracle :jdbc代码如下:import java.lang.*;import java.sql.*;public class SqlToOracle { public static void main(String[] args) throws SQLException,ClassNotFoundException{/*jdbc的oracle连接*///String sDBDriver = "oracle.jdbc.driver.OracleDriver"; /*odbc的连接*/String oralce_sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver"; String oralce_sConnStr = "jdbc:oracle:thin:@IP:1521:数据库实例名";/*jdbc的SQL server连接*///jdbc.url=jdbc:sqlserver://IP;instanceName=ProductDB;databaseName=product_index;selectMethod=cursorString sqlServer_sDBDriver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";String sqlServer_sConnStr = "Jdbc:Odbc:数据库名称";//客户端游标//String sConnStr = "jdbc:sqlserver://localhost:1433; DatabaseName=mahanso";//;selectMethod=cursor//服务器端游标//String sConnStrServerCursor = "jdbc:sqlserver://localhost:1433;DatabaseName=mahanso;selectMethod=cursor"; String sqlServer_UserName = "";String sqlServer_PassWord = "";String oralce_UserName = "";String oralce_PassWord = ""; //登记驱动Class.forName(oralce_sDBDriver); Class.forName(sqlServer_sDBDriver);//连接到数据库Connection cn_oracle = DriverManager.getConnection(oralce_sConnStr,oralce_UserName,oralce_PassWord); Connection cn_sqlserver = DriverManager.getConnection(sqlServer_sConnStr,sqlServer_UserName,sqlServer_PassWord); Statement s_oracle = cn_oracle.createStatement(); Statement s_sqlserver = cn_sqlserver.createStatement();ResultSet rs = s_sqlserver.executeQuery("select * from A表 where id between 1 and 20000");//字段1String ziduan1 = new String("1");//字段2String ziduan2 = new String("1"); //字段3String ziduan3 = new String("1"); //向oracle数据库插入数据while(rs.next()){ziduan1 = rs.getString("ziduan1");ziduan2 = rs.getString("ziduan2");ziduan3 = rs.getString("ziduan3");s_oracle.execute("insert into A表 values(\\"+ziduan1+"\\,\\"+ziduan2+"\\,\\"+ziduan3+")");}}} 建表脚本和数据可以迁移到Oracle数据库中,建表脚本中不支持标识列,需要用触发器和序列来替换但是所有的脚本(函数,存储过程、触发器)等都需要重新编写,因为语法不一样 谢谢,我用c# 写程序移植。第一步,数据库表结构移植过去。已完成。第二部,数据库数据迁移。但是因为数据表很多,数据量就更大了。非常的费时间。搞不好还死机了。非常难搞啊。看来还是研究下 sql*loadoracle用的还不熟呢 你先试试sql*load,有问题发出来让大家帮你看看。 你可以用sql developer里面中的workbench migration是比较方便的。 其实sql里面的SSIS也可以导入,但是需要一个表一个表的处理,稍微数据类型不一样,就不行了。有块2千个表,太麻烦了。 求助Oracle 11g无法安装 Oracle中数据转库 oracle group by 问题请教 在客户端操作从-从一个数据库导入数据到另一数据库。急!!!高分求助! 如何在Oracle两个字段中间添加一个字段而不冲掉原来的数据? 那位大虾帮忙解决一下日期问题 SP2-0423: 非法的 GET 命令 表空间 关于查询的问题 急问!!!! PHP怎么获取oracle存储过程返回的游标 SQL 语句调整排序编号 急!ORA-06502
能保证绝大部分数据导入到oracle中,但是预先你必须在oracle建立user和相应的tablespace。以为sql7中有一些特殊datatype,
如:text,image等。当一个table中有多于一个text和image的字段时,将出现错误,不能执行。这时你需要做出选择,
或者把后者text镜像为varchar2(4000),或者镜像为long datatype。但long datatype一个table里只能有一个,而且还有可能遇到字符集的问题。2、使用oracle的sql*load,虽然麻烦些,但是是最有效的办法。可以使用各种方法把数据源导到一个外部文件中(a、我用的java输出txt
文档 或者 b、MS SQL带的BCP工具)。然后使用SQL*load(load的使用方法你可以去查一下,比较简单。)把这些数据导入到oracle中。
程序语言:java
数据库连接sql server:jdbc-odbc桥
数据库连接oracle :jdbc代码如下:
import java.lang.*;
import java.sql.*;
public class SqlToOracle {
public static void main(String[] args) throws SQLException,ClassNotFoundException{
/*jdbc的oracle连接*/
//String sDBDriver = "oracle.jdbc.driver.OracleDriver";
/*odbc的连接*/
String oralce_sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver";
String oralce_sConnStr = "jdbc:oracle:thin:@IP:1521:数据库实例名";
/*jdbc的SQL server连接*/
//jdbc.url=jdbc:sqlserver://IP;instanceName=ProductDB;databaseName=product_index;selectMethod=cursor
String sqlServer_sDBDriver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
String sqlServer_sConnStr = "Jdbc:Odbc:数据库名称";
//客户端游标
//String sConnStr = "jdbc:sqlserver://localhost:1433; DatabaseName=mahanso";//;selectMethod=cursor
//服务器端游标
//String sConnStrServerCursor = "jdbc:sqlserver://localhost:1433;DatabaseName=mahanso;selectMethod=cursor";
String sqlServer_UserName = "";
String sqlServer_PassWord = "";
String oralce_UserName = "";
String oralce_PassWord = "";
//登记驱动
Class.forName(oralce_sDBDriver);
Class.forName(sqlServer_sDBDriver);
//连接到数据库
Connection cn_oracle = DriverManager.getConnection(oralce_sConnStr,oralce_UserName,oralce_PassWord);
Connection cn_sqlserver = DriverManager.getConnection(sqlServer_sConnStr,sqlServer_UserName,sqlServer_PassWord);
Statement s_oracle = cn_oracle.createStatement();
Statement s_sqlserver = cn_sqlserver.createStatement();
ResultSet rs = s_sqlserver.executeQuery("select * from A表 where id between 1 and 20000");
//字段1
String ziduan1 = new String("1");
//字段2
String ziduan2 = new String("1");
//字段3
String ziduan3 = new String("1");
//向oracle数据库插入数据
while(rs.next()){
ziduan1 = rs.getString("ziduan1");
ziduan2 = rs.getString("ziduan2");
ziduan3 = rs.getString("ziduan3");
s_oracle.execute("insert into A表 values(\\"+ziduan1+"\\,\\"+ziduan2+"\\,\\"+ziduan3+")");
}
}
}
但是所有的脚本(函数,存储过程、触发器)等都需要重新编写,因为语法不一样
第一步,数据库表结构移植过去。已完成。
第二部,数据库数据迁移。但是因为数据表很多,数据量就更大了。非常的费时间。搞不好还死机了。非常难搞啊。看来还是研究下 sql*loadoracle用的还不熟呢