愿倾囊相赠700分!!求解sql server 表到oracle表导入导出数据的问题(注:表结构不同,字段名称等有可能不同)(200分)

  • 主题发起人 主题发起人 xiaoxian
  • 开始时间 开始时间
X

xiaoxian

Unregistered / Unconfirmed
GUEST, unregistred user!
我要把sql server中的一些表导入到oracle表中。我用TADOQUERY控件从sql server中取出
数据,并保存为xml格式的文件,再用TADOQUERY控件导入到oracle表中。因为表的字段名称
不同,所以我为每个表设置了对应字段(存在一个表中)。导入数据的时候,就按这个表的
字段一一从xml文件中取出来,insert到oracle表中。加上还要判断每条数据是否重复,导入
就比较慢。具体还要复杂,处理的东西还要多一些。不知到表达清楚了没有。
要求与限制:
1 由于系统用ADO连接数据库,而不是BDE,所以没有办法用TBATCHMOVE控件。
2 速度尽量快一些。
现在的问题就是速度不合人意,不知您有什么办法吗?
 
1、导入的时候不要判断是否重复,导入完毕再检查是否有重复
2、导入前把索引、约束条件等先去掉
3、为什么还要搞个XML做中间文件? 如果不是必要,最好去掉
 
用datadump呢?
 
to xianjun:
1.表是有主键的,重复的不能插入,所以要插入前判断是否重复
2。中间文件是必须的,情况是这样的:分部导出数据,通过internet传到总部。
 
因為表结构不同,字段名称等有可能不同,所以對照必不可少,要速度快,請考慮在兩個數據
庫中用存儲過程和Cursor,再用元件執行之,另此件應寫成在Server端執行(loop部分用
asm ... end优化),減少網絡偉輸上的消耗.
 
to naughtboy:
什么是datadump?
 
to wudoo:中间文件是必须的,情况是这样的:分部导出数据,通过internet传到总部,不知道用存儲過程和Cursor可不可以阿
 
用datadump,先把MSSQL的表导成paradox7,再由paradox7导入oracle中。
 
考虑用SQL 2000的DTS
 
我的方法比较笨,用两个别名,一个连ORACLE,一个连SQL SERVER ,在ORACLE别名上建立
和SQL SERVER别名一样的表,然后将数据倒过去就可以了
 
to wjl_my :您说得什么意思阿?在那里建别名阿?我两种表的字段名称大小长度有可能是不一样的,
 
>> 表是有主键的,重复的不能插入,所以要插入前判断是否重复
所以我叫你要先把主键约束、索引等先去掉

>>分部导出数据,通过internet传到总部
如果是这样,瓶劲在传输过程中,你一条条插入就OK了,再慢也慢不过通过Internet传输数据的
 
在开始菜单中打开DELPHI目录可以看到一个datadump执行程序,在BDE中创建ORACLE连接和MS SQL
连接,执行datadump程序,根据提示就可以搞定啦,非常简单的.导入后保证表完整性
 
有没有sqlserver的系统改成oracle的经验?
antic_ant@hotmail.com
 
更正我和aq100的错误,是datapump,哈哈
 
你会用PB 吗?用PB的管道 来做吧!很easy
 
to all:
谢谢大家了,我要说说我的要求和限制:
我在公司的项目组里不可能让我选择编程工具,我做的导入导出模块要集成到我们做的
软件中,不能用datadump,SQL 2000的DTS等等。还有,我们要求用ADO连接数据库,不能用BDE!
 
请查看SQL Server 的sp_addlinkedserver、sp_addlinkedsrvlogin或许对你有所启发
 
请参考下列示例:

1、先使用Oracle客户端软件设定一个网络服务名称,如:"OracleServer'﹝请参考Oracle手册﹞
2、在SQL Server 7.0中,使用链接的服务器连接到Oracle. 如: sp_addlinkedserver 'TESTLINK', 'Oracle', 'MSDAORA', 'OracleServer', ps. 'TESTLINK'是由您自定义的,'Oracle', 'MSDAORA'是固定的,'OracleServer'是由步骤1确定的。
3、在SQL Server 7.0中,使用addlinkedsrvlogin登录到Oracle. 如: sp_addlinkedsrvlogin 'TESTLINK', 'false', NULL,'OracleUsr', 'OraclePwd' ps. 'TESTLINK'是步骤2确定的,'OracleUsr'是Oracle用户名,'OraclePwd'是用户密码。
4、执行T-SQL语句。如: select * from [linkservername].[dbname].[dbo].[dbtable]. ps.linkservername是步骤2确定的。
之后你就可以同时操作两个库中的表了,例如可以用insert into (select * from .....)

http://www.microsoft.com/china/msdn/technic/faq/sql_function.asp
 
to 道长:
谢谢你的帮助;
我在公司的项目组里不可能让我选择编程工具,我做的导入导出模块要集成到我们做的
软件中,不能用datadump,SQL 2000的DTS等等。还有,我们要求用ADO连接数据库,不能用BDE!
中间文件是必须的,情况是这样的:分部导出数据,通过internet传到总部。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
后退
顶部