Как определить установленные экземпляры SQL Server и их версии?

Я пытаюсь определить, какие экземпляры sql server / sql express я установил (вручную или программно), но все примеры говорят мне запустить SQL-запрос, чтобы определить это, что предполагает, что я уже подключен к определенному экземпляру.

18 ответов


в командной строке:

SQLCMD -L

или

OSQL -L

(Примечание: должна быть заглавная L)

в этом списке будут перечислены все серверы sql, установленные в вашей сети. Существуют параметры конфигурации, которые можно задать для предотвращения отображения SQL Server в списке. Сделать это...

в командной строке:

svrnetcn

в списке включенные протоколы выберите "TCP / IP", затем нажмите кнопку Свойства. Существует флажок "скрыть сервер".


вы можете запросить это значение реестра, чтобы получить версию SQL напрямую:

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

кроме того, вы можете запросить имя экземпляра, а затем использовать sqlcmd с именем экземпляра, которое вы хотели бы:

чтобы увидеть свое имя пример:

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

затем выполнить это:

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

если вы используете C++ , вы можете использовать этот код для получения информации реестра.


все установленные экземпляры должны отображаться в оснастке "службы" в консоли управления Microsoft. Чтобы получить имена экземпляров, перейдите в меню Пуск | запуск / тип служб.msc и найдите все записи с " Sql Server (имя экземпляра)".


-- T-SQL запрос для поиска списка экземпляров, установленных на компьютере

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 

Если вы просто хотите увидеть, что установлено на компьютере, в который вы вошли, я думаю, что самый простой ручной процесс - просто открыть Диспетчер конфигурации SQL Server (из меню "Пуск"), который отображает все службы SQL (и только SQL services) на этом оборудовании (работает или нет). Это предполагает SQL Server 2005 или выше;dotnetengineer's рекомендация использовать консоль управления службами покажет вам все службы, и всегда должен быть доступен (например, если вы используете более ранние версии SQL Server).

однако, если вы ищете более широкий процесс обнаружения, вы можете рассмотреть сторонние инструменты, такие как SQLRecon и SQLPing, которые будут сканировать вашу сеть и создавать отчет обо всех экземплярах служб SQL, найденных на любом сервере, к которому они имеют доступ. Прошло некоторое время с тех пор, как я использовал такие инструменты, но я был удивлен тем, что они нашли (а именно, несколько случаев, которые я не сделал знать, что существовал). YMMV. Вы можете Google для деталей, но я считаю, что эта страница имеет соответствующие загрузки:http://www.sqlsecurity.com/Tools/FreeTools/tabid/65/Default.aspx


Я знаю, что этот поток немного староват, но я наткнулся на этот поток, прежде чем нашел ответ, который я искал, и думал, что поделюсь. Если вы используете SQLExpress (или localdb), есть более простой способ найти имена экземпляров. В командной строке введите:

> sqllocaldb i

Это будет список имен инстанции установлено локально. Таким образом, ваше полное имя сервера должно включать (localdb)\ перед именем экземпляра для подключения. Кроме того, sqllocaldb позволяет создавать новые экземпляры или удалите их,а также настройте их. См.: Утилита SqlLocalDB.


служба браузера SQL Serverhttp://msdn.microsoft.com/en-us/library/ms181087.aspx


SQL Server позволяет приложениям находить экземпляры SQL Server в текущей сети. Класс SqlDataSourceEnumerator предоставляет эту информацию разработчику приложения, предоставляя объект DataTable, содержащий сведения обо всех видимых серверах. Эта возвращенная таблица содержит список экземпляров сервера, доступных в сети, который соответствует списку, предоставляемому при попытке пользователя создать новое соединение, и расширяет раскрывающийся список, содержащий все доступные серверы на диалоговое окно свойства соединения. Отображаемые результаты не всегда являются полными. Чтобы получить таблицу, содержащую сведения о доступных экземплярах SQL Server, необходимо сначала получить перечислитель, используя свойство shared/static Instance:

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

из msdn http://msdn.microsoft.com/en-us/library/a6t1z9x2 (v=против 80).aspx


Если вы заинтересованы в определении этого в скрипте, вы можете попробовать следующее:

sc \server_name query | grep MSSQL

Примечание: grep является частью gnuwin32 tools


из командной строки Windows, типа:

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

где "имя сервера" - это имя любого удаленного сервера, на котором вы хотите отобразить экземпляры SQL.

это требует достаточно разрешений, конечно.


У меня была та же проблема. Команда" osql-L " отображает только список серверов, но без имен экземпляров (отображается только экземпляр моего локального SQL Sever). С Wireshark, sqlbrowser.exe (который можно найти в общей папке вашей установки SQL) я нашел решение для своей проблемы.

локальный экземпляр разрешен записью реестра. Удаленные экземпляры разрешаются UDP broadcast (порт 1434) и SMB. Использовать "sqlbrowser.EXE-файл -с" в список запросы.

в моей конфигурации используется 1 физический и 3 виртуальных сетевых адаптера. Если я использовал команду" osql-L", sqlbrowser отобразил запрос от одного из виртуальных адаптеров (который находится в другом сегменте Сети) вместо физического. osql выбирает adpater по его метрике. Вы можете увидеть метрику с командой "route print". Для моей конфигурации таблица маршрутизации показала более низкую метрику для виртуального адаптера, а затем для физического. Поэтому я изменил метрику интерфейса в свойства сети путем отмены выбора автоматической метрики в расширенных параметрах сети. osql теперь использует физический адаптер.


этот запрос должен получить имя сервера и имя экземпляра :

SELECT @@SERVERNAME, @@SERVICENAME

У меня была такая же проблема, когда я оценивал 100 + серверов, у меня был сценарий, написанный на C#, чтобы просмотреть имена служб, состоящие из SQL. При установке экземпляров на сервере SQL Server добавляет службу для каждого экземпляра с именем службы. Он может отличаться для разных версий, таких как 2000 до 2008, но наверняка есть служба с именем экземпляра.

Я беру имя службы и получаю имя экземпляра из имени службы. Вот пример кода, используемого с запросом 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$") == 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);
                    }

Если ваш в SSMS вы можете найти его проще в использовании:

SELECT @@Version

Я только что установил Sql server 2008, но мне не удалось подключиться к экземплярам базы данных. В опубликованных командах @G Mastros нет активных экземпляров.

поэтому я посмотрел в службах и обнаружил, что агент SQL server отключен. Я исправил это, установив его на автоматический, а затем запустив его.


вот простой способ: идти к Начнем Затем программы Затем Microsoft SQL Server 2005 Затем Инструменты Настройки Затем диспетчер конфигурации SQL Server Затем конфигурация сети SQL Server 2005 Здесь вы можете найти все экземпляры, установленные на вашем компьютере.


Я знаю его старый пост, но я нашел хорошее решение с PoweShell, где вы можете найти экземпляры SQL, установленные на локальном или удаленном компьютере, включая версию, а также расширить получить другие свойства.

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

еще один вариант-запустить отчет обнаружения SQLSERVER..перейдите на установочный носитель sqlserver и дважды щелкните настройка.exe

enter image description here

и на следующем экране перейдите в сервис и нажмите отчет об обнаружении, как показано ниже

enter image description here

Это покажет вам все экземпляры, присутствующие вместе со всеми функциями..ниже приведен снимок на моем ПК enter image description here