SqlServer如何跨实例访问数据库

Exec sp_droplinkedsrvlogin LinkName,Null
Exec sp_dropserver LinkName
go

EXEC sp_addlinkedserver 'LinkName','','SQLOLEDB','192.168.1.102\r2'

EXEC sp_addlinkedsrvlogin 'LinkName'

EXEC sp_addlinkedsrvlogin 'LinkName','false',NULL,'sa','uce'

注释:

我们日常使用SQL Server数据库时,经常遇到需要在实例Instance01中跨实例访问Instance02中的数据。例如在做数据迁移时,如下语句:

insert into Instance01.DB01.dbo.Table01

select * from Instance02.DB01.dbo.Table01

普通情况下,这样做是不允许的,因为SQL Server默认不可以跨实例访问数据。解决方案是使用存储过程sp_addlinkedserver进行实例注册。

sp_addlinkedserver在MSDN中的定义为:

sp_addlinkedserver [ @server= ] 'server' [ , [ @srvproduct= ] 'product_name' ]

[ , [ @provider= ] 'provider_name' ]

[ , [ @datasrc= ] 'data_source' ]

[ , [ @location= ] 'location' ]

[ , [ @provstr= ] 'provider_string' ]

[ , [ @catalog= ] 'catalog' ]

例如:在Instance01实例中,执行如下SQL语句EXEC sp_addlinkedserver ‘Instance02’ //只写第一个参数即可,默认情况下,注册的是SQL Server数据库,其他参数用法详见MSDN。

如果你的两个实例在同一个域中,且Instance01与Instance02有共同的域登陆帐号,那么经过上面的注册后,前面的insert语句就可以执行了。否则,还需要对注册的远程实例进行登陆帐号注册,在Instance01实例中,执行如下SQL语句

EXEC sp_addlinkedsrvlogin 'InstanceName','true'  //使用集成认证访问远程实例

或者 EXEC sp_addlinkedsrvlogin 'InstanceName','false','TJVictor,'sa','Password1' //使用Windows认证访问远程实例,当用户以TJVictor用户登陆Instance01实例访问Instance02时,默认把TJVictor映射成sa,且密码为Password1

经过 sp_addlinkedserver实例注册和sp_addlinkedsrvlogin登陆帐户注册后,就可以在Instance01中直接访问Instance02中的数据库数据了。

如果还无法访问,请检查本机DNS是否可以解析远程数据库的实例名。如果无法解析,可以在EXEC sp_addlinkedserver ‘Instance02’中把Instance02换为IP,或者在hosts文件中,自己建立相应DNS映射。

下面列举几个跨实例数据库访问的存储过程和视图。

存储过程名/视图名 作用 举例

sp_addlinkedserver 注册远程数据库实例 exec sp_addlinkedserver ‘InstanceName’

sp_dropserver 删除远程数据库实例 exec sp_dropserver ‘InstanceName’

sp_addlinkedsrvlogin 注册远程实例登陆访问帐户 exec sp_addlinkedsrvlogin ‘InstanceName’, null

sp_droplinkedsrvlogin 删除远程实例登陆访问帐户 EXEC sp_droplinkedsrvlogin 'InstanceName','UserName'

sp_helpserver 当前实例已注册的可访问的实例(即查看使用sp_addlinkedserver已注册过的实例) sp_helpserver

sys.sysservers 功能同sp_helpserver select * from sys.sysservers

sys.linked_logins 查看已注册的登陆访问帐户(即查看使用sp_addlinkedsrvlogin已注册过的帐户) select * from sys.linked_logins

sys.remote_logins 查看已注册的远端访问帐户 select * from sys.remote_logins

1.access版本

--建立连接服务器
EXEC sp_addlinkedserver
--要创建的链接服务器名称
'ai',
--产品名称
'access',
--OLE DB 字符
'Microsoft.Jet.OLEDB.4.0',
--数据源
--格式:
-- 盘符:\路径\文件名
-- \\网络名\共享名\文件名 (网络版本)
'd:\testdb\db.mdb'
GO

--创建链接服务器上远程登录之间的映射
--链接服务器默认设置为用登陆的上下文进行
--现在我们修改为连接链接服务器不需使用任何登录或密码
exec sp_addlinkedsrvlogin 'ai','false'
go

--查询数据
select * from ai...mytable
go

2.excel版本

--建立连接服务器
EXEC sp_addlinkedserver
--要创建的链接服务器名称
'ai_ex',
--产品名称
'ex',
--OLE DB 字符
'Microsoft.Jet.OLEDB.4.0',
--数据源
--格式:
-- 盘符:\路径\文件名
-- \\网络名\共享名\文件名 (网络版本)
'd:\testdb\mybook.xls' ,
null,
--OLE DB 提供程序特定的连接字符串
'Excel 5.0'
GO

----创建链接服务器上远程登录之间的映射
--链接服务器默认设置为用登陆的上下文进行
--现在我们修改为连接链接服务器不需使用任何登录或密码
exec sp_addlinkedsrvlogin 'ai_ex','false'
go

--查询数据
select * from ai_ex...sheet3$
go

3.ms sql版本

--建立连接服务器
EXEC sp_addlinkedserver
--要创建的链接服务器名称
'ai_mssql',
--产品名称
'ms',
--OLE DB 字符
'SQLOLEDB',
--数据源
'218.204.111.111,3342'
GO

--创建链接服务器上远程登录之间的映射
EXEC sp_addlinkedsrvlogin
'ai_mssql',
'false',
NULL,
--远程服务器的登陆用户名
'zhangzhe',
--远程服务器的登陆密码
'fish2231'
go

--查询数据
select * from ai_mssql.pubs.dbo.jobs
go

--还有一个更简单的办法
--这种方式在链接服务器建立后,它是默认开放RPC的

--建立连接服务器
EXEC sp_addlinkedserver
--要创建的链接服务器名称
--这里就用数据源作名称
'218.204.111.111,3342',
'SQL Server'
GO

--创建链接服务器上远程登录之间的映射
EXEC sp_addlinkedsrvlogin
'218.204.111.111,3342',
'false',
NULL,
--远程服务器的登陆用户名
'zhangzhe',
--远程服务器的登陆密码
'fish2231'
go

--查询数据
select * from [218.204.253.131,3342].pubs.dbo.jobs
go

4.Oracle版本

--建立连接服务器
EXEC sp_addlinkedserver
--要创建的链接服务器名称
'o',
--产品名称
'Oracle',
--OLE DB 字符
'MSDAORA',
--数据源
'acc'
GO

--创建链接服务器上远程登录之间的映射
EXEC sp_addlinkedsrvlogin
'o',
'false',
NULL,
--Oracle服务器的登陆用户名
'F02M185',
--Oracle服务器的登陆密码
'f02m185185'
go

--查询数据
--格式:LinkServer..Oracle用户名.表名
--注意用大写,因为在Oracle的数据字典中为大写
select * from o..F02M185.AI
go

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Exec sp_droplinkedsrvlogin DBVIP,Null
Exec sp_dropserver DBVIP

EXEC sp_addlinkedserver
@server='DBVIP',--被访问的服务器别名
@srvproduct='',
@provider='SQLOLEDB',
@datasrc='Server2' --要访问的服务器

EXEC sp_addlinkedsrvlogin
'DBVIP', --被访问的服务器别名
'false',
NULL,
'sa', --帐号
'thankyoubobby' --密码

Select * from DBVIP.pubs.dbo.orders

/////////////////////////////ORACLE////////////////////////////
Exec sp_droplinkedsrvlogin demo,Null
Exec sp_dropserver demo
go

EXEC sp_addlinkedserver
@server ='demo',
@srvproduct='Oracle',
@provider='MSDAORA',
@datasrc='ServiceName'

EXEC sp_addlinkedsrvlogin
'demo',
'false',
NULL,
'userid',
'password'
go

SELECT * FROM OPENQUERY(demo ,'select * from tbdemo' )

UPDATE OPENQUERY (demo, 'SELECT id FROM tbdemo WHERE id = 101')
SET name = 'hello';

INSERT OPENQUERY (demo, 'SELECT id FROM tbdemo')
VALUES ('hello');

DELETE OPENQUERY (demo, 'SELECT id FROM tbdemo WHERE name = ''hello''');

SQL ser 跨实例访问数据库的更多相关文章

  1. SQL Server 跨域访问

    # SQL Server 跨服务器访问数据 参考链接: [sp_addlinkedserver](https://msdn.microsoft.com/zh-cn/library/ms190479.a ...

  2. SQLServer跨服务器访问数据库(openrowset/opendatasource/openquery)

    SQLServer跨服务器访问数据库(openrowset/opendatasource/openquery) 1.启用Ad Hoc Distributed Queries 在使用openrowset ...

  3. SQL Server跨服务器操作数据库

    今天给大家来分享一下跨服务器操作数据库,还是以SQL Server的管理工具(SSMS)为平台进行操作. 什么是跨服务器操作? 跨服务器操作就是可以在本地连接到远程服务器上的数据库,可以在对方的数据库 ...

  4. [转]SQLServer跨服务器访问数据库(openrowset/opendatasource/openquery)

    正 文: 1.启用Ad Hoc Distributed Queries 在使用openrowset/opendatasource前搜先要启用Ad Hoc Distributed Queries服务,因 ...

  5. SQL Server 跨服务器 不同数据库之间复制表的数据

    不同数据库之间复制表的数据的方法: 当表目标表存在时: insert into 目的数据库..表 select * from 源数据库..表 当目标表不存在时: select * into 目的数据库 ...

  6. 通过FEDERATED存储引擎跨实例访问数据

    通过FEDERATED存储引擎同步两实例间的表数据需求情景:实例1中A库中的三个视图是实例2中的B库所依赖的,B需要A库中三个视图的实时数据.方案:通过FEDERATED来完成跨势力的查询FEDERA ...

  7. SQL Server跨服务器的数据库迁移

    1. 使用sql server task中back up 任务,保存为*.bak 文件. 2. 在另一个server中restore database,如果已经存在这个database,会覆盖之前的数 ...

  8. sqlserver 添加服务器链接 跨服务器访问数据库

    转载地址1:https://www.cnblogs.com/wanshutao/p/4137994.html //创建服务器链接 转载地址2:https://www.cnblogs.com/xulel ...

  9. 一条SQL完成跨数据库实例Join查询

    背景 随着业务复杂程度的提高.数据规模的增长,越来越多的公司选择对其在线业务数据库进行垂直或水平拆分,甚至选择不同的数据库类型以满足其业务需求.原本在同一数据库实例里就能实现的SQL查询,现在需要跨多 ...

随机推荐

  1. WordPress 主题框架是如何工作的

    主题框架可以说是无比强大的!对于非技术型的 WordPress 用户来说,主题框架使得建立一个独一无二并看起来像是运行一个量身定制的主题的网站成为可能,并且对于 WordPress 开发者来说,它们能 ...

  2. const修饰的双重指针赋值解惑

    在c程序中,我们可能经常会使用到指针之间的赋值. 传统的赋值操作: char *cp = "c"; const char *ccp; ccp = cp; printf(" ...

  3. Docker基本命令

    1.搜索Docker镜像 docker search <镜像名> 2.获取镜像 docker pull <镜像名> 3.查看本地镜像 docker images 4.删除镜像 ...

  4. 【M4】非必要不提供default 构造方法

    1.default 构造方法意味着,没有外来信息的情况下,进行初始化,构造出一个对象.对于有些对象是很合理的,比如数值之类的对象,可以初始化为0:对于指针之类的对象,初始化为null:对于集合如vec ...

  5. Codeforces gym 100685 F. Flood bfs

    F. FloodTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100685/problem/F Desc ...

  6. C#实现汉诺塔问题

    汉诺塔的由来:汉诺塔是源自印度神话里的玩具.上帝创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上安大小顺序摞着64片黄金圆盘.上帝命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上.并且 ...

  7. [ES6] 16. Object Enhancements

    Define object: var color = "blue"; var speed = 120; var car = {color, speed}; console.log( ...

  8. iOS 2D绘图详解(Quartz 2D)之路径(点,直线,虚线,曲线,圆弧,椭圆,矩形)

    前言:一个路径可以包含由一个或者多个shape以及子路径subpath,quartz提供了很多方便的shape可以直接调用.例如:point,line,Arc(圆弧),Curves(曲线),Ellip ...

  9. 《赢在用户:Web人物角色创建和应用实践指南》阅读总结

           本书针对创建人物角色的每一个步骤,包括进行定性.定量的用户研究,生成人物角色分类,使人物角色真实可信等进行了十分详细的介绍.而且,在人物角色如何指导总体商业策略.确定信息架构.内容和设计 ...

  10. 基于MTD的NAND驱动开发、K9F1G08 2K page、Yaffs2 Files System

    转载:http://hi.baidu.com/cui1206/item/1d4119e376132513585dd886 基于MTD的NAND驱动(linux-2.6.22.10内核),目前已可以在该 ...