如何将SQLSERVER上的数据插入到ORACLE上?

时间:2022-06-15 04:46:50
如题,有服务器1上装了SQLSERVER数据库,上面建有表A
            有入伍前2上装了Oracle数据库,上面建有表B

问题,怎么使用存储过程的方式把A表数据从机器1的sql server上插入到机器2上的Oracle中??

谢谢,能给链接就最好了。

11 个解决方案

#1


试试这个:

--================================================================
--2、链接服务器为Oracle,使用oracle的oledb库MSDAORA
--2.1.1为建立链接服务器
EXEC sp_addlinkedserver 
@server = 'OracleLinkedServer',    --要创建的链接服务器名称                
@srvproduct = 'Oracle',            --产品名称
@provider = 'MSDAORA',             --OLE DB 字符  
@datasrc = 'orcl'                  --数据源
 
 
--2.1.2为创建连接服务器登陆
EXEC sp_addlinkedsrvlogin 
@rmtsrvname = 'OracleLinkedServer',  --链接服务器名称
@useself = 'false', 
@locallogin = NULL,
@rmtuser = 'scott',                  --Oracle服务器的登陆用户名 
@rmtpassword = 'tiger'               --Oracle服务器的登陆密码 



--2.2为设置链接服务器属性
exec sp_serveroption @server='OracleLinkedServer',
                     @optname = 'rpc',      --从给定的服务器启动rpc
                     @optvalue ='true'      --这样可以调用远程的存储过程

exec sp_serveroption @server='OracleLinkedServer',
                     @optname = 'rpc out',  --对给定的服务器启动rpc 
                     @optvalue ='true'      --在远程执行DDL语句


--2.3为在远程服务器上执行DDL语句新建表,用oracle的方式书写语句
exec('create table SCOTT.EMPXX(iddd int)') at OracleLinkedServer


--2.4用openrowset函数,把oracle的数据直接新建表的同时插入数据
select * 
INTO EMP_X 
from openrowset('MSDAORA','orcl';'scott';'tiger',SCOTT.EMP)

select * 
INTO EMP_X 
from openrowset('MSDAORA','orcl';'scott';'tiger','select * from SCOTT.EMP')


--2.5为opendatasource函数,查询一下oracle中的数据
select * 
from 
opendatasource('MSDAORA','Data Source=orcl;
                          User ID=scott;
                          password=tiger')..SCOTT.EMP

#2


或者参考一下这个,需要注意的是必须要在sql server的机器上安装oracle的客户端驱动:


【SQL Server数据迁移】64位的机器:SQL Server中查询ORACLE的数据
http://blog.csdn.net/sqlserverdiscovery/article/details/21175135

#3


引用 2 楼 yupeigu 的回复:
或者参考一下这个,需要注意的是必须要在sql server的机器上安装oracle的客户端驱动:


【SQL Server数据迁移】64位的机器:SQL Server中查询ORACLE的数据
http://blog.csdn.net/sqlserverdiscovery/article/details/21175135

链接服务器已创建但连接测试失败。是否保留该链接服务器?错误7303

我知道Oracle机器的IP也可以ping通,知道Oracle的名称,用户ID,登录密码,这些够了吗?安装了Oracle9i310.msi
是从这个地方下载的http://download.csdn.net/detail/bnmnba/6485021,求解答,亲,哦,现在的sql server是我本机上做的测试

#4


服务器1的windows上需装Oracle客户端,配置net manager工具,连接Oracle数据库.
然后用以下语句建链接服务器和访问Oracle的数据表.

sp_addlinkedserver '[链接服务器名]', 'Oracle',  'MSDAORA', '[net manager里的数据源]'

sp_addlinkedsrvlogin '[链接服务器名]', 'false', 'sa', '[Oracle账号]', '[Oracle账号密码]'

-- 访问Oracle数据表
select * from [链接服务器名]..[用户名].[表名]

-- 插入Oracle数据表
insert into [链接服务器名]..[用户名].[表名]
 select * from [本地表名]

#5


引用 3 楼 yangsh0722 的回复:
链接服务器已创建但连接测试失败。是否保留该链接服务器?错误7303

我知道Oracle机器的IP也可以ping通,知道Oracle的名称,用户ID,登录密码,这些够了吗?安装了Oracle9i310.msi
是从这个地方下载的http://download.csdn.net/detail/bnmnba/6485021,求解答,亲,哦,现在的sql server是我本机上做的测试

SQL Server端的windows上需装Oracle客户端软件,
并配置net manager工具连接到Oracle数据库,并确保测试连接成功.

#6


引用 5 楼 ap0405140 的回复:
SQL Server端的windows上需装Oracle客户端软件,
并配置net manager工具连接到Oracle数据库,并确保测试连接成功.

这个是不是Oracle客户端?我从这里下载的 http://download.csdn.net/detail/bnmnba/6485021,怎么配置net manager?谢版主了

#7


SQL Server 鏈接Oracle9i 比較麻煩。最好通過別的工具吧。如果只是數據從SQL Server 導入到Oracle 可以考慮工具Kettle,非常方面。

#8


引用 7 楼 DVD_01 的回复:
SQL Server 鏈接Oracle9i 比較麻煩。最好通過別的工具吧。如果只是數據從SQL Server 導入到Oracle 可以考慮工具Kettle,非常方面。

对,就是简单的,insert into 机器2.Oracle select * form 机器1.sql server这样的功能了

#9


引用 6 楼 yangsh0722 的回复:
这个是不是Oracle客户端?我从这里下载的 http://download.csdn.net/detail/bnmnba/6485021,怎么配置net manager?谢版主了

不是的,下载这个试试:  http://www.onlinedown.net/soft/102902.htm
net manager连接Oracle的方法,参考  http://wenku.baidu.com/link?url=ZNGxvLcYHiV9asLMbIup_zJgWjl3bn-7FLo1Ez2_ApJkGYlhkUyKx9iBXjkGVxX_T-gSfCmxGnYh2SS1q2EqgT8C3qA1pAnz60sh6dd_Ij7

#10


引用 7 楼 DVD_01 的回复:
SQL Server 鏈接Oracle9i 比較麻煩。最好通過別的工具吧。如果只是數據從SQL Server 導入到Oracle 可以考慮工具Kettle,非常方面。

哦,是实时的,这个事情不是做一次就完了,最好还是整个存储过程,作业这样的,让一定时间内自动执行一次

#11


引用 10 楼 yangsh0722 的回复:
Quote: 引用 7 楼 DVD_01 的回复:

SQL Server 鏈接Oracle9i 比較麻煩。最好通過別的工具吧。如果只是數據從SQL Server 導入到Oracle 可以考慮工具Kettle,非常方面。

哦,是实时的,这个事情不是做一次就完了,最好还是整个存储过程,作业这样的,让一定时间内自动执行一次


你可以通過Job調用Kettle包,你可以在Oracle中job設置或SQL Server端job設置都沒問題。

之前我做過 SQL Server 鏈接Oracle 9i。需要打補丁才可以使用SQL Server鏈接Oracle 9i 非常麻煩,不然你什麽連都連不上的。


#1


试试这个:

--================================================================
--2、链接服务器为Oracle,使用oracle的oledb库MSDAORA
--2.1.1为建立链接服务器
EXEC sp_addlinkedserver 
@server = 'OracleLinkedServer',    --要创建的链接服务器名称                
@srvproduct = 'Oracle',            --产品名称
@provider = 'MSDAORA',             --OLE DB 字符  
@datasrc = 'orcl'                  --数据源
 
 
--2.1.2为创建连接服务器登陆
EXEC sp_addlinkedsrvlogin 
@rmtsrvname = 'OracleLinkedServer',  --链接服务器名称
@useself = 'false', 
@locallogin = NULL,
@rmtuser = 'scott',                  --Oracle服务器的登陆用户名 
@rmtpassword = 'tiger'               --Oracle服务器的登陆密码 



--2.2为设置链接服务器属性
exec sp_serveroption @server='OracleLinkedServer',
                     @optname = 'rpc',      --从给定的服务器启动rpc
                     @optvalue ='true'      --这样可以调用远程的存储过程

exec sp_serveroption @server='OracleLinkedServer',
                     @optname = 'rpc out',  --对给定的服务器启动rpc 
                     @optvalue ='true'      --在远程执行DDL语句


--2.3为在远程服务器上执行DDL语句新建表,用oracle的方式书写语句
exec('create table SCOTT.EMPXX(iddd int)') at OracleLinkedServer


--2.4用openrowset函数,把oracle的数据直接新建表的同时插入数据
select * 
INTO EMP_X 
from openrowset('MSDAORA','orcl';'scott';'tiger',SCOTT.EMP)

select * 
INTO EMP_X 
from openrowset('MSDAORA','orcl';'scott';'tiger','select * from SCOTT.EMP')


--2.5为opendatasource函数,查询一下oracle中的数据
select * 
from 
opendatasource('MSDAORA','Data Source=orcl;
                          User ID=scott;
                          password=tiger')..SCOTT.EMP

#2


或者参考一下这个,需要注意的是必须要在sql server的机器上安装oracle的客户端驱动:


【SQL Server数据迁移】64位的机器:SQL Server中查询ORACLE的数据
http://blog.csdn.net/sqlserverdiscovery/article/details/21175135

#3


引用 2 楼 yupeigu 的回复:
或者参考一下这个,需要注意的是必须要在sql server的机器上安装oracle的客户端驱动:


【SQL Server数据迁移】64位的机器:SQL Server中查询ORACLE的数据
http://blog.csdn.net/sqlserverdiscovery/article/details/21175135

链接服务器已创建但连接测试失败。是否保留该链接服务器?错误7303

我知道Oracle机器的IP也可以ping通,知道Oracle的名称,用户ID,登录密码,这些够了吗?安装了Oracle9i310.msi
是从这个地方下载的http://download.csdn.net/detail/bnmnba/6485021,求解答,亲,哦,现在的sql server是我本机上做的测试

#4


服务器1的windows上需装Oracle客户端,配置net manager工具,连接Oracle数据库.
然后用以下语句建链接服务器和访问Oracle的数据表.

sp_addlinkedserver '[链接服务器名]', 'Oracle',  'MSDAORA', '[net manager里的数据源]'

sp_addlinkedsrvlogin '[链接服务器名]', 'false', 'sa', '[Oracle账号]', '[Oracle账号密码]'

-- 访问Oracle数据表
select * from [链接服务器名]..[用户名].[表名]

-- 插入Oracle数据表
insert into [链接服务器名]..[用户名].[表名]
 select * from [本地表名]

#5


引用 3 楼 yangsh0722 的回复:
链接服务器已创建但连接测试失败。是否保留该链接服务器?错误7303

我知道Oracle机器的IP也可以ping通,知道Oracle的名称,用户ID,登录密码,这些够了吗?安装了Oracle9i310.msi
是从这个地方下载的http://download.csdn.net/detail/bnmnba/6485021,求解答,亲,哦,现在的sql server是我本机上做的测试

SQL Server端的windows上需装Oracle客户端软件,
并配置net manager工具连接到Oracle数据库,并确保测试连接成功.

#6


引用 5 楼 ap0405140 的回复:
SQL Server端的windows上需装Oracle客户端软件,
并配置net manager工具连接到Oracle数据库,并确保测试连接成功.

这个是不是Oracle客户端?我从这里下载的 http://download.csdn.net/detail/bnmnba/6485021,怎么配置net manager?谢版主了

#7


SQL Server 鏈接Oracle9i 比較麻煩。最好通過別的工具吧。如果只是數據從SQL Server 導入到Oracle 可以考慮工具Kettle,非常方面。

#8


引用 7 楼 DVD_01 的回复:
SQL Server 鏈接Oracle9i 比較麻煩。最好通過別的工具吧。如果只是數據從SQL Server 導入到Oracle 可以考慮工具Kettle,非常方面。

对,就是简单的,insert into 机器2.Oracle select * form 机器1.sql server这样的功能了

#9


引用 6 楼 yangsh0722 的回复:
这个是不是Oracle客户端?我从这里下载的 http://download.csdn.net/detail/bnmnba/6485021,怎么配置net manager?谢版主了

不是的,下载这个试试:  http://www.onlinedown.net/soft/102902.htm
net manager连接Oracle的方法,参考  http://wenku.baidu.com/link?url=ZNGxvLcYHiV9asLMbIup_zJgWjl3bn-7FLo1Ez2_ApJkGYlhkUyKx9iBXjkGVxX_T-gSfCmxGnYh2SS1q2EqgT8C3qA1pAnz60sh6dd_Ij7

#10


引用 7 楼 DVD_01 的回复:
SQL Server 鏈接Oracle9i 比較麻煩。最好通過別的工具吧。如果只是數據從SQL Server 導入到Oracle 可以考慮工具Kettle,非常方面。

哦,是实时的,这个事情不是做一次就完了,最好还是整个存储过程,作业这样的,让一定时间内自动执行一次

#11


引用 10 楼 yangsh0722 的回复:
Quote: 引用 7 楼 DVD_01 的回复:

SQL Server 鏈接Oracle9i 比較麻煩。最好通過別的工具吧。如果只是數據從SQL Server 導入到Oracle 可以考慮工具Kettle,非常方面。

哦,是实时的,这个事情不是做一次就完了,最好还是整个存储过程,作业这样的,让一定时间内自动执行一次


你可以通過Job調用Kettle包,你可以在Oracle中job設置或SQL Server端job設置都沒問題。

之前我做過 SQL Server 鏈接Oracle 9i。需要打補丁才可以使用SQL Server鏈接Oracle 9i 非常麻煩,不然你什麽連都連不上的。