インストールされているSQL Serverインスタンスとそのバージョンを確認するにはどうすればよいですか?
-
02-07-2019 - |
質問
(手動またはプログラムで)インストールしたsql server / sql expressのインスタンスを判断しようとしていますが、すべての例で、SQLクエリを実行してこれを判断するように指示されています。特定のインスタンス。
解決
コマンドラインで:
SQLCMD -L
または
OSQL -L
(注:大文字のLでなければなりません)
これにより、ネットワークにインストールされているすべてのSQLサーバーが一覧表示されます。 SQL Serverがリストに表示されないように設定できる構成オプションがあります。これを行うには...
コマンドライン:
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')
インストールされたすべてのインスタンスは、Microsoft管理コンソールのサービススナップインに表示されます。インスタンス名を取得するには、[スタート] | [実行| 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 Configuration Managerを([スタート]メニューから)開くだけで、すべてのSQLそのハードウェア上のサービス(およびのみ SQLサービス)(実行中かどうか)。これは、SQL Server 2005以降を想定しています。 dotnetengineer のサービス管理コンソールの使用に関する推奨事項すべてのサービスが表示され、常に使用可能である必要があります(たとえば、以前のバージョンのSQL Serverを実行している場合)。
ただし、より広範な検出プロセスを探している場合は、SQLReconやSQLPingなどのサードパーティツールを検討することをお勧めします。これらのツールは、ネットワークをスキャンし、サーバー上のすべてのSQL Serviceインスタンスのレポートを作成しますアクセス。このようなツールを使用してからしばらく経ちましたが、それらが見つけたものに驚かされました(つまり、存在していたとは知らなかった少数のインスタンス)。 YMMV。 Googleで詳細を確認できますが、このページには関連するダウンロードがあると思います: http://www.sqlsecurity.com/Tools/FreeTools/tabid/65/Default.aspx
このスレッドは少し古いことは知っていますが、探している答えを見つけて共有したいと思う前に、このスレッドに出会いました。 SQLExpress(またはlocaldb)を使用している場合、インスタンス名を見つけるより簡単な方法があります。 コマンドラインで次のように入力します。
> sqllocaldb i
これにより、ローカルにインストールしたインスタンス名がリストされます。したがって、完全なサーバー名には、接続するインスタンス名の前に(localdb)\を含める必要があります。また、sqllocaldbを使用すると、新しいインスタンスを作成したり、削除したり、構成したりできます。参照: SqlLocalDBユーティリティ。
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
SQL Server Browserサービス http://msdn.microsoft.com/en- us / library / ms181087.aspx
Windowsコマンドラインから、次のように入力します:
SC \\server_name query | find /I "SQL Server ("
" server_name"の場所SQLインスタンスを表示するリモートサーバーの名前です。
これにはもちろん十分な権限が必要です。
スクリプトでこれを判断することに興味がある場合は、次を試すことができます:
sc \\server_name query | grep MSSQL
注:grepはgnuwin32ツールの一部です
同じ問題がありました。 &o; osql -L"コマンドはサーバー名のリストのみを表示し、インスタンス名は表示しませんでした(ローカルSQLサーバーのインスタンスのみが表示されました)。 Wiresharkで、sqlbrowser.exe(SQLインストールの共有フォルダーにあります)で問題の解決策を見つけました。
ローカルインスタンスはレジストリエントリによって解決されます。リモートインスタンスは、UDPブロードキャスト(ポート1434)およびSMBによって解決されます。 " sqlbrowser.exe -c"を使用しますリクエストを一覧表示します。
私の構成では、1つの物理ネットワークアダプターと3つの仮想ネットワークアダプターを使用しています。 " osql -L"を使用した場合コマンドsqlbrowserは、物理アダプタではなく、仮想アダプタの1つ(別のネットワークセグメントにある)からの要求を表示しました。 osqlは、メトリックによってアダプタを選択します。コマンド「route print」でメトリックを確認できます。 私の構成では、ルーティングテーブルは、仮想アダプターよりも物理アダプターよりも低いメトリックを示しました。そこで、ネットワークの詳細設定で自動メトリックを選択解除して、ネットワークプロパティのインターフェイスメトリックを変更しました。 osqlは物理アダプターを使用するようになりました。
このクエリは、サーバー名とインスタンス名を取得する必要があります:
SELECT @@SERVERNAME, @@SERVICENAME
SQL Server 2008をインストールしましたが、データベースインスタンスに接続できませんでした。 @G Mastrosが投稿したコマンドには、アクティブなインスタンスがリストされていません。
だから私はサービスを調べて、SQLサーバーエージェントが無効になっていることを発見しました。自動に設定してから起動することで修正しました。
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<*>quot;) == true)
{
InstanceData.Name = ServiceData.DisplayName.Substring(
ServiceData.DisplayName.IndexOf("<*>quot;) + 1,
ServiceData.DisplayName.Length - ServiceData.DisplayName.IndexOf("<*>quot;) - 1
);
InstanceData.ConnectionName = CurrentMachine.Name + "\\" + InstanceData.Name;
CurrentMachine.ListOfInstances.Add(InstanceData);
}
これは簡単な方法です: に行きます 開始する プログラム その後、Microsoft SQL Server 2005 構成ツール その後、SQL Server構成マネージャー SQL Server 2005のネットワーク構成 ここで、マシンにインストールされているすべてのインスタンスを見つけることができます。
SSMS内で使用する方が使いやすい場合があります:
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 = 古い投稿を知っていますが、ローカルまたはリモートマシンにインストールされたバージョンを含むSQLインスタンスを見つけたり、拡張して他のプロパティを取得したりできるPoweShellの素晴らしいソリューションを見つけました。
<*> ; $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}