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

StackOverflow https://stackoverflow.com/questions/141154

  •  02-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

SQLCMD -L

или

OSQL -L

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

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

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

svrnetcn

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

Другие советы

Вы могли бы запросить это значение реестра, чтобы напрямую получить версию 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')

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

Все установленные экземпляры должны отображаться в оснастке "Службы" в консоли управления Microsoft.Чтобы получить имена экземпляров, перейдите в Пуск | Run | type Services.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 или выше; инженер- дотнетологрекомендация использовать консоль управления службами покажет вам все службы, которые всегда должны быть доступны (например, если вы используете более ранние версии SQL Server).

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

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

> sqllocaldb i

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

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=против 80).aspx

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

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

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

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

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

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

sc \\server_name query | grep MSSQL

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

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

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

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

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

SELECT @@SERVERNAME, @@SERVICENAME

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

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

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

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

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

SELECT @@Version

Я знаю, что это старый пост, но я нашел хорошее решение с 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 и дважды щелкните setup.exe

enter image description here

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

enter image description here

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top