场景:客户现在使用我们开发的退货终端退货,退货完成后我们需要将新系统的中的几个数据库表导入原老系统中去。这个过程将持续一定时间,直到我们的新系统稳定后,停止这个数据导入过程
需求:现在将新系统库的数据库表,如A表(字段1,字段2,字段3,字段4,状态位),将A表数据库导入原系统数据库A1中,A表中导入完成后需要对A表中的状态位字段置一个值为1,表示下次再导数据的时候不在考虑这样的数据。请问如何才能实现在这样的需求(要求纯SQL脚本),注:新系统数据库oracle10g,老系统数据库为SQLServer2000

解决方案 »

  1.   

    1、在目的SQL Server数据库服务器上安装ORACLE Client软件或者ORACLE ODBC Driver. 在\network\admin\tnsnames.ora里配置ORACLE数据库的别名(service name)。
      具体配置方法可以参考本站文章:客户端连服务器的注意事项
      2、在WIN2000或者win2003服务器->管理工具->数据源(ODBC)->系统DSN(本机器上NT域用户都可以用)->添加->ORACLE ODBC Driver->完成->data source name 可以自定义,我一般填ORACLE数据库的sid标志,description里可以填ORACLE数据库详细描述,也可以不填->data source service name 填第1步定义的ORACLE数据库别名->OK。
      (用户DSN和文件DSN也可以类似配置,但使用的时候有一些限制)
      3、SQL Server的导入和导出数据工具里->选数据源-> 数据源(其它(ODBC数据源))->选第2步在ODBC里定义的系统DSN source name,用户名密码处填写ORACLE系统的用户名和密码->下一步->选择目的,选SQL Server数据库(跟上面第二点讲的一致,就不重复了)。
      

  2.   

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

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

  4.   

    除了楼上的,还可以使用oralce的外部包packeg开发一些存储过程,主要是连接到sqlserver数据库,向sql server中的表插入数据等:
    创建一个dll(unix系统对应的是.so),dllexport一些函数,功能是连接Sqlserver,并操作数据库
    在oracle中定义外部程序包,调用这些DLL中的函数。
    在oracle的表中定义触发器,调用包函数,具体内容可以参考一些中间件的做法
      

  5.   

    还有一种方法,就是使用oracle的透明代理,通过dblink连接到sqlserver 
      

  6.   

    Oracle Migration Workbench
    或者SQL SERVER的官方迁移工具试试....
      

  7.   

    用oracle的透明网关吧!建类似于sql server的数据库链接!
      

  8.   

    这个需求不复杂,实现的办法也很多,不建议除sql pl/sql以外的程序