Как найти все sql серверы в сети

  • Remove From My Forums
  • Вопрос

  • Добрый день.

    Необходимо найти все компьютеры на которых установлен SQL-сервер (желательно с именами экземпляров).

    Для этих целей нашел замечательную утилиту “Microsoft Assessment and Planning (MAP) Toolkit” (текущая версия 8.0 , 8.5 beta)

    http://technet.microsoft.com/en-us/solutionaccelerators/dd537566.aspx

    Но к сожалению она ищет только SQL 20082012 , а вот поиск SQL 2005 не предусмотрен.

    PS: Видимо утилита “свежая” и более ранние версии так же не поддерживают поиск 2005-версии плюс ссылки ведут на все ту же последнюю версию 8.0

    Есть различные сканеры (по портам). Но хотелось бы воспользоваться утилитой непосредственно предназначенной для поиск и составления отчетов о SQL-серверах.

    Кто знает такие подскажите пожалуйста.

    • Изменено

      17 июня 2014 г. 6:24

Ответы

    • Помечено в качестве ответа
      Frenzy from DP
      17 июня 2014 г. 6:23
  • Почему то часто забывают solution accelerators от MS

    Тот же
    MAP покажет Вам в отчете (Excel) количество SQL , версия и т.д=полная инвентаризация. и не только SQL.

    Native-софтом рекомендуется пользоваться. Сторонний, – если native не несет функционала нужного


    Roman Levchenko, MCSA, MCITP, MCTS http://www.rlevchenko.com

    • Изменено
      R.LevchenkoMVP
      17 июня 2014 г. 7:12
    • Предложено в качестве ответа
      R.LevchenkoMVP
      17 июня 2014 г. 7:12
    • Помечено в качестве ответа
      Иван ПродановMicrosoft contingent staff, Moderator
      17 июня 2014 г. 7:35

Searching for and cataloging the SQL server instances on your network is a key part of Administration. Powershell offers some quick and simple methods to find servers base on the their name or description in Active Directory. We can use the Powershell module to collect these servers and add them to a CSV file or a SQL table updated regularly.

In our example we will be looking for all of the SQL servers in Active Directory based on their Name or Description and then run some remote code to grab the SQL instances. Our assumption here is that you have implemented some level of Server naming convention and/or kept your AD Descriptions accurate.

The Active Directory module is not installed by default, at least not on Windows 10. You may need to install the tools called RSAT to make this module available. To see if it is already installed you can simple run the Import-Module command.

Install The Active Directory Module

Import-module -Name ActiveDirectory

Install Remote Server Administrative Tools (RSAT)

I was going to add screenshots and a walk through on how to add RSAT through the Control Panel -> Windows Features screen but then I found a Powershell method to do this,.. so much easier.

You will need to import the ServerManager module first to Add Windows Features, Use the following to do so in a Powershell window.

Import-Module -Name ServerManager
Add-WindowsFeature -Name "RSAT-AD-PowerShell" –IncludeAllSubFeature
Import-module -Name ActiveDirectory

Query Active Directory Using Powershell

With the AD module imported we now have access to the Get-ADComputer cmdlet. This will provide the details from Active Directory and allow us to filter the results based on our search criteria. Begin with a simple search looking for the Windows Operating system.

Get-ADComputer -Filter 'operatingSystem -like "*Windows *"' -Properties *

In this command we are filtering based on the “OperatingSystem” property of the AD object. You will notice we are using the asterisk to search for text that “contains” Windows. Change this to filter based on the Windows version if need be. We are also using the asterisk for the “-Properties” command switch so the search includes all properties in AD.

At this point we us the Pipeline and pipe the results to a Where-Object cmdlet to filter the results based on the “Name” or “Description” properties in Active Directory. As stated before the key to this search being useful is that the server naming convention or Description includes “SQL” in it’s text.

Change the ‘*SQL*’ to search for your naming convention or use it to further filter Production or Test servers based on their Name.

 Get-ADComputer -Filter 'operatingSystem -like "*Windows *"' -Properties * |
 where {$_.Name -like '*SQL*' -or $_.CN -like '*SQL*' -or $_.Description -like '*SQL*'} 

Since the command can take a long time depending your network size, we can assign the results to a variable that will stay populated as long as your Powershell session is active.

$SQLServers = Get-ADComputer -Filter 'operatingSystem -like "*Windows *"' -Properties * |
 where {$_.Name -like '*SQL*' -or $_.CN -like '*SQL*' -or $_.Description -like '*SQL*'} 

When this command completes, the $SQLServers variable can be piped to filter further or display. Pipe the results to a basic Select-Object cmdlet like this

Note: Be sure to highlight and then Run using the “Run Selection” (F8) instead of “Run Script” (F5).

$SQLServers | Select -Property Name,DNSHostName,operatingSystem, Description
$SQLServers | format-table -AutoSize
$SQLServers | Out-Gridview

Get SQL Instances On Remote Server

Now that we have a list of the Servers that should contain a SQL Service we can connect to each and find the SQL services and their instances. This code applies to a single static server but can be used inside a ForEach loop to go through the above results and collect SQL instances from each server.

This method can be applied to any service on the machine but we are focusing on SQL Instances here. The default SQL instance is called “MSSQLServer” and any named instances are prefaced with “MSSQL$” and the Instance name.

Get-Service -ComputerName VMDESKTOP3 | 
Where-Object { ($_.Name -eq 'mssqlserver' -or $_.Name -like 'mssql$*') -and $_.DisplayName -like 'SQL Server*'}

Take note of the Where-Object syntax as some will get confused grouping their “Equal, Like, And’s and Or’s”. The parenthesis allows us to group the filter as Equal to “MSSQLSERVER” or Like “MSSQL$” and the brackets enclose the full WHERE cmdlet.


      В данной статье рассмотрим два варианта получения доступных в сети SQL серверов.

  • С использованием стандартного класса «SqlDataSourceEnumerator» из Microsoft Net. Fraemwork; 
  • С использованием WinAPI.

1)      Для получения доступных SQL серверов на локальном компьютере или в сети необходимо воспользоваться классом «SqlDataSourceEnumerator», который обеспечивает доступ к этим сведениям, предоставляя объект «DataTable» с данными обо всех видимых серверах. Для этого необходимо вызвать метод «GetDataSources», который возвращает таблицу «DataTable» со сведениями о доступных серверах:

DataTable dt = System.Data.Sql.SqlDataSourceEnumerator.Instance.GetDataSources()

      Таблица, возвращенная в результате вызова этого метода, содержит следующие столбцы, причем все эти столбцы содержат значения «string».

  • «ServerName» – Имя сервера.
  • «InstanceName» – Имя экземпляра сервера. Пуст, если сервер выполняется как используемый по умолчанию экземпляр.
  • «IsClustered» – Указывает, является ли сервер частью кластера.
  • «Version» – Версия сервера.

      Сведения о серверах из списка могут включать или не включать такие дополнительные данные, как «IsClustered» и версия (Version). Это зависит от того, каким образом был получен список. В списках серверов, полученных с помощью службы обозревателя «SQL Server», присутствует больше сведений, чем в списках серверов, найденных с помощью инфраструктуры Windows и содержащих только имена.
      Так же из-за особенностей механизма, используемого «SqlDataSourceEnumerator» для поиска источников данных в сети, этот метод не всегда возвращает полный список доступных серверов, и для последовательных вызовов содержимое списка может изменяться в зависимости от таких факторов, как время ожидания и сетевой трафик. Это может привести к тому, что при двух последовательных вызовах будут получены разные списки. В список входят только серверы, находящиеся в одной сети. 
Широковещательные пакеты обычно не проходят через маршрутизаторы, поэтому некоторый сервер может отсутствовать в списке, но будет стабильно работать.
      Если вы планируете применять данную функцию, чтобы дать возможность пользователю выбрать сервер из списка, обязательно предоставляйте пользователю возможность ввести отсутствующее в списке имя сервера на случай, если перечисление вернет не все доступные серверы.
      Кроме того, этот метод может выполняться довольно долго, поэтому в ситуациях, когда приоритетным является быстродействие, пользоваться им следует с осторожностью.

      В «SQL Server 2000» данные для «SqlDataSourceEnumerator» предоставляются внутренним образом. Но в версии «SQL Server 2005» эти сведения предоставляются с использованием внешней службы Windows, называемой обозревателем SQL. Применение этой службы разрешено по умолчанию, но администраторы могут ее выключать или запрещать, в результате чего соответствующий экземпляр сервера становится невидимым для указанного класса. Эта служба применяется только в версии «SQL Server 2005» и не оказывает влияния на поведение «SQL Server 2000». Оборудование и программное обеспечение так же могут налагать свои ограничения на возможность поиска экземпляров «SQL Server».
      Ниже представлен пример получения и вывода сокращенной информации обо всех найденных в сети и (или) локальных SQL серверов в элемент управления «ComboBox» и более полной информации в элемент управления «RichTextBox».

//Переменная для хранения информации о 
//найденных серверах.
string ServerInfo = string.Empty;

//Получение доступных SQL серверов.
DataTable dt = System.Data.Sql.SqlDataSourceEnumerator.Instance.GetDataSources();
foreach (DataRow dr in dt.Rows)
{
    //Вывод найденной информации о серверах
    //в элемент управления СomboBox.
    comboBox1.Items.Add(string.Concat(dr["ServerName"], "\", dr["InstanceName"]));

    //Добавление пустой строки после получения 
    //информации о сервере
    foreach (DataColumn col in dt.Columns)
    {
        ServerInfo += String.Format("{0,-15}: {1}", col.ColumnName, dr[col]) + Environment.NewLine;
    }

    //Добавление пустой строки после получения 
    //информации о сервере.
    ServerInfo += Environment.NewLine;                
}

//Вывод найденной информации о серверах
//в элемент управления RichTextBox.
richTextBox1.Text = ServerInfo;

2)      В данном примере необходимо добавить класс «SqlLocator» в листинг формы, где будет выполняться запуск процесса поиска и вывода найденных SQL серверов в сети.

public class SqlLocator
{
[System.Runtime.InteropServices.DllImport("odbc32.dll")]
private static extern short SQLAllocHandle(short hType, IntPtr inputHandle, out IntPtr outputHandle);
[System.Runtime.InteropServices.DllImport("odbc32.dll")]
private static extern short SQLSetEnvAttr(IntPtr henv, int attribute, IntPtr valuePtr, int strLength);
[System.Runtime.InteropServices.DllImport("odbc32.dll")]
private static extern short SQLFreeHandle(short hType, IntPtr handle);
[System.Runtime.InteropServices.DllImport("odbc32.dll", CharSet = System.Runtime.InteropServices.CharSet.Ansi)]
private static extern short SQLBrowseConnect(IntPtr hconn, StringBuilder inString,
 short inStringLength, StringBuilder outString, short outStringLength,
 out short outLengthNeeded);

private const short SQL_HANDLE_ENV = 1;
private const short SQL_HANDLE_DBC = 2;
private const int SQL_ATTR_ODBC_VERSION = 200;
private const int SQL_OV_ODBC3 = 3;
private const short SQL_SUCCESS = 0;

private const short SQL_NEED_DATA = 99;
private const short DEFAULT_RESULT_SIZE = 1024;
private const string SQL_DRIVER_STR = "DRIVER=SQL SERVER";

private SqlLocator() { }

public static string[] GetServers()
{
    string[] retval = null;
    string txt = string.Empty;
    IntPtr henv = IntPtr.Zero;
    IntPtr hconn = IntPtr.Zero;
    StringBuilder inString = new StringBuilder(SQL_DRIVER_STR);
    StringBuilder outString = new StringBuilder(DEFAULT_RESULT_SIZE);
    short inStringLength = (short)inString.Length;
    short lenNeeded = 0;

    try
    {
        if (SQL_SUCCESS == SQLAllocHandle(SQL_HANDLE_ENV, henv, out henv))
        {
            if (SQL_SUCCESS == SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (IntPtr)SQL_OV_ODBC3, 0))
            {
                if (SQL_SUCCESS == SQLAllocHandle(SQL_HANDLE_DBC, henv, out hconn))
                {
                    if (SQL_NEED_DATA == SQLBrowseConnect(hconn, inString, inStringLength, outString,
                     DEFAULT_RESULT_SIZE, out lenNeeded))
                    {
                        if (DEFAULT_RESULT_SIZE < lenNeeded)
                        {
                            outString.Capacity = lenNeeded;
                            if (SQL_NEED_DATA != SQLBrowseConnect(hconn, inString, inStringLength, outString,
                             lenNeeded, out lenNeeded))
                            {
                                throw new ApplicationException("Unabled to aquire SQL Servers from ODBC driver.");
                            }
                        }
                        txt = outString.ToString();
                        int start = txt.IndexOf("{") + 1;
                        int len = txt.IndexOf("}") - start;
                        if ((start > 0) && (len > 0))
                        {
                            txt = txt.Substring(start, len);
                        }
                        else
                        {
                            txt = string.Empty;
                        }
                    }
                }
            }
        }
    }
    catch (Exception ex)
    {                
        #if (DEBUG)
        MessageBox.Show(ex.Message, "Acquire SQL Servier List Error");
        #endif
        txt = string.Empty;
    }
    finally
    {
        if (hconn != IntPtr.Zero)
        {
            SQLFreeHandle(SQL_HANDLE_DBC, hconn);
        }
        if (henv != IntPtr.Zero)
        {
            SQLFreeHandle(SQL_HANDLE_ENV, hconn);
        }
    }

    if (txt.Length > 0)
    {
        retval = txt.Split(",".ToCharArray());
    }

    return retval;
}

     Для получения списка SQL серверов с помощью данного класса необходимо вызвать из него метод «GetServers», который возвращает строковый массив с доступными в сети серверами.

//Предварительно очищаем все элементы управления
//в которые будут выводиться данные
comboBox1.Items.Clear();
richTextBox1.Text = string.Empty;

string[] theAvailableSqlServers = SqlLocator.GetServers();
if (theAvailableSqlServers != null)
{
    comboBox1.DataSource = theAvailableSqlServers;
    foreach (string NameServer in theAvailableSqlServers)
    {
         richTextBox1.Text += NameServer + Environment.NewLine;
    }
}
else
{
    MessageBox.Show("SQL сервера не найдены!");
}

Asked
11 years, 3 months ago

Viewed
502 times

I want to find all the SQL Servers running in the network. I want it find it through a tsql query.

Thanks in advance.

marc_s's user avatar

marc_s

728k174 gold badges1325 silver badges1455 bronze badges

asked Feb 13, 2012 at 15:37

Qinnovator's user avatar

1

T-SQL/SQL is not about queryin the network it about querying a relational data bases. So I believe you’ve to use other approaches.

Useful links:

– Find All Servers From Local Network using sqlcmd

answered Feb 13, 2012 at 15:40

sll's user avatar

sllsll

61.2k22 gold badges104 silver badges156 bronze badges

0

 
tanya
 
(2005-07-29 15:47)
[0]

Как получить список имён серверов MSSQL, имеющихся в локальной сети (D7,ADO,MSSQL).
Нужно, чтобы пользователь из одного окна мог логиниться к разным базам на разных серверах, но при этом поднимать ADO-шные окна подключения или connectionstring совсем ни к чему. Как бы собрать только список имен серверов?


 
Reindeer Moss Eater ©
 
(2005-07-29 15:52)
[1]

Список зарегистрированных в MSSQL-клиенте MSSQL серверов лежит в реестре. Читай отуда.


 
Fay ©
 
(2005-07-29 15:54)
[2]

2 tanya   (29.07.05 15:47)
1) SQL-DMO
2) NetServerEnum


 
Anatoly Podgoretsky ©
 
(2005-07-29 16:35)
[3]

Все найти нельзя, а что клиенту все равно к какому серверу подключаться, лишь бы подключиться.


 
sniknik ©
 
(2005-07-29 17:05)
[4]

Fay ©   (29.07.05 15:54) [2]
+
odbs32.dll SQLBrowseConnect

но все сервера в сети ни один метод не возьмет.


 
AxelBlack
 
(2005-07-29 19:10)
[5]

sniknik ©   (29.07.05 17:05) [4]
+
“SQLOLEDB Enumerator”, хотя он использует NetServerEnum
+
выполнить эту команду с уже законнектенного сервера: “exec master..xp_cmdshell “osql -L””


 
tanya
 
(2005-08-30 18:11)
[6]

Что пробовала:

1) SQLDMO.ListAvailableSQLServers – к сожалению возвращает не только список всех MSSQL серверов, но ещё и до кучи все MSDE подтягивает (это MS desktop engine, они совсем тут ни к чему, но как их исключить я не знаю). И кстати, очень медленно…

2)NetServerEnum (ServType=SV_TYPE_SQLSERVER) – существенно быстрее, но всё равно выдаёт кроме серверов ещё и MSDE :-(. Ну и кроме того выдаёт не имена серверов, а имена компьютеров (а для локальных MS серверов имя должно формироваться как “имя станциилокальное имя сервера”)

3)odbs32.dll SQLBrowseConnect – НЕ пробовала. Смущает то, что в настройках DSN при выборе сервера предлагается всё тот же список с кучей не нужных MSDE. Думаю, что это список и вернёт SQLBrowseConnect…

4)”exec master..xp_cmdshell “osql -L”” – та же история с MSDE(правда я параметры совсем не смотрела)

А нужно получить ровно тот список, который предлагается в MS SQL Server Query Analyzer и Enterprice Manager – конкретно серверов.

4)Читать из реестра. Пока это единственный вариант решения, но вот если нашлось бы решение с SQLDMO – это было бы предпочтительнее…
Пока я так поняла, что то, что мне надо – это не AvailableSQLServers, а ServerGroups, но к успеху это меня не привело…

2 Anatoly Podgoretsky
>а что клиенту все равно к какому серверу подключаться,
>лишь бы подключиться.
Клиенту “очень не всё равно” к какому серверу подключиться – очень хочется подключится к совершенно конкретному, а их несколько…Например, есть рабочая база, есть тестовые копии рабочей базы. Структура одинаковая, задачи разные… На одной работать, на другой отлаживаться 🙂 А клиентский интерфейс один…


 
DiamondShark ©
 
(2005-08-30 22:28)
[7]


> к сожалению возвращает не только список всех MSSQL серверов,
> но ещё и до кучи все MSDE подтягивает

И правильно делает, потому что по сетевому интерфейсу они ничем не отличаются.


> одной работать, на другой отлаживаться 🙂 А клиентский
> интерфейс один…

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


 
Sam Stone ©
 
(2005-08-30 23:22)
[8]

А что, пользователи не знают, какой сервер тестовый, а какой рабочий? Или они так часто меняются? Если нет, то можно либо в на каком-либо компе хранить список имеющихся серверов (один раз забить ручками), либо этот список хранить на каждом компе.


 
Anatoly Podgoretsky ©
 
(2005-08-31 00:02)
[9]

tanya   (30.08.05 18:11) [6]
Для этого достаточно держать список в файле, например ИНИ и совсем ни к чему опрашивать сеть. И решишь попутно и другие проблемв с идентификацией, с комментариями, все что посчитаешь нужным. Это позволит иметь удобный пользователю интерфейс.


 
tanya
 
(2005-08-31 11:09)
[10]

2 DiamondShark [7]
>> но ещё и до кучи все MSDE подтягивает
>И правильно делает, потому что по сетевому интерфейсу
>они ничем не отличаются.
И тем не менее MS SQL Server Query Analyzer и Enterprice Manager их очень даже отличают! А именно не показывают MSDE ни в списках выбора, ни в combobox, ни в object browser 🙂 Персональный – так персональный!

2 ALL
Ну конечно, у меня всего два сервера, и я спокойно могу и ввести их имена руками, и считать из ini и т.д. (второй сервер заведён для того, чтобы не грузить рабочий тестовыми задачами).
Т.е. в моём контексте – вопрос спортивный.
НО например, для коммерческих приложений, требовать от пользователя конфигурировать ini, когда можно самому получить нужную информацию, было бы странно.

И, кстати, если интересно, у меня уже что-то получается через SQL-DMO:
очень сильно изначально сбил, предлагаемый всеми в инете метод dmoApp.ListAvailableSQLServers. А сначала надо было самой на объектную модель посмотреть 🙁 И тогда решение получается вложенным циклом –
внешний по dmoApp.ServerGroups
и внутренний по dmoApp.ServerGroups.item(i).RegisteredServers  Ну и тогда имена нужных серверов –
dmoApp.ServerGroups.item(i).RegisteredServers.item(j).Name

(У себя в реестре нужный список нашла в HKEY_CURRENT_USER и в HKEY_USERS в четырёх местах)

Лично я пока остановлюсь на SQLDMO.

И если кто дочитал :-), то у меня ещё один вопрос:
А как формально определить системные DB?
(Хотелось бы ещё из списка выбора баз сервера исключить системные базы)
Я знаю, что их 4 (The system databases are master, model, msdb, and tempdb). И, конечно, могу удалить эти strings из списка.
Но м.б. есть какое-нибудь property на эту тему?


 
Nikolay M. ©
 
(2005-08-31 11:46)
[11]


> НО например, для коммерческих приложений, требовать от пользователя
> конфигурировать ini, когда можно самому получить нужную
> информацию, было бы странно.

Совсем не странно. Diasoft 5NT, например, хоть и является ужасом, летящим на крыльях ночи, но при входе в систему предлагает либо список из ini, либо ввести новый сервер. А вот заставлять юзера каждый раз ждать, пока вы ищете сервера – это  неправильно.


> А как формально определить системные DB?

Смотря что считать “системными”. Например, как видно из результата запроса

SELECT *
FROM master..sysdatabases

база Northwind (если она у вас не удалена) создана пользователем sa примерно в одно и то же время, что и master (при инсталляции сервера). Что есть системная база, а что – нет?


 
paul_k ©
 
(2005-08-31 12:39)
[12]

А ещё модно в Actve Directory порытся.

Nikolay M. ©   (31.08.05 11:46) [11]
Смотря что считать “системными”.

master,tempdb,model
а что ещё?

> НО например, для коммерческих приложений, требовать от
> пользователя конфигурировать ini, когда можно самому
> получить нужную информацию, было бы странно.

ничего странного. У пользователя должен быть специалист, который способен установить сервер, создать базу, установить Вашу программу и сконфигурить необходимые инишки на клиенте.


 
tanya
 
(2005-08-31 12:59)
[13]

2 Nikolay M. [11]
Пока у меня dmoApp.ServerGroups..RegisteredServers.. вполне быстро отрабатывает. Существенно быстрее, чем dmoApp.ListAvailableSQLServers.
Конечно, оценить скорость этой конструкции на различных конфигурациях не могу… Но, есть подозрение что при этом не происходит опроса сети! Подозрение основано на том, что
1. очень быстро;
2. ветки реестра с нужным списком как раз оканчиваются на “Registered Servers XSQL Server Group”
Ну а считывание из реестра – то же, что и из ini (только лучше:-)

>Смотря что считать “системными”.
Из help:
“The system databases are master, model, msdb, and tempdb. The sample databases, pubs and Northwind, are provided as learning tools.”
Я попробовала так:
use master
select dbid, DB_NAME(dbid) AS DBNAME
from sysdatabases where dbid>4

Потому как про первые 4 (системные) можно быть вполне уверенным, что они “первые четыре”. А вот уже две (учебные) вполне могут быть удалены, да и прямой доступ к ним никому не заказан…


 
paul_k ©
 
(2005-08-31 13:05)
[14]

http://www.sql.ru/forum/actualthread.aspx?tid=741&hl=adsi


 
Nikolay M. ©
 
(2005-08-31 13:19)
[15]


> >Смотря что считать “системными”.
> Из help:
> “The system databases are master, model, msdb, and tempdb.
> The sample databases, pubs and Northwind, are provided as
> learning tools.”

Если все так просто, тогда зачем в [10] вопрос о нахождении системных БД?


> paul_k ©   (31.08.05 12:39) [12]
> Смотря что считать “системными”.
> master,tempdb,model
> а что ещё?

msdb.


 
Anatoly Podgoretsky ©
 
(2005-08-31 13:37)
[16]

tanya   (31.08.05 11:09) [10]
НО например, для коммерческих приложений, требовать от пользователя конфигурировать ini, когда можно самому получить нужную информацию, было бы странно.

Мне странным кажется другое, именно предоствлять пользователю случайную недерменированую информацию. Это вопрос серьезный. Если есть сервера, то должен быть и админстратор, который решит на какой сервер устанавливать базу. Вопрос к тому же сильно завязан на безопасность и права, кто это позволит кому то устанвливать базу на сервера.


 
tanya
 
(2005-08-31 14:02)
[17]

2 Nikolay M. [15]

> Если все так просто, тогда зачем в [10] вопрос о нахождении
> системных БД?

Николай, я в [10] спрашивала о наличии у этих объектов какого-нибудь свойства, определяющего, что это системные базы. Но не уточнила, что спрашиваю про свойства, кроме имени 🙂


 
tanya
 
(2005-08-31 14:25)
[18]

2 Anatoly Podgoretsky [16]
Анатолий, я уже извинялась, что в моём случае – вопрос просто спортивный.
Но и комерческие приложения могут быть разными: админские средства, всякие Db explorer… Например, якобы, SQL Server Enterprise Manager “написан на” sqldmo. (люди пишут, что осознав sqldmo они забыли про Enterprise Manager)


> Если есть сервера, то должен быть и админстратор

Я считаю, если какая-то информация однозначно программно определяется в среде без ini, то использование в таких случаях ini – вредная избыточность.
У нас есть админ (именно он перевёл всю мою разработку на второй сервер, а работу оставил на первом :-), НО НЕ ОН отрисовывает мне дерево объектов в Enterprise Manager, или Query Analyzer 🙂
Админу – админово, а “автоматизатору” – всё остальное…


 
Nikolay M. ©
 
(2005-08-31 14:59)
[19]


> tanya   (31.08.05 14:02) [17]
> Николай, я в [10] спрашивала о наличии у этих объектов какого-нибудь
> свойства, определяющего, что это системные базы. Но не уточнила,
> что спрашиваю про свойства, кроме имени 🙂

AFAIK, у базы такого свойства нет.


 
Nikolay M. ©
 
(2005-08-31 14:59)
[20]


> tanya   (31.08.05 14:02) [17]
> Николай, я в [10] спрашивала о наличии у этих объектов какого-нибудь
> свойства, определяющего, что это системные базы. Но не уточнила,
> что спрашиваю про свойства, кроме имени 🙂

AFAIK, у базы такого свойства нет.


 
Anatoly Podgoretsky ©
 
(2005-08-31 15:46)
[21]

tanya   (31.08.05 14:25) [18]
Ну разве про подобное я спорю, ты просто по ходу уточняешь задачу. Если речь про пользователей то это одно, а инструмент для администраторов это другое. Я говорю про первое. Не надо пользователю вываливать список всех доступных серверов, ему лучше дать список только нужного и с комментарием характеристикой.


 
tanya
 
(2005-08-31 19:10)
[22]

Да я, в общем то, со всеми замечаниями согласна. Пользователю надо предоставлять только интерфейс к регламентированным его работой функциям.
Но хотеть знать, как оно всё устроено, не вредно?
А я в результате этого длинного обсуждения кое-что для себя узнала, да задачу свою решила.

Всем спасибо!


Добавить комментарий