설치된 SQL Server 인스턴스 및 해당 버전을 결정하려면 어떻게해야합니까?

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

  •  02-07-2019
  •  | 
  •  

문제

설치 한 SQL Server/SQL Express의 인스턴스 (수동 또는 프로그래밍 방식) 인스턴스를 결정하려고하지만 모든 예제는 이미 특정 인스턴스에 연결된 것으로 가정하기 위해 SQL 쿼리를 실행하라고 지시하고 있습니다. .

도움이 되었습니까?

해결책

명령 줄에서 :

SQLCMD -L

또는

OSQL -L

(참고 : 자본이어야합니다.)

네트워크에 설치된 모든 SQL 서버가 나열됩니다. SQL 서버가 목록에 표시되지 않도록 설정할 수있는 구성 옵션이 있습니다. 이것을하기 위해...

AT 명령 라인 :

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 Management Console의 서비스 스냅인에 표시되어야합니다. 인스턴스 이름을 얻으려면 시작으로 이동 | 실행 | 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 구성 관리자 (시작 메뉴에서)를 열고 모든 SQL 서비스 (및 모든 SQL 서비스를 표시하는)를 열 수 있다고 생각합니다. 해당 하드웨어 (실행 여부)에서 SQL 서비스). 이것은 SQL Server 2005 이상을 가정합니다. 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 클래스는이 정보를 애플리케이션 개발자에게 노출시켜 모든 가시 서버에 대한 정보가 포함 된 데이터 가능한 정보를 제공합니다. 이 반환 된 테이블에는 사용자가 새 연결을 만들려고 할 때 제공된 목록과 일치하는 네트워크에서 사용 가능한 서버 인스턴스 목록이 포함되어 있으며 연결 속성 대화 상자에 사용 가능한 모든 서버가 포함 된 드롭 다운 목록을 확장합니다. 표시된 결과가 항상 완료된 것은 아닙니다. 사용 가능한 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

SQL Server 브라우저 서비스 http://msdn.microsoft.com/en-us/library/ms181087.aspx

Windows Command-Line에서 다음을 입력합니다.

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"를 사용하여 요청을 나열하십시오.

내 구성은 1 개의 물리적 및 3 개의 가상 네트워크 어댑터를 사용합니다. "OSQL -L"명령을 사용한 경우 SQLBrowser는 물리적 인 것 대신 가상 어댑터 중 하나 (다른 네트워크 세그먼트)의 요청을 표시했습니다. OSQL은 메트릭으로 광고를 선택합니다. "경로 인쇄"명령이있는 메트릭을 볼 수 있습니다. 내 구성을 위해 라우팅 테이블은 TEH 가상 어댑터에 대한 낮은 메트릭을 보여 주었다. 그래서 고급 네트워크 설정에서 자동 메트릭을 선택하여 네트워크 속성의 인터페이스 메트릭을 변경했습니다. OSQL은 이제 물리적 어댑터를 사용합니다.

이 쿼리는 서버 이름과 인스턴스 이름을 얻을 수 있어야합니다.

SELECT @@SERVERNAME, @@SERVICENAME

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

간단한 방법은 다음과 같습니다. 시작으로 이동 한 다음 프로그램으로 이동 한 다음 Microsoft SQL Server 2005 그런 다음 구성 도구를 다음 SQL Server 구성 관리자에게 다음 SQL Server 2005 네트워크 구성을 한 다음 시스템에 설치된 모든 인스턴스를 찾을 수 있습니다.

SSM 내에있는 경우 사용하기가 더 쉬울 수 있습니다.

SELECT @@Version

나는 그것의 오래된 게시물을 알고 있지만 로컬 또는 버전을 포함한 원격 시스템에 설치된 SQL 인스턴스를 찾을 수 있고 다른 속성을 확장 할 수있는 Poweshell이있는 멋진 솔루션을 찾았습니다.

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

One more option would be to run SQLSERVER discovery report..go to installation media of sqlserver and double click setup.exe

enter image description here

and in the next screen,go to tools and click discovery report as shown below

enter image description here

This will show you all the instances present along with entire features..below is a snapshot on my pc enter image description here

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top