Я пытаюсь определить, какие экземпляры sql server / sql express я установил (вручную или программно), но все примеры подсказывают мне выполнить запрос SQL, чтобы определить, что предполагает, что я уже подключен к определенному экземпляру. ,
Я пытаюсь определить, какие экземпляры sql server / sql express я установил (вручную или программно), но все примеры подсказывают мне выполнить запрос SQL, чтобы определить, что предполагает, что я уже подключен к определенному экземпляру. ,
Ответы:
В командной строке:
SQLCMD -L
или
OSQL -L
(Примечание: должен быть заглавной буквы L)
Это перечислит все серверы sql, установленные в вашей сети. Существуют параметры конфигурации, которые можно настроить для предотвращения отображения SQL Server в списке. Сделать это...
В командной строке:
svrnetcn
В списке включенных протоколов выберите «TCP / IP», затем нажмите «Свойства». Есть флажок «Скрыть сервер».
C:\> sqllocaldb i
Вы можете запросить это значение реестра, чтобы получить версию 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. Чтобы получить имена экземпляров, перейдите в Пуск | Запустить | введите Services.msc и найдите все записи с «Sql Server (имя экземпляра)».
Get-Service | ?{ $_.Name -like "MSSQL*" }
- T-SQL Query для поиска списка экземпляров, установленных на компьютере
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
sa
не так ли?
Я знаю, что эта ветка немного старая, но я натолкнулся на эту ветку, прежде чем нашел ответ, который искал, и подумал, что поделюсь. Если вы используете SQLExpress (или localdb), существует более простой способ найти имена ваших экземпляров. В командной строке введите:
> sqllocaldb i
Это перечислит имена экземпляров, которые вы установили локально. Таким образом, ваше полное имя сервера должно включать (localdb) \ перед именем экземпляра для подключения. Кроме того, sqllocaldb позволяет создавать новые экземпляры или удалять их, а также настраивать их. Смотрите: SqlLocalDB Utility .
Если вы просто хотите посмотреть, что установлено на компьютере, на котором вы в данный момент вошли, я думаю, что самый простой ручной процесс - это просто открыть диспетчер конфигурации 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
SQL Server позволяет приложениям находить экземпляры SQL Server в текущей сети. Класс SqlDataSourceEnumerator предоставляет эту информацию разработчику приложения, предоставляя DataTable, содержащий информацию обо всех видимых серверах. Эта возвращенная таблица содержит список доступных в сети экземпляров серверов, который соответствует списку, предоставленному при попытке пользователя создать новое соединение, и расширяет раскрывающийся список, содержащий все доступные серверы в диалоговом окне «Свойства соединения». Отображаемые результаты не всегда полны. Чтобы получить таблицу, содержащую информацию о доступных экземплярах SQL Server, вы должны сначала получить перечислитель, используя свойство общего / статического экземпляра:
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
SqlDataSourceEnumerator
еще не реализован, но находится в списке, который будет добавлен в соответствии с проблемой GitHub .
Служба браузера SQL Server http://msdn.microsoft.com/en-us/library/ms181087.aspx
Если вы заинтересованы в определении этого в сценарии, вы можете попробовать следующее:
sc \\server_name query | grep MSSQL
Примечание: grep является частью инструментов gnuwin32
findstr
вместо grep
этого.
В командной строке Windows введите:
SC \\server_name query | find /I "SQL Server ("
Где «имя_сервера» - это имя любого удаленного сервера, на котором вы хотите отобразить экземпляры SQL.
Это требует достаточных разрешений, конечно.
Этот запрос должен получить вам имя сервера и имя экземпляра:
SELECT @@SERVERNAME, @@SERVICENAME
У меня такая же проблема. Команда «osql -L» отображала только список серверов, но без имен экземпляров (отображался только экземпляр моего локального сервера SQL). С Wireshark, sqlbrowser.exe (который может быть найден в общей папке вашей установки SQL) я нашел решение для моей проблемы.
Локальный экземпляр разрешается с помощью записи реестра. Удаленные экземпляры разрешаются с помощью широковещательной рассылки UDP (порт 1434) и SMB. Используйте «sqlbrowser.exe -c» для вывода списка запросов.
Моя конфигурация использует 1 физический и 3 виртуальных сетевых адаптера. Если я использовал команду «osql -L», sqlbrowser отображал запрос от одного из виртуальных адаптеров (который находится в другом сегменте сети) вместо физического. osql выбирает adpater по его метрике. Вы можете увидеть метрику с помощью команды «Печать маршрута». Для моей конфигурации таблица маршрутизации показала меньшую метрику для виртуального адаптера, чем для физического. Поэтому я изменил метрику интерфейса в свойствах сети, отменив автоматическую метрику в дополнительных настройках сети. osql теперь использует физический адаптер.
Еще один вариант - запустить отчет об обнаружении SQLSERVER. Перейдите на установочный носитель sqlserver и дважды щелкните файл setup.exe.
и на следующем экране перейдите к инструментам и нажмите отчет об обнаружении, как показано ниже
Это покажет вам все имеющиеся экземпляры вместе со всеми функциями .. ниже приведен снимок на моем компьютере
Я только что установил Sql server 2008, но мне не удалось подключиться ни к одному экземпляру базы данных. Команды @G Mastros размещены в списке нет активных экземпляров.
Поэтому я посмотрел в службах и обнаружил, что агент сервера SQL был отключен. Я исправил это, установив его на автоматический, а затем запустив.
У меня была такая же проблема, когда я оценивал более 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», затем. Здесь можно найти все экземпляры, установленные на вашем компьютере.
Я знаю, это старый пост, но я нашел хорошее решение с помощью 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}
Команды OSQL -L
и SQLCMD -L
покажут вам все экземпляры в сети .
Если вы хотите иметь список всех экземпляров на сервере и не хотите создавать сценарии или программировать, сделайте следующее:
sqlsrvr.exe
изображенияЭкземпляры должны быть перечислены в столбце «Имя пользователя» как MSSQL$INSTANCE_NAME
.
И я подумал, что на плохом сервере было запущено 63 экземпляра, и понял, что на нем запущено три сервера (из которых один вел себя как полный хулиган с нагрузкой на процессор ...)