Domanda

Sto cercando di determinare a quali istanze di sql server / sql express ho installato (manualmente o a livello di codice) ma tutti gli esempi mi dicono di eseguire una query SQL per determinare ciò a cui si presume che io sia già connesso un'istanza particolare.

È stato utile?

Soluzione

Alla riga di comando:

SQLCMD -L

o

OSQL -L

(Nota: deve essere una L maiuscola)

Questo elencherà tutti i server sql installati sulla tua rete. Esistono opzioni di configurazione che è possibile impostare per impedire a un server SQL di essere visualizzato nell'elenco. Per fare questo ...

Alla riga di comando:

svrnetcn

Nell'elenco dei protocolli abilitati, selezionare "TCP / IP", quindi fare clic su Proprietà. C'è una casella di controllo per "Nascondi server".

Altri suggerimenti

È possibile richiedere questo valore di registro per ottenere direttamente la versione SQL:

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

In alternativa puoi eseguire una query sul nome dell'istanza e quindi utilizzare sqlcmd con il nome dell'istanza che desideri:

Per vedere il nome della tua istanza:

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

Quindi esegui questo:

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

Se stai usando C ++ puoi usare questo codice per ottenere le informazioni del registro.

Tutte le istanze installate devono essere visualizzate nello snap-in Servizi nella console di gestione Microsoft. Per ottenere i nomi delle istanze, vai su Start | Esegui | digitare Services.msc e cercare tutte le voci con " Sql Server (nome istanza) " ;.

- Query T-SQL per trovare un elenco di istanze installate su una macchina

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 

Se vuoi solo vedere cosa è installato sul computer a cui sei attualmente connesso, penso che il processo manuale più semplice sia aprire semplicemente Gestione configurazione SQL Server (dal menu Start), che mostra tutto l'SQL Servizi (e solo servizi SQL) su quell'hardware (in esecuzione o meno). Ciò presuppone che SQL Server 2005 o versione successiva; La raccomandazione di dotnetengineer di utilizzare la console di gestione dei servizi ti mostrerà tutti i servizi e dovrebbe essere sempre disponibile (ad esempio, se stai utilizzando versioni precedenti di SQL Server).

Se stai cercando un processo di rilevamento più ampio, tuttavia, potresti prendere in considerazione strumenti di terze parti come SQLRecon e SQLPing, che eseguiranno la scansione della tua rete e costruiranno un rapporto di tutte le istanze del servizio SQL trovate su qualsiasi server su cui hanno accesso. È da un po 'che non uso strumenti come questo, ma sono rimasto sorpreso da ciò che hanno trovato (vale a dire, una manciata di casi che non sapevo esistessero). YMMV. Potresti Google per i dettagli, ma credo che questa pagina abbia i download pertinenti: http://www.sqlsecurity.com/Tools/FreeTools/tabid/65/Default.aspx

So che questo thread è un po 'vecchio, ma mi sono imbattuto in questo thread prima di trovare la risposta che stavo cercando e ho pensato di condividere. Se stai usando SQLExpress (o localdb) c'è un modo più semplice per trovare i nomi delle tue istanze. A una riga di comando digitare:

> sqllocaldb i

Verranno elencati i nomi di istanza installati localmente. Quindi il tuo nome completo del server dovrebbe includere (localdb) \ davanti al nome dell'istanza per connetterti. Inoltre, sqllocaldb consente di creare nuove istanze o eliminarle e configurarle. Vedi: Utilità SqlLocalDB .

SQL Server consente alle applicazioni di trovare istanze di SQL Server all'interno della rete corrente. La classe SqlDataSourceEnumerator espone queste informazioni allo sviluppatore dell'applicazione, fornendo una DataTable contenente informazioni su tutti i server visibili. Questa tabella restituita contiene un elenco di istanze del server disponibili sulla rete che corrisponde all'elenco fornito quando un utente tenta di creare una nuova connessione ed espande l'elenco a discesa contenente tutti i server disponibili nella finestra di dialogo Proprietà connessione. I risultati visualizzati non sono sempre completi. Per recuperare la tabella contenente informazioni sulle istanze disponibili di SQL Server, è necessario innanzitutto recuperare un enumeratore, utilizzando la proprietà Instance condivisa / statica:

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("============================");
    }
  }
}

da msdn http://msdn.microsoft .com / it-it / library / a6t1z9x2 (v = vs.80) aspx

Dalla riga di comando di Windows, digitare:

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

Dove " nome_server " è il nome di qualsiasi server remoto su cui si desidera visualizzare le istanze SQL.

Ciò richiede ovviamente sufficienti permessi.

Se sei interessato a determinarlo in uno script, puoi provare quanto segue:

sc \\server_name query | grep MSSQL

Nota: grep fa parte degli strumenti gnuwin32

Ho avuto lo stesso problema. L '"osql -L" il comando visualizzava solo un elenco di server ma senza nomi di istanza (era visualizzata solo l'istanza del mio server SQL locale). Con Wireshark, sqlbrowser.exe (che può essere trovato nella cartella condivisa dell'installazione SQL) ho trovato una soluzione al mio problema.

L'istanza locale è stata risolta dalla voce di registro. Le istanze remote vengono risolte dalla trasmissione UDP (porta 1434) e SMB. Usa " sqlbrowser.exe -c " per elencare le richieste.

La mia configurazione utilizza 1 adattatori di rete fisici e 3 virtuali. Se avessi usato " osql -L " comando sqlbrowser ha visualizzato una richiesta da una delle schede virtuali (che si trova in un altro segmento di rete), anziché da quella fisica. osql seleziona l'adattatore in base alla sua metrica. Puoi visualizzare la metrica con il comando " route print " ;. Per la mia configurazione, la tabella di routing mostrava una metrica inferiore per l'adattatore virtuale e poi per quello fisico. Quindi ho modificato la metrica dell'interfaccia nelle proprietà della rete deselezionando la metrica automatica nelle impostazioni di rete avanzate. osql ora utilizza l'adattatore fisico.

Questa query dovrebbe ottenere il nome del server e il nome dell'istanza:

SELECT @@SERVERNAME, @@SERVICENAME

Ho appena installato il server SQL 2008, ma non sono riuscito a collegarmi a nessuna istanza di database. I comandi @G Mastros non hanno elencato istanze attive.

Quindi ho cercato nei servizi e ho scoperto che l'agente SQL Server era disabilitato. L'ho risolto impostandolo su automatico e quindi avviandolo.

Ho avuto lo stesso problema durante la valutazione di oltre 100 server, avevo uno script scritto in C # per sfogliare i nomi dei servizi costituiti da SQL. Quando le istanze sono installate sul server, SQL Server aggiunge un servizio per ogni istanza con il nome del servizio. Può variare per diverse versioni come 2000-2008 ma sicuramente esiste un servizio con nome di istanza.

Prendo il nome del servizio e ottengo il nome dell'istanza dal nome del servizio. Ecco il codice di esempio utilizzato con WMI Query Result:

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);
                    }

Ecco un metodo semplice: vai a Inizia quindi Programmi quindi Microsoft SQL Server 2005 quindi Strumenti di configurazione quindi Gestione configurazione SQL Server quindi Configurazione di rete di SQL Server 2005 quindi Qui puoi trovare tutte le istanze installate sul tuo computer.

Se sei all'interno di SSMS potresti trovare più facile da usare:

SELECT @@Version

So che è un vecchio post, ma ho trovato una buona soluzione con PoweShell in cui puoi trovare istanze SQL installate su un computer locale o remoto inclusa la versione ed essere estesa estendere altre proprietà.

$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 = 

So che è un vecchio post, ma ho trovato una buona soluzione con PoweShell in cui puoi trovare istanze SQL installate su un computer locale o remoto inclusa la versione ed essere estesa estendere altre proprietà.

<*> ; $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}

Un'altra opzione sarebbe quella di eseguire il rapporto di rilevamento di SQLSERVER ... vai al supporto di installazione di sqlserver e fai doppio clic su setup.exe

 inserisci qui la descrizione dell'immagine

e nella schermata successiva, vai su strumenti e fai clic sul rapporto di scoperta come mostrato di seguito

 inserisci qui la descrizione dell'immagine

Questo ti mostrerà tutte le istanze presenti insieme a intere funzionalità ... sotto è un'istantanea sul mio pc inserisci qui la descrizione dell'immagine

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top