sql server2012 跨库访问疑问

衣舞晨风
博客专家认证
2014-01-05 08:46:21
在oracle中由一个数据库访问另一个数据库,需要用到oracle database link,那么在sql server中应该怎么弄呢?我想在数据库003中访问到004中的数据。
...全文
227 21 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
衣舞晨风 2014-01-06
  • 打赏
  • 举报
回复
本地,我自己电脑上sql server的两个数据库也是这么执行是吧?ip就是我本机的ip,端口号就是exec sys.sp_readerrorlog 0, 1, 'listening'这句话查询出来的端口号?是吧
LongRui888 2014-01-05
  • 打赏
  • 举报
回复
引用 8 楼 xunzaosiyecao 的回复:
[quote=引用 7 楼 yupeigu 的回复:] [quote=引用 6 楼 xunzaosiyecao 的回复:] 就这个语法:
--建立链接服务器,通过@datasrc指定数据源,适合链接其他多种数据库
EXEC master.dbo.sp_addlinkedserver @server = N'Link',
                                   @srvproduct='ms', 
                                   @provider=N'SQLNCLI',                                    
                                   @datasrc=N'远程ip地址,端口'

EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'Link',
                                    @useself=N'False',
                                    @locallogin=NULL,
                                    @rmtuser=N'用户名',
                                    @rmtpassword='密码'
  
                                    
--查询远程表
select * 
from [Link].远程数据库名.dbo.表


--把本地表的数据,复制到远程表
insert into [Link].远程数据库名.dbo.表(列的列表)
select 列
from 本地表
这个代码中是不是只需要把这三个@datasrc、@rmtuser、@rmtpassword修改为我需要链接的就可以,还需要做别的吗?[/quote] 嗯 对的[/quote] 对吗?@provide需不需要改呢?[/quote] 应该不用改的,你试试能连通吗,因为我用的是2008r2,能连通的。
衣舞晨风 2014-01-05
  • 打赏
  • 举报
回复
引用 7 楼 yupeigu 的回复:
[quote=引用 6 楼 xunzaosiyecao 的回复:] 就这个语法:
--建立链接服务器,通过@datasrc指定数据源,适合链接其他多种数据库
EXEC master.dbo.sp_addlinkedserver @server = N'Link',
                                   @srvproduct='ms', 
                                   @provider=N'SQLNCLI',                                    
                                   @datasrc=N'远程ip地址,端口'

EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'Link',
                                    @useself=N'False',
                                    @locallogin=NULL,
                                    @rmtuser=N'用户名',
                                    @rmtpassword='密码'
  
                                    
--查询远程表
select * 
from [Link].远程数据库名.dbo.表


--把本地表的数据,复制到远程表
insert into [Link].远程数据库名.dbo.表(列的列表)
select 列
from 本地表
这个代码中是不是只需要把这三个@datasrc、@rmtuser、@rmtpassword修改为我需要链接的就可以,还需要做别的吗?[/quote] 嗯 对的[/quote] 对吗?@provide需不需要改呢?
LongRui888 2014-01-05
  • 打赏
  • 举报
回复
引用 6 楼 xunzaosiyecao 的回复:
就这个语法:
--建立链接服务器,通过@datasrc指定数据源,适合链接其他多种数据库
EXEC master.dbo.sp_addlinkedserver @server = N'Link',
                                   @srvproduct='ms', 
                                   @provider=N'SQLNCLI',                                    
                                   @datasrc=N'远程ip地址,端口'

EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'Link',
                                    @useself=N'False',
                                    @locallogin=NULL,
                                    @rmtuser=N'用户名',
                                    @rmtpassword='密码'
  
                                    
--查询远程表
select * 
from [Link].远程数据库名.dbo.表


--把本地表的数据,复制到远程表
insert into [Link].远程数据库名.dbo.表(列的列表)
select 列
from 本地表
这个代码中是不是只需要把这三个@datasrc、@rmtuser、@rmtpassword修改为我需要链接的就可以,还需要做别的吗?[/quote] 嗯 对的
衣舞晨风 2014-01-05
  • 打赏
  • 举报
回复
就这个语法:
--建立链接服务器,通过@datasrc指定数据源,适合链接其他多种数据库
EXEC master.dbo.sp_addlinkedserver @server = N'Link',
                                   @srvproduct='ms', 
                                   @provider=N'SQLNCLI',                                    
                                   @datasrc=N'远程ip地址,端口'

EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'Link',
                                    @useself=N'False',
                                    @locallogin=NULL,
                                    @rmtuser=N'用户名',
                                    @rmtpassword='密码'
  
                                    
--查询远程表
select * 
from [Link].远程数据库名.dbo.表


--把本地表的数据,复制到远程表
insert into [Link].远程数据库名.dbo.表(列的列表)
select 列
from 本地表
[/quote] 这个代码中是不是只需要把这三个@datasrc、@rmtuser、@rmtpassword修改为我需要链接的就可以,还需要做别的吗?
衣舞晨风 2014-01-05
  • 打赏
  • 举报
回复
EXEC master.dbo.sp_addlinkedserver @server = N'Link', @srvproduct='ms', @provider=N'SQLNCLI', @datasrc=N'远程ip地址,端口' EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'Link', @useself=N'False', @locallogin=NULL, @rmtuser=N'用户名', @rmtpassword='密码' 这个代码中是不是只需要把这三个@datasrc、@rmtuser、@rmtpassword修改为我需要链接的就可以,还需要做别的吗?
LongRui888 2014-01-05
  • 打赏
  • 举报
回复
引用 3 楼 xunzaosiyecao 的回复:
在oracle中建立database link的语法是这样的 drop database link 连接名; create shared database link 连接名 connect to 目标用户名 identified by "密码" AUTHENTICATED BY 目标用户名 IDENTIFIED BY "密码" using ' (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST =目标地址)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = test) ) )'; 我一直没找到sql server中建立类似的语句语法或者例子是啥样啊? 第一次捣鼓sql server,麻烦了
就这个语法:
--建立链接服务器,通过@datasrc指定数据源,适合链接其他多种数据库
EXEC master.dbo.sp_addlinkedserver @server = N'Link',
                                   @srvproduct='ms', 
                                   @provider=N'SQLNCLI',                                    
                                   @datasrc=N'远程ip地址,端口'

EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'Link',
                                    @useself=N'False',
                                    @locallogin=NULL,
                                    @rmtuser=N'用户名',
                                    @rmtpassword='密码'
  
                                    
--查询远程表
select * 
from [Link].远程数据库名.dbo.表


--把本地表的数据,复制到远程表
insert into [Link].远程数据库名.dbo.表(列的列表)
select 列
from 本地表
衣舞晨风 2014-01-05
  • 打赏
  • 举报
回复
在oracle中建立database link的语法是这样的 drop database link 连接名; create shared database link 连接名 connect to 目标用户名 identified by "密码" AUTHENTICATED BY 目标用户名 IDENTIFIED BY "密码" using ' (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST =目标地址)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = test) ) )'; 我一直没找到sql server中建立类似的语句语法或者例子是啥样啊? 第一次捣鼓sql server,麻烦了
LongRui888 2014-01-05
  • 打赏
  • 举报
回复
如果你要访问的数据库,不在同一个服务器上,那么可以用服务器链接:
--建立链接服务器,通过@datasrc指定数据源,适合链接其他多种数据库
EXEC master.dbo.sp_addlinkedserver @server = N'Link',
                                   @srvproduct='ms', 
                                   @provider=N'SQLNCLI',                                    
                                   @datasrc=N'远程ip地址,端口'

EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'Link',
                                    @useself=N'False',
                                    @locallogin=NULL,
                                    @rmtuser=N'用户名',
                                    @rmtpassword='密码'
  
                                    
--查询远程表
select * 
from [Link].远程数据库名.dbo.表


--把本地表的数据,复制到远程表
insert into [Link].远程数据库名.dbo.表(列的列表)
select 列
from 本地表
KevinLiu 2014-01-05
  • 打赏
  • 举报
回复
既然用到的是Oracle DB Link那么在Oracle端操作。如果你是用SQL Server LinkedServer,在SQL Server端操作。
LongRui888 2014-01-05
  • 打赏
  • 举报
回复
引用 19 楼 xunzaosiyecao 的回复:
连接服务器,是不是类似于一个名字,可以随便起啊?
哦 对,就是一个名称,只要不重复就行
衣舞晨风 2014-01-05
  • 打赏
  • 举报
回复
连接服务器,是不是类似于一个名字,可以随便起啊?
衣舞晨风 2014-01-05
  • 打赏
  • 举报
回复
图像化的我试过了也报错误
LongRui888 2014-01-05
  • 打赏
  • 举报
回复
引用 16 楼 xunzaosiyecao 的回复:
不管怎么说都很感谢你了@阳泉酒家小当家,这么有耐心的回答了,我这么多的问题



呵呵,没事哈。

也可以用图形化界面配置试试的:


这个最好是能问问其他的同事,看知不知道远程服务器的信息,因为我在原来公司,有一次,一个同时也是想从本地局域网,连接到远程客户的服务器上,如果,你用ssms,输入IP,端口,能连接到远程sql server的话,那么建立连接服务器,应该没问题的。
衣舞晨风 2014-01-05
  • 打赏
  • 举报
回复
不管怎么说都很感谢你了@阳泉酒家小当家,这么有耐心的回答了,我这么多的问题
衣舞晨风 2014-01-05
  • 打赏
  • 举报
回复
引用 13 楼 yupeigu 的回复:
[quote=引用 10 楼 xunzaosiyecao 的回复:] [quote=引用 9 楼 yupeigu 的回复:] [quote=引用 8 楼 xunzaosiyecao 的回复:] [quote=引用 7 楼 yupeigu 的回复:] [quote=引用 6 楼 xunzaosiyecao 的回复:] 就这个语法:
--建立链接服务器,通过@datasrc指定数据源,适合链接其他多种数据库
EXEC master.dbo.sp_addlinkedserver @server = N'Link',
                                   @srvproduct='ms', 
                                   @provider=N'SQLNCLI',                                    
                                   @datasrc=N'远程ip地址,端口'

EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'Link',
                                    @useself=N'False',
                                    @locallogin=NULL,
                                    @rmtuser=N'用户名',
                                    @rmtpassword='密码'
  
                                    
--查询远程表
select * 
from [Link].远程数据库名.dbo.表


--把本地表的数据,复制到远程表
insert into [Link].远程数据库名.dbo.表(列的列表)
select 列
from 本地表
这个代码中是不是只需要把这三个@datasrc、@rmtuser、@rmtpassword修改为我需要链接的就可以,还需要做别的吗?[/quote] 嗯 对的[/quote] 对吗?@provide需不需要改呢?[/quote] 应该不用改的,你试试能连通吗,因为我用的是2008r2,能连通的。[/quote] 没有成功,提示这个: 链接服务器"Link001"的 OLE DB 访问接口 "SQLNCLI11" 返回了消息 "登录超时已过期"。 链接服务器"Link001"的 OLE DB 访问接口 "SQLNCLI11" 返回了消息 "与 SQL Server 建立连接时发生了与网络相关的或特定于实例的错误。找不到或无法访问服务器。请检查实例名称是否正确以及 SQL Server 是否配置为允许远程连接。有关详细信息,请参阅 SQL Server 联机丛书。"。 消息 10061,级别 16,状态 1,第 0 行 TCP 提供程序: 由于目标计算机积极拒绝,无法连接。[/quote] 确保端口正确,另外,也有可能是远程服务器的防火墙拒绝了你的连接,你可以在远程机器上,先把sql server的端口,加入到防火墙,实在不行可以先把防火墙断掉试试。 另外,在远程机器上,运行如下的语句:

--修改高级参数
sp_configure 'show advanced options',1
go

--允许即席分布式查询
sp_configure 'Ad Hoc Distributed Queries',1
go

--如果配置的值不在合理范围(在最小值最大值范围内),那么可以强制覆盖
reconfigure with override  
go
[/quote] 远程机器是客户的那边的数据库,我这边没法直接操作
衣舞晨风 2014-01-05
  • 打赏
  • 举报
回复
这是查询测试用到的代码 select * from Link001.目标数据库名.dbo.目标数据库中的一个表名
LongRui888 2014-01-05
  • 打赏
  • 举报
回复
引用 10 楼 xunzaosiyecao 的回复:
[quote=引用 9 楼 yupeigu 的回复:] [quote=引用 8 楼 xunzaosiyecao 的回复:] [quote=引用 7 楼 yupeigu 的回复:] [quote=引用 6 楼 xunzaosiyecao 的回复:] 就这个语法:
--建立链接服务器,通过@datasrc指定数据源,适合链接其他多种数据库
EXEC master.dbo.sp_addlinkedserver @server = N'Link',
                                   @srvproduct='ms', 
                                   @provider=N'SQLNCLI',                                    
                                   @datasrc=N'远程ip地址,端口'

EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'Link',
                                    @useself=N'False',
                                    @locallogin=NULL,
                                    @rmtuser=N'用户名',
                                    @rmtpassword='密码'
  
                                    
--查询远程表
select * 
from [Link].远程数据库名.dbo.表


--把本地表的数据,复制到远程表
insert into [Link].远程数据库名.dbo.表(列的列表)
select 列
from 本地表
这个代码中是不是只需要把这三个@datasrc、@rmtuser、@rmtpassword修改为我需要链接的就可以,还需要做别的吗?[/quote] 嗯 对的[/quote] 对吗?@provide需不需要改呢?[/quote] 应该不用改的,你试试能连通吗,因为我用的是2008r2,能连通的。[/quote] 没有成功,提示这个: 链接服务器"Link001"的 OLE DB 访问接口 "SQLNCLI11" 返回了消息 "登录超时已过期"。 链接服务器"Link001"的 OLE DB 访问接口 "SQLNCLI11" 返回了消息 "与 SQL Server 建立连接时发生了与网络相关的或特定于实例的错误。找不到或无法访问服务器。请检查实例名称是否正确以及 SQL Server 是否配置为允许远程连接。有关详细信息,请参阅 SQL Server 联机丛书。"。 消息 10061,级别 16,状态 1,第 0 行 TCP 提供程序: 由于目标计算机积极拒绝,无法连接。[/quote] 确保端口正确,另外,也有可能是远程服务器的防火墙拒绝了你的连接,你可以在远程机器上,先把sql server的端口,加入到防火墙,实在不行可以先把防火墙断掉试试。 另外,在远程机器上,运行如下的语句:

--修改高级参数
sp_configure 'show advanced options',1
go

--允许即席分布式查询
sp_configure 'Ad Hoc Distributed Queries',1
go

--如果配置的值不在合理范围(在最小值最大值范围内),那么可以强制覆盖
reconfigure with override  
go
衣舞晨风 2014-01-05
  • 打赏
  • 举报
回复
引用 11 楼 xunzaosiyecao 的回复:
EXEC master.dbo.sp_addlinkedserver @server = N'Link001', @srvproduct='ms', @provider=N'SQLNCLI',-- @datasrc=N'目标数据库的ip,端口号' EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'Link001', @useself=N'False', @locallogin=NULL, @rmtuser=N'sa', @rmtpassword='sa的密码'
这是我写的跨库代码,有什么问题吗?
衣舞晨风 2014-01-05
  • 打赏
  • 举报
回复
EXEC master.dbo.sp_addlinkedserver @server = N'Link001', @srvproduct='ms', @provider=N'SQLNCLI',-- @datasrc=N'目标数据库的ip,端口号' EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'Link001', @useself=N'False', @locallogin=NULL, @rmtuser=N'sa', @rmtpassword='sa的密码'
加载更多回复(1)

27,581

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧