Я намагаюся визначити, які екземпляри сервера / sql express я встановив (вручну або програмно), але всі приклади дозволяють мені запустити SQL-запит, щоб визначити це, що передбачає, що я вже підключений до конкретного екземпляра .
Я намагаюся визначити, які екземпляри сервера / 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 (ім'я екземпляра)".
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 .
Якщо ви просто хочете побачити, що встановлено на машині, на якій ви зараз увійшли в систему, я вважаю, що найпростішим ручним процесом є просто відкрити менеджер конфігурацій 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 Sever). З Wireshark, sqlbrowser.exe (який можна знайти у спільній папці вашої установки SQL), я знайшов рішення для своєї проблеми.
Локальний примірник вирішується за допомогою запису реєстру. Віддалені екземпляри вирішуються трансляцією UDP (порт 1434) та SMB. Використовуйте "sqlbrowser.exe -c" для списку запитів.
Моя конфігурація використовує 1 фізичний та 3 віртуальні мережні адаптери. Якщо я використовував команду "osql -L", sqlbrowser відображає запит від одного з віртуальних адаптерів (який знаходиться в іншому сегменті мережі), а не фізичного. osql вибирає адаптера за його метрикою. Ви можете побачити показник із командою "print print". Для моєї конфігурації таблиця маршрутизації показала нижчу метрику для віртуального адаптера, а потім для фізичного. Тому я змінив метрику інтерфейсу у властивостях мережі, скасувавши вибір автоматичної метрики в розширених мережевих налаштуваннях. osql тепер використовує фізичний адаптер.
Ще одним варіантом буде запуск звіту про виявлення SQLSERVER .. перехід до інсталяційного носія sqlserver та подвійного клацання setup.exe
а на наступному екрані перейдіть до інструментів та натисніть звіт про виявлення, як показано нижче
Це покаже всі наявні екземпляри разом із усіма функціями. Нижче наведено знімок на моєму ПК
Щойно я встановив сервер Sql 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);
}
Я знаю, що це старий пост, але я знайшов хороше рішення з 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 екземплярами, щоб зрозуміти, що він працює на трьох (з яких один поводився як загальний хуліган із завантаженням процесора ...)