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


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

18 197

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).

http://www.sqlsecurity.com/Tools/FreeTools/tabid/65/Default.aspx

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

> sqllocaldb i

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

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

SQL Server позволяет приложениям находить экземпляры SQL Server в текущей сети. Класс SqlDataSourceEnumerator предоставляет эту информацию разработчику приложения, предоставляя таблицу данных, содержащую сведения обо всех видимых серверах. Эта возвращенная таблица содержит список экземпляров сервера, доступных в сети, который соответствует списку, предоставленному при попытке пользователя создать новое соединение, и раскрывает раскрывающийся список, содержащий все доступные серверы на диалоговое окно свойства соединения. Отображаемые результаты не всегда являются полными. Чтобы получить таблицу, содержащую сведения о доступных экземплярах 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

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

sc \server_name query | grep MSSQL

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

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

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

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

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

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

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

в моей конфигурации используется 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