Question

J'essaie de déterminer les instances de SQL Server / SQL Express que j'ai installées (manuellement ou par programme), mais tous les exemples me disent d'exécuter une requête SQL pour déterminer ce qui suppose que je suis déjà connecté à un cas particulier.

Était-ce utile?

La solution

Sur une ligne de commande:

SQLCMD -L

ou

OSQL -L

(Remarque: doit être un L majuscule)

Ceci listera tous les serveurs SQL installés sur votre réseau. Il existe des options de configuration que vous pouvez définir pour empêcher un serveur SQL de s'afficher dans la liste. Pour ce faire ...

En ligne de commande:

svrnetcn

Dans la liste des protocoles activés, sélectionnez "TCP / IP", puis cliquez sur Propriétés. Il y a une case à cocher pour "Masquer le serveur".

Autres conseils

Vous pouvez interroger cette valeur de registre pour obtenir directement la version SQL:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\90\Tools\ClientSetup\CurrentVersion

Vous pouvez également interroger votre nom d'instance, puis utiliser sqlcmd avec le nom de votre instance souhaité:

Pour voir votre nom d'instance:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names

Puis exécutez ceci:

SELECT SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')

Si vous utilisez C ++, vous pouvez l'utiliser code pour obtenir les informations du registre.

Toutes les instances installées doivent apparaître dans le composant logiciel enfichable Services de la console de gestion Microsoft. Pour obtenir les noms d'instance, allez dans Démarrer | Run | saisissez Services.msc et recherchez toutes les entrées avec "Serveur SQL (Nom de l'instance)".

- Requête T-SQL pour trouver la liste des instances installées sur une machine

DECLARE @GetInstances TABLE
( Value nvarchar(100),
 InstanceNames nvarchar(100),
 Data nvarchar(100))

Insert into @GetInstances
EXECUTE xp_regread
  @rootkey = 'HKEY_LOCAL_MACHINE',
  @key = 'SOFTWARE\Microsoft\Microsoft SQL Server',
  @value_name = 'InstalledInstances'

Select InstanceNames from @GetInstances 

Si vous voulez seulement voir ce qui est installé sur la machine à laquelle vous êtes actuellement connecté, je pense que le processus manuel le plus simple consiste à ouvrir le Gestionnaire de configuration SQL Server (à partir du menu Démarrer), qui affiche tous les codes SQL. Services (et uniquement services SQL) sur ce matériel (en cours d’exécution ou non). Cela suppose SQL Server 2005 ou supérieur; Recommandation de pointantengineer d'utiliser la console de gestion des services vous montrera tous les services et devrait toujours être disponible (si vous utilisez des versions antérieures de SQL Server, par exemple).

Si vous recherchez un processus de découverte plus étendu, vous pouvez envisager des outils tiers, tels que SQLRecon et SQLPing, qui analyseront votre réseau et créeront un rapport de toutes les instances de service SQL trouvées sur tout serveur sur lequel elles sont connectées. accès. Cela fait longtemps que je n’utilise pas d’outils comme celui-ci, mais j’ai été surpris de ce qu’ils ont découvert (c’est-à-dire quelques exemples dont je ne connaissais pas l'existence). YMMV. Vous pouvez consulter Google pour plus de détails, mais je pense que cette page contient les téléchargements pertinents: http://www.sqlsecurity.com/Tools/FreeTools/tabid/65/Default.aspx

Je sais que ce fil est un peu vieux, mais je suis tombé sur ce fil avant de trouver la réponse que je cherchais et de penser partager. Si vous utilisez SQLExpress (ou localdb), il existe un moyen plus simple de rechercher vos noms d'instance. Sur une ligne de commande, tapez:

> sqllocaldb i

Ceci listera les noms d’instance que vous avez installés localement. Donc, votre nom de serveur complet doit inclure (localdb) \ devant le nom de l'instance à connecter. En outre, sqllocaldb vous permet de créer de nouvelles instances ou de les supprimer ainsi que de les configurer. Voir: Utilitaire SqlLocalDB .

SQL Server permet aux applications de rechercher des instances SQL Server au sein du réseau actuel. La classe SqlDataSourceEnumerator expose ces informations au développeur d'applications en fournissant un DataTable contenant des informations sur tous les serveurs visibles. Cette table renvoyée contient une liste des instances de serveur disponibles sur le réseau, qui correspond à la liste fournie lorsqu'un utilisateur tente de créer une nouvelle connexion, et développe la liste déroulante contenant tous les serveurs disponibles dans la boîte de dialogue Propriétés de connexion. Les résultats affichés ne sont pas toujours complets. Afin de récupérer la table contenant des informations sur les instances SQL Server disponibles, vous devez d'abord récupérer un énumérateur, à l'aide de la propriété Instance shared / static:

using System.Data.Sql;

class Program
{
  static void Main()
  {
    // Retrieve the enumerator instance and then the data.
    SqlDataSourceEnumerator instance =
      SqlDataSourceEnumerator.Instance;
    System.Data.DataTable table = instance.GetDataSources();

    // Display the contents of the table.
    DisplayData(table);

    Console.WriteLine("Press any key to continue.");
    Console.ReadKey();
  }

  private static void DisplayData(System.Data.DataTable table)
  {
    foreach (System.Data.DataRow row in table.Rows)
    {
      foreach (System.Data.DataColumn col in table.Columns)
      {
        Console.WriteLine("{0} = {1}", col.ColumnName, row[col]);
      }
      Console.WriteLine("============================");
    }
  }
}

from msdn http://msdn.microsoft .com / fr-us / library / a6t1z9x2 (v = vs.80) .aspx

À partir de la ligne de commande Windows, tapez:

SC \\server_name query | find /I "SQL Server ("

Où " nom_serveur " est le nom de tout serveur distant sur lequel vous souhaitez afficher les instances SQL.

Cela nécessite bien sûr des autorisations suffisantes.

Si vous souhaitez déterminer cela dans un script, vous pouvez essayer les solutions suivantes:

sc \\server_name query | grep MSSQL

Remarque: grep fait partie des outils gnuwin32

J'ai eu le même problème. Le & os; osql -L " Cette commande n’affichait qu’une liste de serveurs, mais sans nom d’instance (seule l’instance de mon serveur SQL local était affichée). Avec Wireshark, sqlbrowser.exe (que l’on trouve dans le dossier partagé de votre installation SQL), j’ai trouvé une solution à mon problème.

L'instance locale est résolue par entrée de registre. Les instances distantes sont résolues par diffusion UDP (port 1434) et SMB. Utilisez " sqlbrowser.exe -c " pour lister les requêtes.

Ma configuration utilise 1 carte réseau physique et 3 cartes réseau virtuelles. Si j’ai utilisé le fichier "osql -L" Lors de la commande, sqlbrowser a affiché une requête de l’un des adaptateurs virtuels (situé dans un autre segment du réseau), au lieu du physique. osql sélectionne l'adpater par sa métrique. Vous pouvez voir la métrique avec la commande "route print". Pour ma configuration, la table de routage affichait une métrique inférieure pour l'adaptateur virtuel, puis pour l'adaptateur physique. J'ai donc modifié la métrique d'interface dans les propriétés du réseau en désélectionnant la métrique automatique dans les paramètres réseau avancés. osql utilise maintenant l'adaptateur physique.

Cette requête devrait vous donner le nom du serveur et le nom de l'instance:

SELECT @@SERVERNAME, @@SERVICENAME

Je viens d'installer Sql Server 2008, mais je n'ai pas pu me connecter à aucune instance de base de données. Les commandes publiées par @G Mastros ne répertorient aucune instance active.

J'ai donc cherché dans les services et constaté que l'agent du serveur SQL était désactivé. Je l'ai corrigé en le mettant en automatique puis en le démarrant.

J'éprouvais le même problème lorsque j'évaluais plus de 100 serveurs. J'avais un script écrit en C # pour parcourir les noms de services composés de SQL. Lorsque des instances sont installées sur le serveur, SQL Server ajoute un service pour chaque instance avec le nom du service. Cela peut varier d'une version à l'autre, par exemple de 2000 à 2008, mais il existe un service avec un nom d'instance.

Je prends le nom du service et obtient le nom de l'instance à partir du nom du service. Voici l'exemple de code utilisé avec le résultat de la requête WMI:

if (ServiceData.DisplayName == "MSSQLSERVER" || ServiceData.DisplayName == "SQL Server (MSSQLSERVER)")
            {
                InstanceData.Name = "DEFAULT";
                InstanceData.ConnectionName = CurrentMachine.Name;
                CurrentMachine.ListOfInstances.Add(InstanceData);
            }
            else
                if (ServiceData.DisplayName.Contains("SQL Server (") == true)
                {
                    InstanceData.Name = ServiceData.DisplayName.Substring(
                                            ServiceData.DisplayName.IndexOf("(") + 1,
                                            ServiceData.DisplayName.IndexOf(")") - ServiceData.DisplayName.IndexOf("(") - 1
                                        );
                    InstanceData.ConnectionName = CurrentMachine.Name + "\\" + InstanceData.Name;
                    CurrentMachine.ListOfInstances.Add(InstanceData);
                }
                else
                    if (ServiceData.DisplayName.Contains("MSSQL<*>quot;) == true)
                    {
                        InstanceData.Name = ServiceData.DisplayName.Substring(
                                                ServiceData.DisplayName.IndexOf("<*>quot;) + 1,
                                                ServiceData.DisplayName.Length - ServiceData.DisplayName.IndexOf("<*>quot;) - 1
                                            );

                        InstanceData.ConnectionName = CurrentMachine.Name + "\\" + InstanceData.Name;
                        CurrentMachine.ListOfInstances.Add(InstanceData);
                    }

Voici une méthode simple: aller à Commence alors Programmes ensuite Microsoft SQL Server 2005 puis Outils de configuration puis Gestionnaire de configuration SQL Server puis Configuration réseau SQL Server 2005 puis Ici, vous pouvez localiser toute l’instance installée sur votre ordinateur.

Si vous êtes dans SSMS, vous trouverez peut-être qu'il est plus facile de l'utiliser:

SELECT @@Version

Je sais que c’est un article ancien, mais j’ai trouvé une solution intéressante avec PoweShell. Vous pouvez y trouver des instances SQL installées sur un ordinateur local ou distant, y compris la version, et obtenir d’autres propriétés.

$MachineName = ‘.’ # Default local computer Replace . with server name for a remote computer

$reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey(‘LocalMachine’, $MachineName)
$regKey= $reg.OpenSubKey("SOFTWARE\\Microsoft\\Microsoft SQL Server\\Instance Names\\SQL" )
$values = $regkey.GetValueNames()
$values | ForEach-Object {$value = 

Je sais que c’est un article ancien, mais j’ai trouvé une solution intéressante avec PoweShell. Vous pouvez y trouver des instances SQL installées sur un ordinateur local ou distant, y compris la version, et obtenir d’autres propriétés.

<*> ; $inst = $regKey.GetValue($value); $path = "SOFTWARE\\Microsoft\\Microsoft SQL Server\\"+$inst+"\\MSSQLServer\\"+"CurrentVersion"; #write-host $path; $version = $reg.OpenSubKey($path).GetValue("CurrentVersion"); write-host "Instance" $value; write-host "Version" $version}

Une autre option consisterait à exécuter le rapport de découverte SQLSERVER ... allez sur le support d'installation de sqlserver et double-cliquez sur setup.exe

 entrer la description de l'image ici

et dans l'écran suivant, accédez à Outils et cliquez sur le rapport de découverte comme indiqué ci-dessous

 entrer la description de l'image ici

Ceci vous montrera toutes les instances présentes avec des fonctionnalités entières. ci-dessous est un instantané sur mon pc entrer la description de l'image ici

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top