现有两台服务器A1服务器装oracle8i数据库,A2服务器装oracle10g数据库
我要把A1数据库中的其中一个表的数据添加到A2数据库的一个表中
现在我用的办法更新十万条数据库要一个小时以上,还经常出错,没用存储过程,我问了一个朋友说用存储过程快
希望各位大虾能帮我解决了,我用的是ASP.NET2.0+Oracle
能给出调用办法再加分

解决方案 »

  1.   

    在A2上建指向A1的数据库链接,然后在A2上执行类似insert into table1 select * from a1.table2的sql
      

  2.   

    能给出完整的代码
    我才用Oracel两天
    现在工具才会用
    语法不熟
    谢谢了
      

  3.   

    藐视,用不用存储过程跟你更新的快不快没什么关系哦。
    楼主的这种情况,只要建个DBLINK,在直接用SQL插入就行了。
    这个更新的效率取决于你的环境及数据量,跟用不用存储过程没有什么关系,
    使用存储过程只是将一些动作连续起来处理而已。
      

  4.   

      其实dblink和数据库中的view差不多,建dblink的时候需要知道待读取数据库的ip地址,ssid以及数据库用户名和密码。  创建可以采用两种方式:  1、已经配置本地服务 以下是引用片段:
      create public database
      link fwq12 connect to fzept
      identified by neu using 'fjept'
      CREATE DATABASE LINK数据库链接名CONNECT TO 用户名 IDENTIFIED BY 密码 USING ‘本地配置的数据的实例名’;  2、未配置本地服务  
    以下是引用片段:
    create database link linkfwq
       connect to fzept identified by neu
       using '(DESCRIPTION =
       (ADDRESS_LIST =
       (ADDRESS = (PROTOCOL = TCP)(HOST = 10.142.202.12)(PORT = 1521))
       )
       (CONNECT_DATA =
       (SERVICE_NAME = fjept)
       )
       )';
      host=数据库的ip地址,service_name=数据库的ssid。  其实两种方法配置dblink是差不多的,我个人感觉还是第二种方法比较好,这样不受本地服务的影响。  数据库连接字符串可以用NET8 EASY CONFIG或者直接修改TNSNAMES.ORA里定义.  数据库参数global_name=true时要求数据库链接名称跟远端数据库名称一样  数据库全局名称可以用以下命令查出  SELECT * FROM GLOBAL_NAME;  查询远端数据库里的表  SELECT …… FROM 表名@数据库链接名;  查询、删除和插入数据和操作本地的数据库是一样的,只不过表名需要写成“表名@dblink服务器”而已。  附带说下同义词创建:  CREATE SYNONYM同义词名FOR 表名;  CREATE SYNONYM同义词名FOR 表名@数据库链接名;  删除dblink:DROP PUBLIC DATABASE LINK linkfwq。  如果创建全局dblink,必须使用systm或sys用户,在database前加public。附带说下同义词创建:CREATE SYNONYM同义词名FOR 表名;
    CREATE SYNONYM同义词名FOR 表名@数据库链接名;
    另一种方法可以先在tnsnames.ora文件中创建一个服务名如下:
    ERPPROD =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.37.122)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME =prod)
        )
      )然后利用创建链接语句:
    create database link b_lnk connect to user identified by password
    using 'erpprod'然后通过dblink就可以访问了
      

  5.   

    在A2服务器上建一个DBLink连到A1服务器,然后只需要用Insert语句
    比如A2上的表是T2,A1上的表是T1,建的DBLink是DBLink1
    那么只需要
    insert into T2(f1,f2,f3,...)
    select f1,f2,f3,...
    from T1@DBLink1
    就能实现你的操作
    你能使用如下来创建DBLinkcreate database link DBLink1
      connect to A1上的oracle用户 identified by A1上的oracle用户的密码
      using '(DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = A1的IP地址)(PORT = 1521))
        (CONNECT_DATA =
          (SID = A1的Oracle 实例名)
        ))';
      

  6.   


    我已经创建了DBLink1 
    用查询也可以了
    但insert into T2(f1,f2,f3,...) 
    后面怎么写???
    不怕大家笑,偶是笨鸟一个
      

  7.   


    不是光用procedure就快了的,要想insert快,注意下面几个
    nologging
    加上/*+ append */的hint
    分批commit如果可以去掉目标表的index的话,也可先去掉index先。
      

  8.   

    exp username/pwd@db1 file=d:\bible_db.dmp table =t1 在一个库里把表导出
    用 imp username/pwd@db2 file=d:\bible_db.dmp table =t2  在另一个库里导入。
    exp imp  用法网上找。
      

  9.   

    exp imp  用法 http://blog.donews.com/yahoo163/archive/2007/02/02/1124486.aspx
      

  10.   

    不是告诉你了吗?
    insert into 表名 (字段1,字段2,...有多少个就写多少个)
    select 字段1,字段2,....要与上面的字段个数相同而且是对应的
    from 表名@DBLink1
    where 你的搜索条件
      

  11.   

    谢谢 ling242a 这么帮忙,按你的方法我也解决了,只是不会写更新的,我就把原来的数据先删除了,再更新