ฉันพยายามกำหนดอินสแตนซ์ของ sql server / sql express ที่ฉันติดตั้ง (ด้วยตนเองหรือโดยทางโปรแกรม) แต่ตัวอย่างทั้งหมดบอกให้ฉันเรียกใช้แบบสอบถาม SQL เพื่อตรวจสอบว่าสมมติว่าฉันเชื่อมต่อกับอินสแตนซ์เฉพาะแล้ว .
ฉันพยายามกำหนดอินสแตนซ์ของ sql server / 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')
อินสแตนซ์ทั้งหมดที่ติดตั้งควรแสดงใน Services Snap-In ใน Microsoft Management Console ในการรับชื่ออินสแตนซ์ไปที่ Start | เรียกใช้ | พิมพ์ Services.msc และค้นหารายการทั้งหมดด้วย "Sql Server (ชื่ออินสแตนซ์)"
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 (จากเมนูเริ่ม) ซึ่งแสดง SQL Services ทั้งหมด (และเฉพาะบริการ SQL) บนฮาร์ดแวร์นั้น (ทำงานหรือไม่) สิ่งนี้ถือว่า SQL Server 2005 หรือสูงกว่า; คำแนะนำของdotnetengineerในการใช้ Services Management Console จะแสดงบริการทั้งหมดให้คุณและควรพร้อมใช้งานเสมอ (หากคุณใช้ 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 ที่มีอยู่คุณต้องดึงข้อมูลตัวระบุก่อนโดยใช้คุณสมบัติ Instance / Static Instance:
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 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 ("
โดยที่ "server_name" เป็นชื่อของรีโมตเซิร์ฟเวอร์ที่คุณต้องการแสดงอินสแตนซ์ SQL
ต้องมีการอนุญาตที่เพียงพอแน่นอน
แบบสอบถามนี้ควรให้คุณได้ชื่อเซิร์ฟเวอร์และชื่ออินสแตนซ์:
SELECT @@SERVERNAME, @@SERVICENAME
ผมมีปัญหาเหมือนกัน. คำสั่ง "osql -L" แสดงเฉพาะรายการเซิร์ฟเวอร์ แต่ไม่มีชื่ออินสแตนซ์ (แสดงเฉพาะอินสแตนซ์ของ SQL Sever ในเครื่องของฉันเท่านั้น) ด้วย Wireshark, sqlbrowser.exe (ซึ่งสามารถพบได้ในโฟลเดอร์แชร์ของการติดตั้ง SQL ของคุณ) ฉันพบวิธีแก้ไขปัญหาของฉัน
อินสแตนซ์ในระบบได้รับการแก้ไขโดยรายการรีจิสตรี อินสแตนซ์ระยะไกลได้รับการแก้ไขโดยการออกอากาศ UDP (พอร์ต 1434) และ SMB ใช้ "sqlbrowser.exe -c" เพื่อแสดงรายการคำขอ
การกำหนดค่าของฉันใช้อแด็ปเตอร์เครือข่ายเสมือนจริง 1 ตัวและ 3 ตัว หากฉันใช้คำสั่ง "osql -L" sqlbrowser จะแสดงคำขอจากหนึ่งในอะแดปเตอร์เสมือน (ซึ่งอยู่ในเซ็กเมนต์เครือข่ายอื่น) แทนที่จะเป็นฟิสิคัลที่หนึ่ง osql เลือก adpater ตามตัวชี้วัด คุณสามารถดูตัวชี้วัดที่มีคำสั่ง "พิมพ์เส้นทาง" สำหรับการกำหนดค่าตารางเส้นทางของฉันแสดงเมทริกที่ต่ำกว่าสำหรับอะแด็ปเตอร์เสมือนสำหรับฟิสิคัลแล้ว ดังนั้นฉันจึงเปลี่ยนการวัดอินเทอร์เฟซในคุณสมบัติเครือข่ายโดยยกเลิกการเลือกการวัดอัตโนมัติในการตั้งค่าเครือข่ายขั้นสูง ตอนนี้ osql ใช้ฟิสิคัลอะแด็ปเตอร์
ฉันเพิ่งติดตั้ง 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 จากนั้นตั้งค่าเครือข่าย SQL Server 2005 แล้วที่นี่คุณสามารถค้นหาอินสแตนซ์ทั้งหมดที่ติดตั้งลงบนเครื่องของคุณ
ฉันรู้ว่ามันเป็นโพสต์เก่า แต่ฉันพบทางออกที่ดีกับ 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 อินสแตนซ์เพื่อให้รู้ว่ากำลังรันอยู่สามครั้ง
จะได้รับอินสแตนซ์ของแบบสอบถาม SQL เซิร์ฟเวอร์ reg "ชื่อเซิร์ฟเวอร์ \ Instance SQL \ HKLM \ Software \ Microsoft \ Microsoft HKLM \ Software \ Microsoft \ Microsoft"
หรือใช้ SQLCMD -L
หากภายใน SSMS ของคุณคุณอาจพบว่าใช้งานง่ายขึ้น:
SELECT @@Version