现有两台服务器A1服务器装oracle8i数据库,A2服务器装oracle10g数据库
我要把A1数据库中的其中一个表的数据添加到A2数据库的一个表中
现在我用的办法更新十万条数据库要一个小时以上,还经常出错,没用存储过程,我问了一个朋友说用存储过程快
希望各位大虾能帮我解决了,我用的是ASP.NET2.0+Oracle
能给出调用办法再加分
我要把A1数据库中的其中一个表的数据添加到A2数据库的一个表中
现在我用的办法更新十万条数据库要一个小时以上,还经常出错,没用存储过程,我问了一个朋友说用存储过程快
希望各位大虾能帮我解决了,我用的是ASP.NET2.0+Oracle
能给出调用办法再加分
解决方案 »
- 求助:关于数据库审计
- 如何在存储过程中实现多表插入?
- 关于oracle 10g的问题
- oracle delete语句级触发器 能不能获得删除的信息呢?怎么获得呢?
- PL/SQL 怎么读写文件?
- 不小心犯了低级错误~~~做单条记录修改时忘了写where,结果整个表都被改了……
- 急急,windows server 2003下,oracle 9i的OracleOraHome92ManagementServer服务启动后又停止了。
- oracle中,设定varchar2长度为4000,(最大只能存4000),为什么存到1333就不行了,多一个都不行,报 ORA-01480:trailling missing from STR bin
- 菜鸟提问(一):不安装Oracle数据库客户端,我的应用程序能否访问oracle数据库
- 如何给表、列加注释?
- oracle数据批量增加怎么解决 在线
- oracle中查询最多的数据的问题
我才用Oracel两天
现在工具才会用
语法不熟
谢谢了
楼主的这种情况,只要建个DBLINK,在直接用SQL插入就行了。
这个更新的效率取决于你的环境及数据量,跟用不用存储过程没有什么关系,
使用存储过程只是将一些动作连续起来处理而已。
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就可以访问了
比如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 实例名)
))';
我已经创建了DBLink1
用查询也可以了
但insert into T2(f1,f2,f3,...)
后面怎么写???
不怕大家笑,偶是笨鸟一个
不是光用procedure就快了的,要想insert快,注意下面几个
nologging
加上/*+ append */的hint
分批commit如果可以去掉目标表的index的话,也可先去掉index先。
用 imp username/pwd@db2 file=d:\bible_db.dmp table =t2 在另一个库里导入。
exp imp 用法网上找。
insert into 表名 (字段1,字段2,...有多少个就写多少个)
select 字段1,字段2,....要与上面的字段个数相同而且是对应的
from 表名@DBLink1
where 你的搜索条件