Как определить установленные экземпляры SQL Server и их версии? - PullRequest
211 голосов
/ 26 сентября 2008

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

Ответы [ 18 ]

2 голосов
/ 22 декабря 2010

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

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

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

2 голосов
/ 22 августа 2012

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

SELECT @@SERVERNAME, @@SERVICENAME
1 голос
/ 28 марта 2013

У меня была такая же проблема, когда я оценивал более 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);
                    }
1 голос
/ 14 декабря 2011

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

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

0 голосов
/ 16 января 2018

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

enter image description here

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

enter image description here

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

0 голосов
/ 01 декабря 2016

Я знаю, что это старый пост, но я нашел хорошее решение с 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}
0 голосов
/ 07 сентября 2015

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

SELECT @@Version
0 голосов
/ 24 июля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...