J'ai été confronté à ce genre de situation une douzaine de fois maintenant et enfin je veux une solution permanente.
Impossible de trouver le nom de l'instance SQL du PC serveur sur le PC client.
Note: - J'ai installé SQL Express And Management Studio sur le serveur et le client.
Nom du PC serveur: M-PC
Version SQL du serveur: SQL Server 2008
Nom du PC client: SHIVANG
Version SQL du client: SQL Server 2008
Capture d'écran du serveur SQL Server du client
1) Désactivation complète du pare-feu du serveur et du PC client (domaine, privé et public)
2) Activation et redémarrage des services: SQL Server et Browser Service 3) Activation des paramètres de configuration réseau SQL 4) Également activé "Autoriser la connexion à distance" à partir de SQL Server du PC
5) La mise en réseau parfaite entre les deux PC permet d’accéder aux fichiers via le réseau des deux.
6) Même modifié les paramètres de configuration IP d’obtenir en statique du PC (IP du serveur est 192.168.1.41 et IP du client est 192.168.1.44)
7) J'ai complètement désinstallé SQL Express et Management Studio du client et du serveur et je l'ai réinstallé.
8) J'ai également demandé à mon client de formater le PC, puis d’installer SQL Express et Management Studio. Toujours rien.
9) Ils n’ont pas d’antivirus sur le système (pour bloquer la connexion)
Maintenant, la partie amusante est ici alors que je tripotais les paramètres du PC client et du serveur. Le PC serveur a commencé à afficher l'instance SQL du PC client alors que le PC client ne parvenait toujours pas à trouver l'instance SQL du serveur.
L'image ci-dessous est celle du serveur SQL Server
L'image ci-dessous est celle de SQL Server de l'ordinateur client
Voici les réglages suivants que j'ai manipulés: -
Maintenant, je ne sais pas quoi faire ensuite pour résoudre ce problème. S'il vous plaît aidez-moi si vous le pouvez.
Merci d'avance
Deux niveaux de sécurité doivent être modifiés pour permettre l'accès à distance.
Il existe deux cas selon le type d'instance SQL Server à laquelle vous vous connectez:
Instance nommée (connectée par nom d'ordinateur + nom d'instance). Ajoutez une règle Autoriser la règle entrante sur le port UDP 1434 pour accéder au service SQL Browser Ajoutez une règle d'autorisation entrante sur le service de moteur de base de données.
Je n'ai pas de réponse définitive à vos résultats incohérents, mais j'ai quelques informations générales qui peuvent vous aider à résoudre le problème.
Les instances SQL sont énumérées à l'aide de SQL Server Resolution Protocol . Il s'agit d'un protocole de couche d'application qui utilise UDP (et non TCP) pour envoyer des demandes d'énumération aux serveurs du sous-réseau local et recevoir les réponses comme indiqué dans le flux de communication du diagramme de reconnaissance multi-instance . Ce sont les services SQL Server Browser qui écoutent sur le port UDP 1434 pour traiter les demandes d’énumération.
Il est important de noter que le protocole de multidiffusion UDP ne garantit pas que les demandes ou les réponses sont fournies. Par conséquent, une perte peut être détectée et ne peut être détectée que par une trace réseau. Le protocole de résolution SQL Server ne peut pas savoir pourquoi aucune réponse n'a été reçue; un serveur est en panne, un problème de réseau, un pare-feu, une instance SQL masquée, etc. De plus, les demandes de multidiffusion UDP ne sont envoyées qu'aux périphériques du sous-réseau local, ce qui limite la résolution à ces machines.
Le script PowerShell ci-dessous envoie une demande UDP à un hôte spécifique. Vous pouvez l'exécuter pour vous assurer que le service SQL Browser répond avec les informations attendues sur les instances sur l'hôte.
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";
En résumé, une résolution réussie nécessite: