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

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

Ответ 1

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

SQLCMD -L

или

OSQL -L

(Примечание: должен быть капитал L)

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

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

svrnetcn

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

Ответ 2

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

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

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

Чтобы увидеть ваше имя экземпляра:

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

Затем выполните следующее:

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

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

Ответ 3

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

Ответ 4

- Запрос 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 

Ответ 5

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

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

Ответ 6

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

> sqllocaldb i

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

Ответ 7

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=vs.80).aspx

Ответ 9

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

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

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

Для этого требуется достаточное количество разрешений.

Ответ 10

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

sc \\server_name query | grep MSSQL

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

Ответ 11

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

Локальный экземпляр разрешен вводом реестра. Удаленные экземпляры разрешаются посредством широковещательной передачи UDP (порт 1434) и SMB. Используйте "sqlbrowser.exe -c", чтобы перечислить запросы.

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

Ответ 12

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

SELECT @@SERVERNAME, @@SERVICENAME

Ответ 13

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

Итак, я просмотрел службы и обнаружил, что агент SQL-сервера отключен. Я исправил его, установив его в автоматическом режиме, а затем запустив его.

Ответ 14

У меня была такая же проблема, когда я оценивал более 100 серверов, у меня был script написанный на С# для просмотра имен служб, состоящих из 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);
                    }

Ответ 15

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

Ответ 16

Если вы используете SSMS, вам может быть проще использовать:

SELECT @@Version

Ответ 17

Я знаю его старый пост, но я нашел хорошее решение с 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}

Ответ 18

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

.enter image description here

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

enter image description here

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

Ответ 19

Команды OSQL -L и SQLCMD -L покажут вам все экземпляры в сети.

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

  1. Запустите диспетчер задач Windows
  2. Установите флажок "Показывать процессы от всех пользователей" или эквивалентный
  3. Сортировать процессы по "Имени изображения"
  4. Найдите все изображения sqlsrvr.exe

Экземпляры должны быть перечислены в столбце "Имя пользователя" как MSSQL$INSTANCE_NAME.

И я перешел от мысли, что на плохом сервере было запущено 63 экземпляра, и понял, что на нем запущено три сервера (из которых один вел себя как хулиган с нагрузкой на процессор...)