将两张oracle表的数据复制进一张mssql表中,请问有什么方法?

时间:2022-01-09 00:47:25
探讨一下:将两张oracle表的数据复制到
一张mssql表中,请问有那些方法?3张表的结构相同。

现在的问题:
1.用DTS的话,由于两张oracle数据有主键相同的情况,不能全部复制。
2.两张oracle数据全部都要,主键相同的时候,修改一下主键值(是复合主键),有现成的工具马?没有的话,自己写代码实现,用什么比较好?

6 个解决方案

#1


不知道你所说的“修改一下主键值”是要怎样修改???

如果必须手工修改,那列出主键有重复的一条一条改就是啦

如果要用命令一次过完成,那请说明修改的规则。

#2


我这里曾经使用过的一个方法--把ORACLE作成链接服务器,然后定时从上面同步数据就OK ,方法如下
1. SQLSERVER服务器上面安装oracle客户端,配置服务命名(假设为 test)
2. 在SQLSERVER服务器上面建立链接服务器,脚本如下
-- Adding linked server:
exec sp_addlinkedserver @server = 'test' ,
@srvproduct = 'ORACLE',
@provider = 'MSDAORA',
@datasrc = 'test'

-- Adding linked server login:
exec sp_addlinkedsrvlogin @useself='false ', @rmtsrvname = 'test',
@rmtuser = 'user',  --数据库用户
@rmtpassword = 'password' --密码

3. 使用类似的语句将oracle的数据插入到sqlserver表中
insert into sqlserver表 select * from test..oracle表名

4. 如果ORACLE数据是实时增加的,可以在SQLSERVER上面建立一个表记录上次插入的id,然后下次可以从上次的ID+1开始继续插入

#3


2.两张oracle数据全部都要,主键相同的时候,修改一下主键值(是复合主键),有现成的工具马?没有的话,自己写代码实现,用什么比较好?


可以在SQLSERVER的表结构上面做文章

#4


引用 1 楼 sdxiong 的回复:
不知道你所说的“修改一下主键值”是要怎样修改??? 

如果必须手工修改,那列出主键有重复的一条一条改就是啦 

如果要用命令一次过完成,那请说明修改的规则。



数据比较多,想自动修改复合主键中的一个,使得不会主键重复。
修改规则,就是复合主键的一个加1,比如 两条相同主键的数据
 01111,00000001,XXXXXX,XXXXXX,XXXXX
 01111,00000001,SSSSSS,SSSSSS,SSSSS
第二条复合主键改成(01111,00000002)

#5


引用 2 楼 Liyingyue_FFS 的回复:
我这里曾经使用过的一个方法--把ORACLE作成链接服务器,然后定时从上面同步数据就OK ,方法如下 
1. SQLSERVER服务器上面安装oracle客户端,配置服务命名(假设为 test) 
2. 在SQLSERVER服务器上面建立链接服务器,脚本如下 

SQL code-- Adding linked server:
exec sp_addlinkedserver @server = 'test' ,
@srvproduct = 'ORACLE',
@provider = 'MSDAORA',
@datasrc = 'test'

-- Adding linked server login:
exec …


只是单纯的将两张oracle表的数据放在一张mssql表格中。
其实拷贝黏贴就可以的,但是由于有复合主键相同的数据。
所以,想写代码自动修改后插入mssql表格中。

#6


现在将mssql表格的复合主键去掉了。
然后通过dts将oracle的两张数据表格全部导出到mssql表格中,成功了。
然后将mssql中的数据导出为csv文件,再用java编写个程序,修改csv文件中主键值,然后再导入mssql不知道可行不?
有更好的方法吗?

#1


不知道你所说的“修改一下主键值”是要怎样修改???

如果必须手工修改,那列出主键有重复的一条一条改就是啦

如果要用命令一次过完成,那请说明修改的规则。

#2


我这里曾经使用过的一个方法--把ORACLE作成链接服务器,然后定时从上面同步数据就OK ,方法如下
1. SQLSERVER服务器上面安装oracle客户端,配置服务命名(假设为 test)
2. 在SQLSERVER服务器上面建立链接服务器,脚本如下
-- Adding linked server:
exec sp_addlinkedserver @server = 'test' ,
@srvproduct = 'ORACLE',
@provider = 'MSDAORA',
@datasrc = 'test'

-- Adding linked server login:
exec sp_addlinkedsrvlogin @useself='false ', @rmtsrvname = 'test',
@rmtuser = 'user',  --数据库用户
@rmtpassword = 'password' --密码

3. 使用类似的语句将oracle的数据插入到sqlserver表中
insert into sqlserver表 select * from test..oracle表名

4. 如果ORACLE数据是实时增加的,可以在SQLSERVER上面建立一个表记录上次插入的id,然后下次可以从上次的ID+1开始继续插入

#3


2.两张oracle数据全部都要,主键相同的时候,修改一下主键值(是复合主键),有现成的工具马?没有的话,自己写代码实现,用什么比较好?


可以在SQLSERVER的表结构上面做文章

#4


引用 1 楼 sdxiong 的回复:
不知道你所说的“修改一下主键值”是要怎样修改??? 

如果必须手工修改,那列出主键有重复的一条一条改就是啦 

如果要用命令一次过完成,那请说明修改的规则。



数据比较多,想自动修改复合主键中的一个,使得不会主键重复。
修改规则,就是复合主键的一个加1,比如 两条相同主键的数据
 01111,00000001,XXXXXX,XXXXXX,XXXXX
 01111,00000001,SSSSSS,SSSSSS,SSSSS
第二条复合主键改成(01111,00000002)

#5


引用 2 楼 Liyingyue_FFS 的回复:
我这里曾经使用过的一个方法--把ORACLE作成链接服务器,然后定时从上面同步数据就OK ,方法如下 
1. SQLSERVER服务器上面安装oracle客户端,配置服务命名(假设为 test) 
2. 在SQLSERVER服务器上面建立链接服务器,脚本如下 

SQL code-- Adding linked server:
exec sp_addlinkedserver @server = 'test' ,
@srvproduct = 'ORACLE',
@provider = 'MSDAORA',
@datasrc = 'test'

-- Adding linked server login:
exec …


只是单纯的将两张oracle表的数据放在一张mssql表格中。
其实拷贝黏贴就可以的,但是由于有复合主键相同的数据。
所以,想写代码自动修改后插入mssql表格中。

#6


现在将mssql表格的复合主键去掉了。
然后通过dts将oracle的两张数据表格全部导出到mssql表格中,成功了。
然后将mssql中的数据导出为csv文件,再用java编写个程序,修改csv文件中主键值,然后再导入mssql不知道可行不?
有更好的方法吗?