![SQL Server 2008 R2 通过 VPN 进行事务复制](https://linux22.com/image/546201/SQL%20Server%202008%20R2%20%E9%80%9A%E8%BF%87%20VPN%20%E8%BF%9B%E8%A1%8C%E4%BA%8B%E5%8A%A1%E5%A4%8D%E5%88%B6.png)
我在通过 VPN 设置复制时遇到了困难。
我在 Windows 2008 R2 服务器上有一个 SQL Server 2008 R2 企业版数据库。
SQL Server 在非标准端口上运行。我已将其设置为充当自己的分发服务器,并在此服务器上配置了发布服务器。它被设置为可更新的事务发布(是的,这是必要的)。
在此服务器上,我启用了路由和远程访问,以便能够建立 VPN 连接。它配置了一个静态 IP 地址池,其中范围内的第一个地址始终分配给服务器。我已为测试用户分配了此范围内的静态地址(我不知道这是否必要)。
所有客户端都将是 2008 R2 版本,但可能是 SQL Express 或完整产品的独立开发人员实例。
我可以从客户端毫无问题地建立 VPN 连接,并且可以看到分配了正确的 IP 地址。
连接到数据库以测试是否可以建立连接后,我意识到我需要能够使用服务器名称而不是 IP 地址(复制所需的)连接到数据库,这最初不起作用。我使用服务器的 NETBIOS 名称在客户端上的服务器的 hosts 文件中创建了一个条目,现在我可以使用语法通过 VPN 从客户端连接到服务器SERVER\INSTANCE, PORT
。由于它是服务器上的默认实例,因此我也可以使用简单的SERVER, PORT
语法进行连接。
经过所有这些,我仍然收到以下可怕的错误:SQL Server replication requires the actual server name to make a connection to the server. Connections through a server alias, IP address, or any other alternate name are not supported. Specify the actual server name, 'SERVER\INSTANCE'. (Replication.Utilities)
。
我错过了什么?我该如何让它工作?
短暂性脑缺血发作
答案1
尝试这个命令:
select name from sys.servers
查看返回的内容。设置复制时,您需要使用该名称来连接服务器。
或者将其更改为您想要使用的名称:
sp_dropserver 'currentname'
go
sp_addserver 'changedname' , 'local'
然后需要重新启动数据库引擎
答案2
将端口改回默认端口号。更改端口号除了让你的生活变得更加困难之外,没有任何作用。
答案3
只是漫无边际的闲聊,可能对你来说太晚了,但对 googlefiers 来说很有用:根据我读到的内容,我猜你需要为本地服务器添加一个别名,因为找到命名实例有点困难。SQL Server 客户端将转到 SQL 浏览器获取有关命名实例的信息 - 这似乎无法通过 VPN 获得。但在此之前,它会检查本地别名是否在那里指定了主机名。您可以在 SQL Server 配置管理器 - 别名中添加它。一个救命的建议:保持你的 32 位和 64 位别名同步。就这样。
答案4
有点不相关,但我曾使用 Double Take 在整个服务器级别获得额外的 SQL Server 复制层。根据您的 DR 计划要求,这是一个非常值得考虑的选择。故障转移可以是手动的,也可以是完全自动化的,而且比 VM-Ware 实施更便宜。