كيف يمكنني تحديد مثيلات SQL Server المثبتة وإصداراتها؟

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

  •  02-07-2019
  •  | 
  •  

سؤال

أحاول تحديد مثيلات sql server/sql Express التي قمت بتثبيتها (إما يدويًا أو برمجيًا) ولكن جميع الأمثلة تطلب مني تشغيل استعلام SQL لتحديد ذلك والذي يفترض أنني متصل بالفعل بمثيل معين .

هل كانت مفيدة؟

المحلول

في سطر الأوامر:

SQLCMD -L

أو

OSQL -L

(ملحوظة:يجب أن يكون بحرف كبير L)

سيؤدي هذا إلى سرد جميع خوادم SQL المثبتة على شبكتك.توجد خيارات تكوين يمكنك تعيينها لمنع ظهور SQL Server في القائمة.لفعل هذا...

في سطر الأوامر:

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.للحصول على أسماء المثيلات ، انتقل إلى البدء | تشغيل | اكتب 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 Configuration Manager (من القائمة "ابدأ")، والذي يعرض جميع خدمات SQL (و فقط خدمات SQL) على هذا الجهاز (سواء كان يعمل أم لا).يفترض هذا أن يكون SQL Server 2005 أو أحدث؛ com.dotnetengineerستعرض لك توصية استخدام وحدة التحكم في إدارة الخدمات جميع الخدمات، ويجب أن تكون متاحة دائمًا (إذا كنت تقوم بتشغيل إصدارات سابقة من SQL Server، على سبيل المثال).

ومع ذلك، إذا كنت تبحث عن عملية اكتشاف أوسع، فقد تفكر في أدوات الجهات الخارجية مثل SQLRecon وSQLPing، والتي ستقوم بفحص شبكتك وإنشاء تقرير بجميع مثيلات خدمة SQL الموجودة على أي خادم يمكنهم الوصول إليه.لقد مر وقت طويل منذ أن استخدمت أدوات مثل هذه، ولكنني فوجئت بما وجدوه (على وجه التحديد، عدد قليل من الحالات التي لم أكن أعلم بوجودها).YMMV.يمكنك البحث في Google للحصول على التفاصيل، لكنني أعتقد أن هذه الصفحة تحتوي على التنزيلات ذات الصلة: http://www.sqlsecurity.com/Tools/FreeTools/tabid/65/Default.aspx

أعلم أن هذا الموضوع قديم بعض الشيء، لكنني صادفت هذا الموضوع قبل أن أجد الإجابة التي كنت أبحث عنها واعتقدت أنني سأشاركها.إذا كنت تستخدم SQLExpress (أو localdb)، فهناك طريقة أبسط للعثور على أسماء المثيلات الخاصة بك.في نوع سطر الأوامر:

> sqllocaldb i

سيؤدي هذا إلى سرد أسماء المثيلات التي قمت بتثبيتها محليًا.لذلك يجب أن يتضمن اسم الخادم الكامل الخاص بك (localdb)\ أمام اسم المثيل للاتصال.كما يسمح لك sqllocaldb بإنشاء مثيلات جديدة أو حذفها بالإضافة إلى تكوينها.يرى: الأداة المساعدة SqlLocalDB.

يسمح 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("============================");
    }
  }
}

من ام اس دي ان http://msdn.microsoft.com/en-us/library/a6t1z9x2(v=vs.80).aspx

من سطر أوامر Windows، اكتب:

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

حيث "server_name" هو اسم أي خادم بعيد ترغب في عرض مثيلات SQL عليه.

وهذا يتطلب أذونات كافية بالطبع.

إذا كنت مهتمًا بتحديد ذلك في برنامج نصي، فيمكنك تجربة ما يلي:

sc \\server_name query | grep MSSQL

ملحوظة:grep جزء من أدوات gnuwin32

كان لي نفس المشكلة.يعرض الأمر "osql -L" قائمة بالخوادم فقط ولكن بدون أسماء المثيلات (تم عرض مثيل SQL Sever المحلي الخاص بي فقط).باستخدام Wireshark، وجدت sqlbrowser.exe (الذي يمكن العثور عليه في المجلد المشترك الخاص بتثبيت SQL الخاص بك) حلاً لمشكلتي.

يتم حل المثيل المحلي عن طريق إدخال التسجيل.يتم حل المثيلات البعيدة عن طريق بث UDP (المنفذ 1434) وSMB.استخدم "sqlbrowser.exe -c" لسرد الطلبات.

يستخدم التكوين الخاص بي محول شبكة فعليًا و3 محولات شبكة افتراضية.إذا استخدمت الأمر "osql -L"، فسيعرض sqlbrowser طلبًا من أحد المحولات الافتراضية (الموجودة في مقطع شبكة آخر)، بدلاً من الطلب الفعلي.يقوم osql باختيار adpater من خلال مقياسه.يمكنك رؤية المقياس باستخدام الأمر "Route print".بالنسبة للتكوين الخاص بي، أظهر جدول التوجيه مقياسًا أقل للمحول الظاهري مقارنةً بالمحول الفعلي.لذلك قمت بتغيير قياس الواجهة في خصائص الشبكة عن طريق إلغاء تحديد القياس التلقائي في إعدادات الشبكة المتقدمة.يستخدم osql الآن المحول الفعلي.

يجب أن يمنحك هذا الاستعلام اسم الخادم واسم المثيل:

SELECT @@SERVERNAME, @@SERVICENAME

لقد قمت للتو بتثبيت 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 Configuration Manager ثم تكوين شبكة 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