Pergunta

Eu estou tentando determinar o que as instâncias de servidor SQL / SQL Express Eu instalei (manualmente ou programaticamente), mas todos os exemplos estão me dizendo para executar uma consulta SQL para determinar isso que assume já estou conectado a uma instância particular.

Foi útil?

Solução

Em uma linha de comando:

SQLCMD -L

ou

OSQL -L

(Nota: deve ser um capital L)

Isto irá listar todos os servidores SQL instalados em sua rede. Existem opções de configuração que podem ser configuradas para impedir que um SQL Server de mostrar na lista. Para fazer isso ...

Na linha de comando:

svrnetcn

Na lista de protocolos ativado, selecione 'TCP / IP' e clique em Propriedades. Há uma caixa de seleção para 'Hide servidor'.

Outras dicas

Você pode consultar este valor de registo para obter a versão SQL diretamente:

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

Alternativamente, você pode consultar o nome da instância e depois usar sqlcmd com seu nome instância que você gostaria:

Para ver o nome da instância:

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

Em seguida, execute o seguinte:

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

Se você estiver usando C ++ você pode usar este código para obter as informações de registro.

Todas as instâncias instaladas devem aparecer no snap-in Serviços no Console de Gerenciamento Microsoft. Para obter os nomes de instância, vá para Iniciar | executar | digite Services.msc e olhar para todas as entradas com "Sql Server (Nome da instância)".

- T-SQL consultas para encontrar uma lista de instâncias instaladas em uma máquina

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 você quiser apenas para ver o que está instalado na máquina que você está conectado no momento, acho que o processo manual mais simples é apenas abrir o SQL Server Configuration Manager (a partir do menu Iniciar), que exibe todos os SQL serviços (e apenas / serviços SQL) em que hardware (executando ou não). Isso pressupõe SQL Server 2005, ou superior; dotnetengineer 's recomendação para usar o Console de Gerenciamento de Serviços irá mostrar-lhe todos os serviços, e deve estar sempre disponível (se você estiver executando versões anteriores do SQL Server, por exemplo).

Se você está procurando um processo de descoberta mais amplo, no entanto, você pode considerar ferramentas de terceiros, tais como SQLRecon e SQLPing, que irá varrer sua rede e construir um relatório de todas as instâncias de Serviços SQL encontrado em qualquer servidor ao qual eles têm Acesso. Tem sido um tempo desde que eu ferramentas usadas como este, mas fiquei surpreso com o que encontraram (ou seja, um punhado de casos que eu não sabia que existia). YMMV. Você pode Google para obter mais detalhes, mas acredito que esta página tem as transferências relevantes: http://www.sqlsecurity.com/Tools/FreeTools/tabid/65/Default.aspx

Eu sei que esta discussão é um pouco velho, mas me deparei com esta discussão antes que eu encontrei a resposta que eu estava procurando e pensei que iria partilhar. Se você estiver usando SQLExpress (ou LocalDB) há uma maneira mais simples de encontrar seus nomes de instância. Em um tipo de linha de comando:

> sqllocaldb i

Isto irá listar os nomes de instância que você tem instalados localmente. Portanto, o seu nome completo do servidor deve incluir (LocalDB) \ na frente do nome da instância para se conectar. Além disso, sqllocaldb permite criar novas instâncias ou apagá-los, bem como configurá-los. Veja:. SqlLocalDB Utility

SQL Server permite que aplicativos para encontrar instâncias do SQL Server dentro da rede atual. A classe SqlDataSourceEnumerator expõe essas informações para o desenvolvedor do aplicativo, proporcionando um contendo informações DataTable sobre todos os servidores visíveis. Esta tabela retornada contém uma lista de instâncias de servidor disponíveis na rede que corresponda à lista fornecido quando um usuário tenta criar uma nova conexão, e expande a lista drop-down contendo todos os servidores disponíveis na caixa de diálogo Propriedades de conexão caixa. Os resultados apresentados não são sempre completo. A fim de recuperar a tabela que contém informações sobre as instâncias do SQL Server disponíveis, você deve primeiro obter um enumerador, usando a propriedade Instância compartilhada / estática:

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

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

A partir de linha de comandos do Windows, digite:

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

Onde "server_name" é o nome de qualquer servidor remoto no qual você deseja exibir as instâncias SQL.

Isto requer permissões suficientes, é claro.

Se você está interessado em determinar isso em um script, você pode tentar o seguinte:

sc \\server_name query | grep MSSQL

Nota: grep faz parte de ferramentas GnuWin32

Eu tive o mesmo problema. O comando "-L osql" apresentado apenas uma lista de servidores, mas sem nomes de instância (somente a instância do meu local do SQL Sever foi exibido). Com Wireshark, sqlbrowser.exe (que podem por encontrada na pasta compartilhada de sua instalação SQL) Eu encontrei uma solução para o meu problema.

A instância local é resolvido pela entrada de registo. As instâncias remotas são resolvidos por UDP broadcast (1434) e SMB. Use "sqlbrowser.exe -c" para listar os pedidos.

A minha configuração usa 1 física e 3 adaptadores de rede virtual. Se eu usei o comando "osql -L" o SQLBrowser exibido um pedido de um dos adaptadores virtuais (que está em outro segmento de rede), em vez de um físico. seleciona OSQL a adpater por sua métrica. Você pode ver a métrica com o comando "route print". Para minha configuração da tabela de roteamento mostrou uma menor métrica para teh adaptador virtual, em seguida, para o físico. Então eu mudei a métrica de interface nas propriedades de rede, desmarcando métrica automática nas configurações de rede avançadas. osql agora usa o adaptador físico.

Esta consulta deverá fazê-lo o nome do servidor e nome da instância:

SELECT @@SERVERNAME, @@SERVICENAME

Acabei de instalar servidor SQL Server 2008, mas eu era incapaz de se conectar a todas as instâncias de banco de dados. Os comandos @G Mastros postou listadas há instâncias ativas.

Então eu olhei em serviços e constatou que o agente de servidor SQL foi desativado. Eu fixo-lo, definindo-o como automático e, em seguida, iniciá-lo.

Eu tive esse mesmo problema quando eu estava avaliando 100+ servidores, eu tinha um script escrito em C # para percorrer os nomes de serviços consistem de SQL. Quando casos instalado no servidor, SQL Server adiciona um serviço para cada instância com nome do serviço. Pode variar para diferentes versões como de 2000 a 2008, mas com certeza existe um serviço com o nome instância.

Eu tomo o nome do serviço e obter nome da instância do nome do serviço. Aqui está o código de exemplo usado com WMI consulta Resultado:

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$") == true)
                    {
                        InstanceData.Name = ServiceData.DisplayName.Substring(
                                                ServiceData.DisplayName.IndexOf("$") + 1,
                                                ServiceData.DisplayName.Length - ServiceData.DisplayName.IndexOf("$") - 1
                                            );

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

Aqui está um método simples: vamos para Comece então programas, em seguida, Microsoft SQL Server 2005, em seguida, Ferramentas de configuração, em seguida, SQL Server Configuration Manager, em seguida, Configuração de rede SQL Server 2005, em seguida, Aqui você pode encontrar toda a instância instalada em sua máquina.

Se o seu dentro SSMS que você pode encontrá-lo mais fácil de usar:

SELECT @@Version

Eu sei que é um post antigo, mas eu encontrei uma solução agradável com PoweShell onde pode encontrar instâncias do SQL instalado no local ou uma máquina remota, incluindo a versão e também ser estender obter outras propriedades.

$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 = $_ ; $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}

Mais uma opção seria a de executar SQLSERVER descoberta report..go aos meios de sqlserver e clique duas vezes setup.exe

instalação

enter descrição da imagem aqui

e na próxima tela, vá em Ferramentas e clique relatório descoberta como mostrado abaixo

enter descrição da imagem aqui

Isto irá mostrar todas as instâncias apresentar junto com toda features..below é um instantâneo no meu pc enter descrição da imagem aqui

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top