(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 .
(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 .
Yanıtlar:
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.
C:\> sqllocaldb i
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.
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.
Get-Service | ?{ $_.Name -like "MSSQL*" }
- 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
sa
değil mi?
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ı .
Ş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
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
SqlDataSourceEnumerator
henüz uygulanmadı, ancak GitHub sorununa göre eklenecek listede bulunuyor .
SQL Server Tarayıcı Hizmeti http://msdn.microsoft.com/en-us/library/ms181087.aspx
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
findstr
yerine kullanabilirsiniz grep
.
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.
Bu sorgu size sunucu adını ve örnek adını almalıdır:
SELECT @@SERVERNAME, @@SERVICENAME
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.
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
ve sonraki ekranda, araçlara gidin ve aşağıda gösterildiği gibi keşif raporunu tıklayın
Bu size tüm özellikleri ile birlikte mevcut tüm örnekleri gösterecektir .. aşağıda benim pc bir anlık görüntü
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);
}
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}
Komutlar OSQL -L
ve 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:
sqlsrvr.exe
resimleri 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 ...)