설치된 SQL Server 인스턴스와 해당 버전을 확인하려면 어떻게 해야 합니까?
설치한 sql server/sql express 인스턴스를 확인하려고 합니다(수동 또는 프로그래밍 방식). 그러나 모든 예제에서 SQL 쿼리를 실행하여 특정 인스턴스에 이미 연결되어 있다고 가정합니다.
명령줄에서:
SQLCMD -L
또는
OSQL -L
(참고: 대문자 L이어야 합니다)
네트워크에 설치된 모든 sql 서버가 나열됩니다.SQL 서버가 목록에 표시되지 않도록 설정할 수 있는 구성 옵션이 있습니다.이 작업을 수행하려면...
명령줄에서:
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(Instance Name)"가 있는 모든 항목을 찾습니다.
시스템에 설치된 인스턴스 목록을 찾기 위한 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 Express(또는 localdb)를 사용하는 경우 인스턴스 이름을 찾는 더 간단한 방법이 있습니다.명령줄 유형:
> sqllocaldb i
로컬로 설치한 인스턴스 이름이 나열됩니다.따라서 연결할 인스턴스 이름 앞에 전체 서버 이름(localdb)\을 포함해야 합니다.또한 sqllocaldb를 사용하면 새 인스턴스를 만들거나 삭제하고 구성할 수 있습니다.SqlLocalDB Utility를 참조하십시오.
현재 로그인한 시스템에 설치된 항목을 확인하려면 가장 간단한 수동 프로세스는 시작 메뉴에서 해당 하드웨어의 모든 SQL 서비스(실행 중인지 여부에 관계없이 SQL 서비스만 표시)를 여는 것입니다.여기에서는 SQL Server 2005 이상을 가정합니다. 서비스 관리 콘솔을 사용하는 닷넷 엔지니어의 권장 사항은 모든 서비스를 표시하며 항상 사용할 수 있어야 합니다(예: 이전 버전의 SQL Server를 실행 중인 경우).
그러나 보다 광범위한 검색 프로세스를 원하는 경우에는 네트워크를 검색하고 액세스 권한이 있는 모든 서버에서 발견된 모든 SQL 서비스 인스턴스에 대한 보고서를 작성하는 SQL Recon 및 SQL Ping과 같은 타사 도구를 고려할 수 있습니다.이런 툴을 사용한 지 오래되었지만, 그들이 발견한 것(즉, 존재하지 않는 몇 가지 사례)에 놀랐습니다.YMMV. 자세한 내용은 구글에서 확인하실 수 있지만, 이 페이지에는 관련 다운로드가 있을 것입니다. http://www.sqlsecurity.com/Tools/FreeTools/tabid/65/Default.aspx
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("============================");
}
}
}
msdn http://msdn.microsoft.com/en-us/library/a6t1z9x2(v=vs.80).aspx 에서.
SQLSERVER 검색 보고서를 실행하는 방법이 하나 더 있습니다.sqlserver의 설치 미디어로 이동하고 setup을 두 번 클릭합니다.exe
다음 화면에서 도구로 이동하여 아래와 같이 탐색 보고서를 클릭합니다.
이렇게 하면 전체 기능과 함께 모든 인스턴스가 표시됩니다.아래는 제 PC의 스냅샷입니다.
SQL Server 브라우저 서비스 http://msdn.microsoft.com/en-us/library/ms181087.aspx
이 쿼리는 서버 이름과 인스턴스 이름을 가져옵니다.
SELECT @@SERVERNAME, @@SERVICENAME
스크립트에서 이 문제를 확인하려는 경우 다음을 시도할 수 있습니다.
sc \\server_name query | grep MSSQL
참고: grep는 gnuwin32 도구의 일부입니다.
Windows 명령줄에서 다음을 입력합니다.
SC \\server_name query | find /I "SQL Server ("
여기서 "server_name"은 SQL 인스턴스를 표시할 원격 서버의 이름입니다.
물론 충분한 권한이 필요합니다.
저도 같은 문제가 있었습니다."osql -L" 명령은 서버 목록만 표시하고 인스턴스 이름은 표시하지 않았습니다(로컬 SQL Server의 인스턴스만 표시됨).Wireshark, sqlbrowser.exe(SQL 설치의 공유 폴더에서 찾을 수 있음)를 사용하여 문제에 대한 솔루션을 찾았습니다.
로컬 인스턴스는 레지스트리 항목으로 확인됩니다.원격 인스턴스는 UDP 브로드캐스트(포트 1434) 및 SMB에 의해 해결됩니다. 요청을 나열하려면 "sqlbrowser.exe -c"를 사용하십시오.
내 구성에서는 물리적 네트워크 어댑터 1개와 가상 네트워크 어댑터 3개를 사용합니다."osql -L" 명령을 사용한 경우 sql 브라우저는 물리적 어댑터가 아닌 다른 네트워크 세그먼트에 있는 가상 어댑터 중 하나의 요청을 표시했습니다.osql은 메트릭을 기준으로 어댑터를 선택합니다."route print" 명령을 사용하여 메트릭을 볼 수 있습니다.내 구성에서 라우팅 테이블은 물리적 어댑터보다 가상 어댑터에 대한 메트릭을 더 낮게 표시했습니다.그래서 고급 네트워크 설정에서 자동 메트릭 선택을 취소하여 네트워크 속성의 인터페이스 메트릭을 변경했습니다.osql은 이제 물리적 어댑터를 사용합니다.
는 " " 입니다.OSQL -L그리고.SQLCMD -L네트워크의 모든 인스턴스가 표시됩니다.
서버에 있는 모든 인스턴스의 목록을 가지고 스크립팅이나 프로그래밍을 하고 싶지 않은 경우 다음을 수행합니다.
- Windows 작업 관리자 시작
- 모든 사용자의 프로세스 표시 확인란을 선택하거나 이와 동등한 항목을 선택합니다.
- "이미지 이름"별로 프로세스 정렬
- 모두찾 찾기
sqlsrvr.exe
는 " 이름"에 "사용자 이름" "사용자 이름"으로 .MSSQL$INSTANCE_NAME.
그리고 저는 이 열악한 서버가 63개의 인스턴스를 실행하고 있다고 생각했던 것에서 세 개의 인스턴스를 실행하고 있다는 것을 깨달았습니다(그 중 한 개는 CPU 로드로 인해 완전히 불량배처럼 행동했습니다...).
SQL Server 2008을 설치한 지 얼마 되지 않았는데 데이터베이스 인스턴스에 연결할 수 없습니다.@G Mastros가 게시한 명령에 활성 인스턴스가 나열되지 않았습니다.
그래서 서비스를 찾아보니 SQL Server 에이전트가 비활성화되어 있었습니다.자동으로 설정하고 시동을 걸어 수정했습니다.
100대 이상의 서버를 평가할 때 SQL로 구성된 서비스 이름을 검색하기 위해 C#으로 작성된 스크립트가 있었습니다.서버에 인스턴스를 설치하면 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);
}
SQL server reg 쿼리 "HKLM\Software\Microsoft\Microsoft SQL Server\"의 인스턴스를 가져옵니다.인스턴스 이름\SQL"
또는 SQLCMD -L 사용
간단한 방법은 다음과 같습니다. 시작, 프로그램, Microsoft SQL Server 2005, 구성 도구, SQL Server 구성 관리자, SQL Server 2005 네트워크 구성으로 이동한 다음 컴퓨터에 설치된 모든 인스턴스를 찾을 수 있습니다.
이전 게시물인 것은 알지만 버전을 포함한 로컬 또는 원격 시스템에 설치된 SQL 인스턴스를 찾을 수 있고 다른 속성을 가져올 수 있는 PowerShell의 좋은 솔루션을 찾았습니다.
$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}
SSMS 내에서 사용하는 것이 더 쉬울 수 있습니다.
SELECT @@Version
언급URL : https://stackoverflow.com/questions/141154/how-can-i-determine-installed-sql-server-instances-and-their-versions
'programing' 카테고리의 다른 글
| Azure WebApp As.NET Core 2 오류:응용 프로그램을 시작하는 동안 오류가 발생했습니다. (0) | 2023.04.29 |
|---|---|
| 이클립스에서 안드로이드 프로젝트의 패키지 이름을 변경하는 방법은? (0) | 2023.04.29 |
| 컬렉션 보기를 올바르게 사용하는 방법뷰 모델의 소스 (0) | 2023.04.29 |
| C#의 Azure 테이블 저장소에서 모든 행을 가져오는 방법은 무엇입니까? (0) | 2023.04.29 |
| 부동산 게터 및 세터 (0) | 2023.04.29 |

