原来用sql server2005数据库,客户需要,需要整体迁移到oracle 11g。
用c# 的B/S结构程序。
有没有什么好的方法啊。。

解决方案 »

  1.   

    前段时间做了一个这样的需求,由于数量大,尝试了一些方法,发你看一下,希望能给你帮助。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中。 
      

  2.   

    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=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+")");
    }
    }
    }
      

  3.   

    建表脚本和数据可以迁移到Oracle数据库中,建表脚本中不支持标识列,需要用触发器和序列来替换
    但是所有的脚本(函数,存储过程、触发器)等都需要重新编写,因为语法不一样
      

  4.   

    谢谢,我用c# 写程序移植。
    第一步,数据库表结构移植过去。已完成。
    第二部,数据库数据迁移。但是因为数据表很多,数据量就更大了。非常的费时间。搞不好还死机了。非常难搞啊。看来还是研究下 sql*loadoracle用的还不熟呢
      

  5.   

    你先试试sql*load,有问题发出来让大家帮你看看。
      

  6.   

    你可以用sql developer里面中的workbench migration是比较方便的。
      

  7.   

    其实sql里面的SSIS也可以导入,但是需要一个表一个表的处理,稍微数据类型不一样,就不行了。有块2千个表,太麻烦了。