Kurulu SQL Server örneklerini ve sürümlerini nasıl belirleyebilirim?


224

(El ile veya programlı) sql sunucusu / sql express hangi örnekleri yüklü belirlemeye çalışıyorum ama tüm örnekler bana zaten belirli bir örneğe bağlı olduğum varsayalım belirlemek için bir SQL sorgusu çalıştırmak için söylüyorum .


1
Burada sqlcmd ile nasıl tanımlayacağınız bir bağlantı msdn.microsoft.com/tr-tr/library/ms165662%28v=sql.90%29.aspx

SQL Server Örneklerinizi (Sunucu Adı) ve Sürümlerini
Bulma

bana bahsettiğiniz SQL sorgularını söyleyebilir misiniz?
LearnByReading

1
@LearnByReading Aşağıdaki Muhammed Ifteqar Ahmed'in cevabına bakınız.
Luke

2
Kayıt defterini sorgulayabilirsiniz: pmichaels.net/2016/02/12/…
Paul Michaels

Yanıtlar:


209

Komut satırında:

SQLCMD -L

veya

OSQL -L

(Not: büyük L harfi olmalıdır)

Bu, ağınızda yüklü olan tüm sql sunucularını listeler. Bir SQL Server'ın listede görünmesini önlemek için ayarlayabileceğiniz yapılandırma seçenekleri vardır. Bunu yapmak için...

Komut satırında:

svrnetcn

Etkin protokoller listesinde 'TCP / IP'yi seçin, ardından özellikleri tıklayın. 'Sunucuyu gizle' için bir onay kutusu vardır.


2
Komut satırı seçeneklerini seviyorum, ancak (ağa bağlı olmayan) geliştirici kutumda denediğimde karışık sonuçlar aldım; temelde "sqlcmd -L" sadece SQL Server Tarayıcı Hizmeti çalışıyorsa çalışıyordu. Bu beklenecek mi?
Matt

BASİT ve DÜZ olduğunda SEVİYORUM. Amazon Web Service SQL Server örneği için girmek için doğru sunucu adını bulmakta zorlanıyordum. ThanX
Mehdi LAMRANI

1
Güzel komutlar, ancak bir nedenle hesaplanan bir ağda SQLExpress örneğini algıladı, ancak yerel makinemdeki SQLExpress örneğini algılayamadı.
sparebytes


Deneyin:C:\> sqllocaldb i
Contango

82

SQL sürümünü doğrudan almak için bu kayıt defteri değerini sorgulayabilirsiniz:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\90\Tools\ClientSetup\CurrentVersion

Alternatif olarak, örnek adınızı sorgulayabilir ve sonra örnek adınızla istediğiniz sqlcmd'yi kullanabilirsiniz:

Örnek adınızı görmek için:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names

Ardından şunu yürütün:

SELECT SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')

C ++ kullanıyorsanız, kayıt defteri bilgilerini almak için bu kodu kullanabilirsiniz.


('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition') yalnızca sunucuyu gösterir, yalnızca bir tane çalıştırır, ancak örnekleri çalıştırmaz, ancak durdurulan sunucuları gösterir
Gennady Vanin Геннадий Ванин 13:10

Teşekkürler, sorgu benim için çalıştı. Bir makinem vardı ve varsayılan örnek ve 2008 ve 2008 R2 olan SQL Express örneğini bilmek istedim. Her örneğe bağlandım ve sorguyu çalıştırdım ve bana bir sürüm numarası aldı. O zaman sayıları araştırmak kolaydı.
Meligy

3
Not: "HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SQL Server \ <sürüm> \ Tools \ ClientSetup \ CurrentVersion" ve "HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SQL Server \ Instance Names" ve kayıt defteri örneğinin asıl yolu ise, 64bit Kovanında "HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SQL Server \ <örnekadı>" görünür.
NGaida

Kayıt defteri, yüklü yazılımın kaynak tanımıdır. Çözümünüz, nihayetinde kayıt defteri değerlerini kullanan bir CLI aracı veya kayıt defterini de kullanan MMC ek bileşeni kullanmak yerine doğrudan kaynağa gitmeme izin veriyor. Mükemmel
barrypicker

76

Yüklü tüm örneklerin Microsoft Yönetim Konsolu'ndaki Hizmetler Ek Bileşeninde görünmesi gerekir. Örnek adlarını almak için Başlat | Çalıştır | Services.msc yazın ve "Sql Server (Örnek Adı)" ile tüm girdileri arayın.


13
Eşdeğer PowerShell komutu:Get-Service | ?{ $_.Name -like "MSSQL*" }
orad

2
Bilgisayarım MSSQL $ SQLEXPRESS SQL Server (SQLEXPRESS) görünen adıyla çalıştığını gösteriyor ... ama bunu bir sunucu adına nasıl girebilirim? Test bağlantısı ... sql sunucusuna bağlanmaya çalışırken ağla ilgili veya örneğe özgü bir hata gibi hataları gösterir
webzy

47

- T-SQL Sorgusu Bir makineye kurulan Örneklerin listesini bulmak için

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 

İyi bir! Sadece bağlanmanın gerekli olduğunu düşünüyorum sadeğil mi?
jyz

3
+1 Örnekler hakkındaki bilgilerin kaynağı Brian'ın cevabı ile aynıdır. Birisi değeri Windows Kayıt Defteri'nden almak için C # kodu yazabilir; bu da cevabın bir an için gereksiz olduğunu düşündürdü, ancak xp_regread'i bilmek güzel. #Teşekkürler.
Mzn

Sorgu sonuçları yalnızca Örnek Adlarıdır, Sonuçlara her örnek için uyumluluk düzeyi eklenebilir mi?
Marwan Almukh

16

Bu iş parçasının biraz eski olduğunu biliyorum, ama aradığım ve paylaşacağımı düşündüğüm cevabı bulmadan önce bu iş parçacığına rastladım. SQLExpress (veya localdb) kullanıyorsanız örnek adlarınızı bulmanın daha kolay bir yolu vardır. Komut satırına şunu yazın:

> sqllocaldb i

Bu, yerel olarak yüklediğiniz örnek adlarını listeler. Dolayısıyla, tam sunucu adınız bağlanacak örnek adının önünde (localdb) \ içermelidir. Ayrıca, sqllocaldb yeni örnekler oluşturmanıza veya bunları silmenize ve yapılandırmanıza olanak tanır. Bkz . SqlLocalDB Yardımcı Programı .


11

Şu anda oturum açtığınız makinede nelerin yüklü olduğunu görmek istiyorsanız, en basit manuel işlemin, tüm SQL Hizmetlerini (ve tüm SQL Hizmetlerini) görüntüleyen SQL Server Configuration Manager'ı (Başlat menüsünden) açmak olduğunu düşünüyorum. yalnızca SQL hizmetleri) kullanamazsınız (çalışıyor olsun veya olmasın). Bu, SQL Server 2005 veya üstünü varsayar; dotnetengineer'ın Hizmetler Yönetim Konsolu'nu kullanma önerisi size tüm hizmetleri gösterecektir ve her zaman kullanılabilir olmalıdır (örneğin, SQL Server'ın önceki sürümlerini çalıştırıyorsanız).

Bununla birlikte, daha geniş bir keşif işlemi arıyorsanız, ağınızı tarayacak ve erişime sahip oldukları herhangi bir sunucuda bulunan tüm SQL Hizmeti örneklerinin bir raporunu oluşturacak olan SQLRecon ve SQLPing gibi üçüncü taraf araçlarını düşünebilirsiniz. Böyle araçlar kullandığımdan bu yana bir süre geçti, ancak bulduklarına şaşırdım (yani, var olduğunu bilmediğim bir avuç örnek). YMMV. Ayrıntılar için Google'ı kullanabilirsiniz, ancak bu sayfanın alakalı indirmeleri olduğuna inanıyorum: http://www.sqlsecurity.com/Tools/FreeTools/tabid/65/Default.aspx


1
SQL Server Configuration Manager tam olarak ihtiyacım olan şeydi. Çabuk ve kolay.
Chris

8

SQL Server, uygulamaların geçerli ağ içindeki SQL Server örneklerini bulmasına izin verir. SqlDataSourceEnumerator sınıfı, bu bilgileri uygulama geliştiricisine sunar ve tüm görünür sunucular hakkında bilgi içeren bir DataTable sağlar. Döndürülen bu tablo, kullanıcı yeni bir bağlantı oluşturmaya çalıştığında sağlanan listeyle eşleşen ağda bulunan sunucu örneklerinin bir listesini içerir ve Bağlantı Özellikleri iletişim kutusundaki tüm kullanılabilir sunucuları içeren açılır listeyi genişletir. Görüntülenen sonuçlar her zaman tam değildir. Kullanılabilir SQL Server örnekleri hakkında bilgi içeren tabloyu almak için, önce paylaşılan / statik Örnek özelliğini kullanarak bir numaralandırıcı almanız gerekir:

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 den http://msdn.microsoft.com/en-us/library/a6t1z9x2(v=vs.80).aspx


bu veya etki alanında bir alt ağ belirtmem gerekiyor mu, onun için geri dönüyor, lütfen güncelleyebilir misiniz
transformatör

1
.NET Core kullanmak isteyenler için SqlDataSourceEnumeratorhenüz uygulanmadı, ancak GitHub sorununa göre eklenecek listede bulunuyor .
Daniel Hill


5

Bunu bir komut dosyasında belirlemek istiyorsanız, aşağıdakileri deneyebilirsiniz:

sc \\server_name query | grep MSSQL

Not: grep, gnuwin32 araçlarının bir parçasıdır


3
Bunun findstryerine kullanabilirsiniz grep.
Pablo Montilla

Ayrıca sc \\ sunucu_adı sorgusuna
Julio Nobre

5

Windows komut satırından şunu yazın:

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

Burada "sunucu_adı", SQL örneklerini görüntülemek istediğiniz herhangi bir uzak sunucunun adıdır.

Bu, elbette yeterli izinleri gerektirir.


2008 R2 ve birden çok Express ve LocalDB örneği çalıştıran geliştirme makinemde çalışmıyor.
Christoph

4

Bu sorgu size sunucu adını ve örnek adını almalıdır:

SELECT @@SERVERNAME, @@SERVICENAME

3
Bu yalnızca yürütme sorgusuyla ilişkili geçerli örneğin adını söyler. OP, kurulu tüm örneklerin bir listesini istedi
Jay Walker

1
Bu, SQL sunucusunun hangi sürümünün yüklü olduğu hakkında herhangi bir bilgi sağlamaz
Ahmad

2

Ben de aynı problemi yaşadım. "Osql -L" komutu yalnızca sunucuların listesini görüntüledi, ancak örnek adları içermedi (yalnızca yerel SQL Sever'imin örneği görüntülendi). Wireshark ile sqlbrowser.exe (ki SQL kurulumunuzun paylaşılan klasöründe bulunabilir) benim sorunum için bir çözüm buldum.

Yerel yönetim ortamı kayıt defteri girdisi ile çözümlenir. Uzak örnekler UDP yayını (bağlantı noktası 1434) ve SMB ile çözümlenir. İstekleri listelemek için "sqlbrowser.exe -c" kullanın.

Yapılandırmam 1 fiziksel ve 3 sanal ağ bağdaştırıcısı kullanıyor. "Osql -L" komutunu kullandıysam, sqlbrowser, fiziksel bağdaştırıcı yerine sanal bağdaştırıcılardan birinden (başka bir ağ kesiminde) bir istek görüntüledi. osql adpater'i metriği ile seçer. Metriği "route print" komutuyla görebilirsiniz. Konfigürasyonum için yönlendirme tablosu, sanal adaptör için daha sonra fiziksel için daha düşük bir metrik gösterdi. Bu nedenle, gelişmiş ağ ayarlarında otomatik metriğin seçimini kaldırarak ağ özelliklerindeki arayüz metriğini değiştirdim. osql artık fiziksel adaptörü kullanıyor.


2

Başka bir seçenek SQLSERVER keşif raporunu çalıştırmak olacaktır ... sqlserver kurulum ortamına gidin ve setup.exe'ye çift tıklayın

resim açıklamasını buraya girin

ve sonraki ekranda, araçlara gidin ve aşağıda gösterildiği gibi keşif raporunu tıklayın

resim açıklamasını buraya girin

Bu size tüm özellikleri ile birlikte mevcut tüm örnekleri gösterecektir .. aşağıda benim pc bir anlık görüntü resim açıklamasını buraya girin


1

Sql server 2008'i yükledim, ancak herhangi bir veritabanı örneğine bağlanamadım. @G Mastros'un yayınladığı komutlar etkin örnek listelemedi.

Bu yüzden hizmetlere baktım ve SQL sunucu aracısının devre dışı olduğunu gördüm. Otomatik olarak ayarlayıp başlatarak sabitledim.


1

Ben 100 + sunucuları değerlendirirken aynı sorunu vardı, ben SQL oluşan hizmet adlarını gözatmak için C # yazılı bir komut dosyası vardı. Sunucuya örnekler yüklendiğinde, SQL Server hizmet adıyla her örnek için bir hizmet ekler. 2000 ila 2008 gibi farklı sürümlerde değişiklik gösterebilir, ancak örnek adı olan bir hizmet olduğundan emin olabilirsiniz.

Hizmet adını alıp hizmet adından örnek adı alıyorum. WMI Sorgu Sonucu ile kullanılan örnek kod:

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);
                    }

0

İşte basit bir yöntem: Başlat sonra Programlar, sonra Microsoft SQL Server 2005'e, ardından Yapılandırma Araçları'na, ardından SQL Server Yapılandırma Yöneticisi'ne, ardından SQL Server 2005 Ağ Yapılandırması'na gidin.


0

Onun eski bir yazı biliyorum ama yerel veya uzak sürümde yüklü SQL örnekleri bulabilirsiniz PoweShell ile güzel bir çözüm buldum ve ayrıca diğer özellikleri almak uzatın.

$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}

merhaba bu harika nasıl, bunu bir C # sınıf içine veya bunu koddan aramak nasıl
transformatör

Selam. Bu benim powershell'deki ilk denemem, bu yüzden yardımınız takdir edilecektir. Bu komut dosyasını çalıştırmayı denersem aşağıdaki hatayı alıyorum. Aldo tüm uzak sql sunucularını bulacak mı? SQL Sunucuları ve veritabanlarının bir listesini derlemeye çalışıyorum. Boş değerli bir ifadede yöntem çağıramazsınız. + $ değerleri = $ regkey.GetValueNames ()
Darryl Wilson

0

Komutlar OSQL -Lve ağdakiSQLCMD -L tüm örnekleri gösterecektir .

Sunucudaki tüm örneklerin bir listesini almak istiyorsanız ve komut dosyası oluşturma veya programlama yapmak istemiyorsanız, bunu yapın:

  1. Windows Görev Yöneticisi'ni başlatma
  2. "Tüm kullanıcıların işlemlerini göster" veya eşdeğer onay kutusunu işaretleyin
  3. İşlemleri "Görüntü Adı" na göre sıralayın
  4. Tüm sqlsrvr.exeresimleri bul

Örnekler "Kullanıcı Adı" sütununda olarak listelenmelidir MSSQL$INSTANCE_NAME.

Ve zavallı sunucunun 63 örnek çalıştırdığını düşünmekten üç çalıştığını fark ettim (bir tanesi CPU yükü ile tam bir kabadayı gibi davranıyordu ...)


0

"HKLM \ Software \ Microsoft \ Microsoft SQL Server \ Instance Names \ SQL" SQL server reg sorgusunun örneklerini alacak

veya SQLCMD -L kullanın


-1

SSMS'nizde kullanmanız daha kolay olabilir:

SELECT @@Version

3
Sorunun kendisi, sürümü belirlemek için SQL sorgularını kullanmak istemediklerini / kullanamadıklarını
belirtir
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.