J'exécute MS SQL Server 2008 sur mon ordinateur local. Je sais que le port par défaut est 1433 mais certains comment il n'écoute pas sur ce port. Le SQL est une édition Express.
J'ai déjà essayé le journal, SQL Server Management Studio, le registre et la procédure stockée étendue pour trouver le port. Mais je ne pouvais pas le trouver. Aidez-moi, s'il vous plaît. Merci.
Cliquez sur le bouton Start
sous Windows. Allez à All Programs -> Microsoft SQL Server 2008 -> Configuration Tools -> SQL Server Configuration Manager
Cliquez sur SQL Native Client 10.0 Configuration -> Client Protocols -> TCP/IP
double-cliquez sur (cliquez avec le bouton droit de la souris sur Properties
) sur TCP/IP
Vous trouverez Default Port 1433
.
Selon la connexion, le numéro de port peut varier.
Vous pouvez aussi regarder avec un
netstat -abn
Il donne aux ports avec l'application correspondante qui les maintient ouverts.
Éditez : ou TCPView .
Voici 5 méthodes que j'ai trouvées:
Méthode 4: sys.dm_exec_connections DMV
Je pense que c'est presque le moyen le plus simple ...
Les DMV renvoient l’état du serveur qui peut être utilisé pour surveiller l’instance SQL Server. Nous pouvons utiliser sys.dm_exec_connections DMV pour identifier le numéro de port que l'instance SQL Server écoute en utilisant le code T-SQL ci-dessous:
SELECT local_tcp_port
FROM sys.dm_exec_connections
WHERE session_id = @@SPID
GO
Result Set:
local_tcp_port
61499
(1 row(s) affected)
Méthode 1: Gestionnaire de configuration SQL Server
Étape 1. Cliquez sur Démarrer> Tous les programmes> Microsoft SQL Server 2012> Outils de configuration> Gestionnaire de configuration SQL Server.
Étape 2. Sélectionnez Gestionnaire de configuration SQL Server> Configuration réseau SQL Server> Protocoles pour.
Étape 3. Cliquez avec le bouton droit sur TCP/IP et sélectionnez Propriétés.
Étape 4. Dans la boîte de dialogue Propriétés TCP/IP, allez à l'onglet Adresses IP et faites défiler jusqu'au groupe IPAll.
Si SQL Server est configuré pour fonctionner sur un port statique, il sera disponible dans la zone de texte TCP Port. S'il est configuré sur le port dynamique, le port actuel sera disponible dans TCP Ports dynamiques. zone de texte. Ici, mon instance écoute sur le numéro de port 61499.
Les autres méthodes que vous pouvez trouver ici: http://sqlandme.com/2013/05/01/sql-server-finding-tcp-port-number-sql-instance-is-listening-on/ =
Je suis tombé sur cette erreur car je ne disposais que de problèmes pour créer une connexion à distance et je ne comprenais pas pourquoi la configuration du port 1433 dans le pare-feu ne suffisait pas. J'ai enfin l'image complète maintenant, alors j'ai pensé que je devrais partager.
Tout d'abord, il est indispensable d'activer "TCP/IP" à l'aide du Gestionnaire de configuration SQL Server sous Protocoles pour SQLEXPRESS!
Lorsqu'une instance nommée est utilisée ("SQLExpress" dans ce cas), cela écoute sur un port dynamique. Pour trouver ce port dynamique, vous avez plusieurs options. pour en nommer quelques uns:
vérification de ERRORLOG
de SQL Server situé dans '{MS SQL Server Path}\{MS SQL Server instance name}\MSSQL\Log'
(à l'intérieur, vous trouverez une ligne semblable à ceci: "2013-07-25 10:30:36.83 Server Server is listening on [ 'any' <ipv4> 51118]"
-> donc 51118 est le port dynamique dans ce cas.
vérification du registre: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\{MSSQL instance name}\MSSQLServer\SuperSocketNetLib\Tcp\IPAll
, pour mon cas TcpDynamicPorts=51118
.
Edit : {MSSQL instance name}
est quelque chose comme: MSSQL10_50.SQLEXPRESS
, pas seulement SQLEXPRESS
Bien sûr, autoriser ce port TCP dans le pare-feu et créer une connexion distante en transmettant: "x.x.x.x,51118"
(où x.x.x.x est l'adresse IP du serveur) le résout déjà à ce stade.
Mais ensuite, j'ai voulu me connecter à distance en donnant le nom de l'instance (par exemple: x.x.x.x\SQLExpress
). C'est à ce moment que le service SQL Browser entre en jeu. C'est l'unité qui résout le nom de l'instance dans le port 51118. Le service SQL Browser écoute sur le port UDP 1434 (standard et statique), donc je devais autoriser cela également dans le pare-feu du serveur.
Pour étendre un peu la réponse: si quelqu'un d'autre n'aime pas les ports dynamiques et veut un port statique pour son instance SQL Server, essayez ceci link .
Dans le journal ERROLOG pour une ligne comme ci-dessous. Si vous ne le voyez pas, SQL Server n'est pas activé pour l'accès à distance, ou simplement pas via TCP. Vous pouvez changer cela via le Gestionnaire de configuration SQL Server.
Server is listening on [ 192.128.3.2 <ipv4> 1433].
Essayez ceci (nécessite un accès à sys.dm_exec_connections
):
SELECT DISTINCT
local_tcp_port
FROM sys.dm_exec_connections
WHERE local_tcp_port IS NOT NULL
J'ai résolu le problème en activant le protocole TCP/IP à l'aide du gestionnaire de configuration SQL Server sous Protocoles pour SQLEXPRESS2008, j'ai redémarré le service et le message "Le serveur écoute" s'affiche dans le fichier ERRORLOG.
USE master
GO
xp_readerrorlog 0, 1, N'Server is listening on', 'any', NULL, NULL, N'asc'
GO
[Identifiez le port utilisé par l'instance nommée du moteur de base de données SQL Server en lisant les journaux d'erreur SQL Server]
Vous pouvez utiliser ces deux commandes: tasklist
et netstat -oan
Tasklist.exe
est comme taskmgr.exe
mais en mode texte.
Avec tasklist.exe
ou taskmgr.exe
, vous pouvez obtenir un PID de sqlservr.exe
Avec netstat -oan
, il affiche un PID de connexion que vous pouvez filtrer.
Exemple:
C:\>tasklist | find /i "sqlservr.exe"
sqlservr.exe 1184 Services 0 3.181.800 KB
C:\>netstat -oan | find /i "1184"
TCP 0.0.0.0:1280 0.0.0.0:0 LISTENING 1184
Dans cet exemple, le port SQLServer est 1280
Extrait de: http://www.sysadmit.com/2016/03/mssql-ver-puerto-de-una-instancia.html
J'utilise le script suivant dans SSMS
SELECT
s.Host_name
,c.local_net_address
,c.local_tcp_port
,s.login_name
,s.program_name
,c.session_id
,c.connect_time
,c.net_transport
,c.protocol_type
,c.encrypt_option
,c.client_net_address
,c.client_tcp_port
,s.client_interface_name
,s.Host_process_id
,c.num_reads as num_reads_connection
,c.num_writes as num_writes_connection
,s.cpu_time
,s.reads as num_reads_sessions
,s.logical_reads as num_logical_reads_sessions
,s.writes as num_writes_sessions
,c.most_recent_sql_handle
FROM sys.dm_exec_connections AS c
INNER JOIN sys.dm_exec_sessions AS s
ON c.session_id = s.session_id
--filter port number
--WHERE c.local_tcp_port <> 1433
Cela peut également être effectué via une analyse de port, qui est la seule méthode possible si vous ne disposez pas d'un accès administrateur à un serveur distant.
En utilisant Nmap ( http://nmap.org/zenmap/ ) pour effectuer une "analyse intense TCP scan", vous obtiendrez des résultats comme celui-ci pour toutes les instances sur le serveur:
[10.0.0.1\DATABASE]
Instance name: DATABASE
Version: Microsoft SQL Server 2008 R2 RTM
Product: Microsoft SQL Server 2008 R2
Service pack level: RTM
TCP port: 49843
Named pipe: \\10.0.0.1\pipe\MSSQL$DATABASE\sql\query
Remarque importante: Pour tester avec l’analyseur de requêtes ou MS SQL Server Management Studio, vous devez former votre nom de serveur et votre port de manière différente de celle à laquelle vous vous connectez normalement, sur HTTP par exemple, en utilisant une virgule au lieu de deux points .
10.0.0.1,49843
Data Source=10.0.0.1,49843
pourtant
jdbc:Microsoft:sqlserver://10.0.0.1:49843;DatabaseName=DATABASE
En plus de ce qui est répertorié ci-dessus, je devais activer les ports TCP et UDP pour que SQLExpress puisse se connecter à distance. Comme j'ai trois instances différentes sur ma machine de développement, j'active 1430-1435
pour TCP et UDP.
This fonctionne pour SQL Server 2005 - 2012. Recherchez l'événement id = 26022 dans le journal des erreurs sous applications. Cela montrera le numéro de port du serveur SQL ainsi que les adresses IP autorisées à accéder.
La solution PS couvrira toutes les instances de l'hôte + vous donnera toutes les adresses des clients connectés, toutes belles et propres:
ForEach ($SQL_Proc in Get-Process | Select-Object -Property ProcessName, Id | Where-Object {$_.ProcessName -like "*SQL*"})
{
Get-NetTCPConnection | `
Where-Object {$_.OwningProcess -eq $SQL_Proc.id} | `
Select-Object -Property `
@{Label ="Process_Name";e={$SQL_Proc.ProcessName}}, `
@{Label ="Local_Address";e={$_.LocalAddress + ":" + $_.LocalPort }}, `
@{Label ="Remote_Address";e={$_.RemoteAddress + ":" + $_.RemotePort}}, State | `
Format-Table
}
La deuxième solution, pour certains, serait peut-être plus facile d'ouvrir resource monitor
et d'aller au Network>TCP Connections
à partir de là, vous pourrez voir quelque chose comme ça, cherchez simplement votre processus SQLSERVER: