我现在已经十多次面对这种情况,最终希望永久解决它。
在客户端PC上找不到Server PC的SQL实例名称。
注意: - 我已在服务器和客户端上安装了SQL Express和Management Studio
服务器PC名称:M-PC
服务器SQL版本:SQL Server 2008
客户端PC名称:SHIVANG
客户端SQL版:SQL Server 2008
客户端的PC SQL Server截图
1)彻底关闭服务器和客户端PC的防火墙(域名,私人和公共)
2)启用和重新启动服务: SQL Server 和浏览器服务
3)启用SQL网络配置设置
4)同时启用"允许远程连接"来自PC的两台PC
5)PC之间的联网是完美的,可以通过PC的网络访问文件
6)甚至改变了IP配置设置从获取到PC的静态(服务器的IP是192.168.1.41,客户端的IP是192.168.1.44 )
7)我已从客户端和服务器上完全卸载了SQL Express和Management Studio,并再次安装
8)我还告诉我的客户格式化PC,然后安装SQL Express和Management Studio。仍然没有。
9)他们在任何系统上都没有防病毒软件(阻止连接)
现在有趣的部分是我正在摆弄客户端和服务器PC的设置。 服务器PC开始显示客户端PC SQL实例,而客户端PC仍无法找到服务器SQL实例。
下图是Server PC的SQL Server
下图是Client PC的SQL Server
以下是我一直在设置的以下设置: -
现在我不知道下一步要做什么来解决这个问题。如果可以,请帮帮我。
提前致谢
答案 0 :(得分:10)
为了允许远程访问,需要更改两个级别的安全性。
根据您要连接的SQL Server实例的类型,有两种情况:
命名实例(按计算机名称+实例名称连接)。添加一个 允许 UDP端口1434 上的传入规则访问SQL浏览器 服务。在数据库引擎服务上添加允许传入规则。
答案 1 :(得分:0)
对于不一致的结果,我没有明确的答案,但我确实有一些背景信息可以帮助您解决问题。
使用SQL Server Resolution Protocol枚举SQL实例。这是一个应用层协议,它使用UDP(而不是TCP)向本地子网上的服务器发送枚举请求,并接收响应,如communication flow for multi-instance discovery diagram所示。 SQL Server Browser服务侦听UDP端口1434以处理枚举请求。
重要的是, UDP多播协议不保证提供请求或响应 。因此,可能发生只能通过网络跟踪检测到的丢失。 SQL Server解析协议无法知道为什么没有收到响应;这可能是因为服务器出现故障,网络问题,防火墙,SQL实例隐藏等。此外,UDP多播请求仅传送到本地子网上的设备,因此解决方案仅限于这些机器。
下面的PowerShell脚本向特定主机发送UDP请求。您可以运行此命令以确保SQL浏览器服务使用有关主机上实例的预期信息进行响应。
Function List-Instances($hostName)
{
Write-Host ("Retrieving information from SQL Server Browser service on host $HostName ...");
try
{
$udpClient = new-object Net.Sockets.UdpClient($HostName, 1434);
$bufferLength = 1;
$browserQueryMessage = new-object byte[] $bufferLength;
$browserQueryMessage[0] = 2; # list all instances
$bytesSent = $udpClient.Send($browserQueryMessage, $browserQueryMessage.Length);
$udpClient.Client.ReceiveTimeout = 10000;
$remoteEndPoint = new-object System.Net.IPEndPoint([System.Net.IPAddress]::Broadcast, 0);
$browserResponse = $udpClient.Receive([ref]$remoteEndPoint);
$payloadLength = $browserResponse.Length - 3;
$browserResponseString = [System.Text.ASCIIEncoding]::ASCII.GetString($browserResponse, 3, $payloadLength);
$browserResponseString
$elements = $browserResponseString.Split(";");
$elements
$namedInstancePort = "";
Write-host "SQL Browser Data:" -ForegroundColor Green;
$i = 0;
while($i -lt $elements.Length)
{
if([String]::IsNullOrEmpty($elements[$i]))
{
Write-Host "";
$i += 1;
}
else
{
Write-Host $(" " + $elements[$i] + "=" + $elements[$i+1]) -ForegroundColor Green;
$i += 2;
}
}
}
catch [Exception]
{
Write-host $("ERROR: " + $_.Exception.Message) -ForegroundColor Red;
}
}
# send request to SQL Brower service to enumerate all SQL instances running on specific host
List-Instances -hostName "SomeMachine";
总之,成功解决需要:
答案 2 :(得分:0)
首先,确认防火墙设置。在非主机LAN计算机上安装SQL Server Management Studio,并检查是否可以使用主机的IP地址进行连接。如果未在主机服务器上启用SA,则可能意味着要弄乱登录权限。
SQL Server服务> SQL Server浏览器>右键单击>属性>服务>启动模式>自动。
SQL Server服务> SQL Server浏览器>右键单击>属性>开始
在主机和/或LAN计算机上打开命令提示符并执行:
sqlcmd -L
答案 3 :(得分:-1)
安装SQL Express时,无法从网络或远程访问它。 除非您配置远程访问选项
1 - 在对象资源管理器中,右键单击服务器并选择“属性”。
2 - 单击Connections节点。
3 - 在“远程服务器连接”下,选中或清除“允许与此服务器的远程连接”复选框。