情况是这样的:1、oracle数据库不再本地,故无法取得数据库源文件。本地只能连接到远程oracle服务器上进行查询,不能对数据库做任何改动
2、数据库非常庞大,某些表有几千万条数据
3、oracle数据库中已存在的记录不会发生变动,现计划每周从oracle上取新增的数据记录保存到本地的sql server 2005中
4、如今我是用.Net写了个程序,,链接到远程的oracle数据库作查询,再将查询出来的数据一条条地写入回本地sql server 2005中,可此种方式只适用于数据量比较小的情况,数据库量一旦过多程序就会崩溃,但如果无法做成一次过将oracle数据自动迁移到sql server 2005的功能,每次只导入一部分数据,无法全部自动化,那人工干预的工作也是巨大的,不现实请各位根据上述情况帮我设计一个好的解决方案,或是对第“4”点的方案加以改善,以达到海量迁移的要求,谢谢了。

解决方案 »

  1.   

    SQL和ORACLE之间的数据查询配置透明网关的步骤
    前一段花了些时间配置 TRANSPARENT GATEWAY
    现在把心得贴出来与大家共享我的OS是WIN2000  
    ORACLE 9.0
    SQLSERVER2000
    HOSTNAME : SVR1
    都使用 tcp/ip 默认端口
    1: 安装 TRANSPARENT GATEWAY 选件(我安装的是FOR MSSQL)
       安装完成了以后有这样一个目录 oracle_home\ora90\tg4msql2: 配置 LISTENER.ORA
        (SID_DESC =
          (GLOBAL_DBNAME = tg4sql) # 可自己命名
          (PROGRAM = tg4msql)
          (SID_NAME = sql2000)  # SID 自己命名
          (ORACLE_HOME = D:\oracle\ora90)
        )3: 在 oracle_home\ora90\tg4msql\admin
       建文件 init<SID>.ora 由于LISTENER里定义SID为 sql2000
       因此文件名为:initsql2000.ora
       其中内容为:
       HS_FDS_CONNECT_INFO=svr1.master # svr1为SQL服务器名
       HS_FDS_TRACE_LEVEL=OFF
       HS_FDS_RECOVERY_ACCOUNT=RECOVER
       HS_FDS_RECOVERY_PWD=RECOVER4: 重启 DATABASE AND LISTENER5: 配置 tnsnames.ora
    tg_sql = 
      (DESCRIPTION = 
        (ADDRESS_LIST = 
          (ADDRESS = (PROTOCOL = TCP)(HOST = SVR1)(PORT = 1521)) 
        ) 
        (CONNECT_DATA = 
          (SID = sql2000) 
        ) 
        (HS=OK) 
      ) 6: 建立 DATABASE LINK
    CREATE PUBLIC DATABASE LINK DB_SQL
    CONNECT TO SA IDENTIFIED BY PASSWORD
    USING 'tg_sql'7: 完成,测试
      select * from t_test@db_sql8: 请注意使用 DBLINK 时,INIT.ORA中 GLOBAL_NAME 的设置,
      如果为 ture , 请使用DBLINK的全称,可在 all_db_links 中查到,
      如果为 FALSE, 不必使用全称,当出现 
      “ORA-02019:为找到远程数据库的连接说明”
      时,请使用全称,如:
      select * from t_test@db_sql.US.ORACLE.COM
      

  2.   

    使用MS的OLEDB for Oracle作为连接,通过SSIS导入大批量的数据方式可以试试.
    将SSIS包用JOB来每周调用一次.
    ---------------
    PS:一周的数据量有多大?数量级是MB,GB还是TB
      

  3.   

    十几万不多。
    有个建议:将oralce的符合条件的历史记录查询出来保存为 文本文件 ,然后通过sql的大容量插入导入数据到 sqlserver中。
      

  4.   

    即使写个.net工具,也可分批1000条提交一次呀,数据就是数据,没有邪门的
      

  5.   

    LZ能把你的代码发一份给我吗?邮箱[email protected],感激不尽~
      

  6.   

    呵呵:在SQL Server 2005上创建一个“服务器链接”,将其链接到Oracle,
    然后将每张表中的数据插入SQL Server 2005
      

  7.   

    楼上也有人说用ORACLE的gateway ,也就是所谓的透明网关...其实,数据迁移的话,可以用SSIS啊,然后生成dtsx包,引用SQLSERVER代理来每日更新数据就可以.SSIS是购买SQL SERVER标准版本上就带有的,不需要另外购买.或者你会用ORACLE的ODI也可以.看看,SSIS吧,这个东西容易上手(不代表你会精通,微软产品都这样),应该能解决你现在的问题,直接到MSDN上看看SSIS或者看联机丛书上的一些例子吧.不建议用.NET程序来导~
      

  8.   

    您不是每天都要把几千万倒过来的吧,而只是把需要更新的更新,需要添加的插入,可能每天就几万数据,最重要应该是初始化的导入吧..............假如您真用SSIS导的话,注意服务器内存要比较大.....
      

  9.   

    用ssis吧,做成ssis包,然后用作业把数据同步到本地,我每天都要同步300w左右的数据到本地,凌晨的时候用不了10分钟。