如何在远程服务器上创建链接服务器到本地PC
How to create linked server on remote server to local PC
如何添加链接服务器建立从远程 SQL 服务器链接到 SQL Server Express 的本地实例的连接?本地是指我使用 SQL Server Express 实例的 PC,远程是指我使用 SSMS 连接的服务器。大多数在网络上描述了相反的情况 - 从远程到本地。我从该文档开始:
https://docs.microsoft.com/en-us/sql/relational-databases/linked-servers/create-linked-servers-sql-server-database-engine
- 我是否必须像对待远程服务器一样对待本地服务器?我的意思是我必须找到链接服务器本地实例的 IP 地址吗?如果是,那么问题是如何找到本地服务器的必要参数以使其远程化?这个查询对我来说是一个很有希望的开始 但是我得到了 local_net_address、local_tcp_port 和 client_net_address 的空值。所以我卡住了。
- 请看下图。在链接服务器字段中输入什么?
.\SQLExpress
或其他一些短语。
- 选择
SQL Server
还是Other data source
?
- 如果是其他数据源,那么提供者呢?
是的。它对您来说是本地的,而不是您要创建 linked 服务器的其他 SQL 服务器。对于另一台服务器,您的本地服务器是远程的。使用 SQL 服务器配置管理器确保您的本地服务器可以接受网络连接。
如果您使用 SQL 服务器,您必须提供本地服务器的网络名称 - 您在 SSMS 中使用的名称。除非你使用本地主机或“。”那么你需要找到它,你可以使用 ipconfig /all
并查找主机名。假设您的本地服务器和其他服务器都在同一网络上,这将起作用。
使用其他服务器,您有更多选择。在 linked 服务器中,您可以提供任何您喜欢的内容,然后在下面指定连接信息。
Here you can find more information about values
您选择场景允许的内容。可以的话选择Sql服务器
看第2部分link
编辑:
免责声明我不是网络工程师,所以我可能会遗漏一些关键步骤才能真正让它发挥作用,这只是一般方向。
如果你在其他网络而不是你的其他服务器上,你将不得不在你的机器和路由器上的 1433 TCP 端口上打开防火墙,并将路由器的端口 1433 映射到你机器的端口 1433。然后让你的路由器public IP 你应该可以link 两台服务器。它有点超出了 SO 的范围,就像@MatSnow 在他的评论中提到的那样。
如果您发现 "from remote to local" 与您想要的相反,请想象您的 PC 是服务器,而服务器是本地 PC,然后继续。
假设您有 2 台机器:machine1 和 machine2。
将 machine1 上的 link 服务器添加到 machine2:只需在 machine1 上打开新的 link 服务器页面即可。
链接服务器:(Machine2 IP地址)
(已选)SQL服务器
转到安全页面并 select:使用此安全上下文创建。
并输入您从机器 2 上的 SQL 服务器实例获得的用户名和密码。
我不会说你的IP,因为很明显你必须有一个public/reachable IP这是先决条件
- 您必须在您的 SQL 服务器中 启用 TCP/IP 协议,这样您的服务器就会接受不是来自本地主机的请求。您可以在 Sql 服务器配置管理器 中执行此操作,如下图所示
完成后,您必须在防火墙中打开端口 1433,这样连接就不会被阻止,如您所见here
此时你只需要像往常一样添加链接服务器,IP/Instance
正如其他人指出的那样。它的很多答案和成功取决于两台机器的通信能力。那么DNS配置了吗?防火墙?你能ping通吗?你能解析机器名吗?您能否以其他方式从一台服务器与另一台服务器通信?从本地计算机和远程服务器创建链接服务器的区别实际上只是颠倒了信息,反之亦然。您的本地计算机仍然需要是具有适当配置和授予权限的服务器,但如果是,那么它只是另一个 SQL 服务器。链接服务器仅依赖于 2 SQL 个能够通信的服务器。
因为我经常远程工作 (VPN) 并且服务器不能总是解析我的机器 DNS 名称我使用以下脚本在远程服务器上创建一个链接服务器通过 IP 地址连接到我的本地机器我连接到通过 SSMS 服务器:
DECLARE @AutoExecute BIT = 1
DECLARE @LinkedServerName VARCHAR(50) = 'LinkedServername' --if null or blank the linked server will just get the instance name
DECLARE @InstanceAppend VARCHAR(45) = '\InstanceName' --make emptry string if none
DECLARE @user VARCHAR(20) = 'username'
DECLARE @password VARCHAR(20) = 'password'
DECLARE @SQL VARCHAR(MAX)
DECLARE @IPAddress VARCHAR(255)
DECLARE @Instance VARCHAR(300)
DECLARE @SrvName VARCHAR(300)
SELECT @IPAddress = client_net_address
,@Instance = client_net_address + ISNULL(@InstanceAppend,'')
FROM
sys.dm_exec_connections
WHERE Session_id = @@SPID;
SET @SrvName = CASE WHEN LEN(@LinkedServerName) > 0 THEN @LinkedServerName ELSE @Instance END
IF NOT EXISTS (SELECT * FROM sys.servers WHERE name = @SrvName)
BEGIN
IF (LEN(@LinkedServerName) > 0)
BEGIN
SET @SQL = 'EXECUTE master.dbo.sp_addlinkedserver @server = N''' + @LinkedServerName + ''',@provider=''SQLOLEDB'', @srvproduct=N'''', @datasrc=N''' + @Instance + ''''
END
ELSE
BEGIN
SET @SQL = 'EXECUTE master.dbo.sp_addlinkedserver @server = N''' + @Instance + ''', @srvproduct=N''SQL Server'''
END
SET @SQL = @SQL + CHAR(13) + 'EXECUTE master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N''' + @SrvName + ''',@useself=N''False'',@rmtuser=''' + @user + ''', @rmtpassword=''' + @password + ''''
END
ELSE
BEGIN
PRINT 'Linked Server Exists'
END
PRINT @SQL
IF (@AutoExecute = 1)
BEGIN
BEGIN TRY
EXECUTE (@SQL)
PRINT 'Executed Successfully'
END TRY
BEGIN CATCH
PRINT 'Failed To Execute'
;THROW
END CATCH
END
如何添加链接服务器建立从远程 SQL 服务器链接到 SQL Server Express 的本地实例的连接?本地是指我使用 SQL Server Express 实例的 PC,远程是指我使用 SSMS 连接的服务器。大多数在网络上描述了相反的情况 - 从远程到本地。我从该文档开始: https://docs.microsoft.com/en-us/sql/relational-databases/linked-servers/create-linked-servers-sql-server-database-engine
- 我是否必须像对待远程服务器一样对待本地服务器?我的意思是我必须找到链接服务器本地实例的 IP 地址吗?如果是,那么问题是如何找到本地服务器的必要参数以使其远程化?这个查询对我来说是一个很有希望的开始 但是我得到了 local_net_address、local_tcp_port 和 client_net_address 的空值。所以我卡住了。
- 请看下图。在链接服务器字段中输入什么?
.\SQLExpress
或其他一些短语。 - 选择
SQL Server
还是Other data source
? - 如果是其他数据源,那么提供者呢?
是的。它对您来说是本地的,而不是您要创建 linked 服务器的其他 SQL 服务器。对于另一台服务器,您的本地服务器是远程的。使用 SQL 服务器配置管理器确保您的本地服务器可以接受网络连接。
如果您使用 SQL 服务器,您必须提供本地服务器的网络名称 - 您在 SSMS 中使用的名称。除非你使用本地主机或“。”那么你需要找到它,你可以使用
ipconfig /all
并查找主机名。假设您的本地服务器和其他服务器都在同一网络上,这将起作用。 使用其他服务器,您有更多选择。在 linked 服务器中,您可以提供任何您喜欢的内容,然后在下面指定连接信息。 Here you can find more information about values您选择场景允许的内容。可以的话选择Sql服务器
看第2部分link
编辑:
免责声明我不是网络工程师,所以我可能会遗漏一些关键步骤才能真正让它发挥作用,这只是一般方向。
如果你在其他网络而不是你的其他服务器上,你将不得不在你的机器和路由器上的 1433 TCP 端口上打开防火墙,并将路由器的端口 1433 映射到你机器的端口 1433。然后让你的路由器public IP 你应该可以link 两台服务器。它有点超出了 SO 的范围,就像@MatSnow 在他的评论中提到的那样。
如果您发现 "from remote to local" 与您想要的相反,请想象您的 PC 是服务器,而服务器是本地 PC,然后继续。 假设您有 2 台机器:machine1 和 machine2。 将 machine1 上的 link 服务器添加到 machine2:只需在 machine1 上打开新的 link 服务器页面即可。 链接服务器:(Machine2 IP地址) (已选)SQL服务器
我不会说你的IP,因为很明显你必须有一个public/reachable IP这是先决条件
- 您必须在您的 SQL 服务器中 启用 TCP/IP 协议,这样您的服务器就会接受不是来自本地主机的请求。您可以在 Sql 服务器配置管理器 中执行此操作,如下图所示
完成后,您必须在防火墙中打开端口 1433,这样连接就不会被阻止,如您所见here
此时你只需要像往常一样添加链接服务器,IP/Instance
正如其他人指出的那样。它的很多答案和成功取决于两台机器的通信能力。那么DNS配置了吗?防火墙?你能ping通吗?你能解析机器名吗?您能否以其他方式从一台服务器与另一台服务器通信?从本地计算机和远程服务器创建链接服务器的区别实际上只是颠倒了信息,反之亦然。您的本地计算机仍然需要是具有适当配置和授予权限的服务器,但如果是,那么它只是另一个 SQL 服务器。链接服务器仅依赖于 2 SQL 个能够通信的服务器。
因为我经常远程工作 (VPN) 并且服务器不能总是解析我的机器 DNS 名称我使用以下脚本在远程服务器上创建一个链接服务器通过 IP 地址连接到我的本地机器我连接到通过 SSMS 服务器:
DECLARE @AutoExecute BIT = 1
DECLARE @LinkedServerName VARCHAR(50) = 'LinkedServername' --if null or blank the linked server will just get the instance name
DECLARE @InstanceAppend VARCHAR(45) = '\InstanceName' --make emptry string if none
DECLARE @user VARCHAR(20) = 'username'
DECLARE @password VARCHAR(20) = 'password'
DECLARE @SQL VARCHAR(MAX)
DECLARE @IPAddress VARCHAR(255)
DECLARE @Instance VARCHAR(300)
DECLARE @SrvName VARCHAR(300)
SELECT @IPAddress = client_net_address
,@Instance = client_net_address + ISNULL(@InstanceAppend,'')
FROM
sys.dm_exec_connections
WHERE Session_id = @@SPID;
SET @SrvName = CASE WHEN LEN(@LinkedServerName) > 0 THEN @LinkedServerName ELSE @Instance END
IF NOT EXISTS (SELECT * FROM sys.servers WHERE name = @SrvName)
BEGIN
IF (LEN(@LinkedServerName) > 0)
BEGIN
SET @SQL = 'EXECUTE master.dbo.sp_addlinkedserver @server = N''' + @LinkedServerName + ''',@provider=''SQLOLEDB'', @srvproduct=N'''', @datasrc=N''' + @Instance + ''''
END
ELSE
BEGIN
SET @SQL = 'EXECUTE master.dbo.sp_addlinkedserver @server = N''' + @Instance + ''', @srvproduct=N''SQL Server'''
END
SET @SQL = @SQL + CHAR(13) + 'EXECUTE master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N''' + @SrvName + ''',@useself=N''False'',@rmtuser=''' + @user + ''', @rmtpassword=''' + @password + ''''
END
ELSE
BEGIN
PRINT 'Linked Server Exists'
END
PRINT @SQL
IF (@AutoExecute = 1)
BEGIN
BEGIN TRY
EXECUTE (@SQL)
PRINT 'Executed Successfully'
END TRY
BEGIN CATCH
PRINT 'Failed To Execute'
;THROW
END CATCH
END