インストールした sql server/sql express のインスタンスを特定しようとしていますが (手動またはプログラムで)、すべての例で、SQL クエリを実行してこれを特定するように指示されています。これは、特定のインスタンスに既に接続されていることを前提としています。 .
20 に答える
コマンドラインで:
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 構成マネージャーを開くことだと思います。これにより、すべての SQL サービスが表示されます (およびそのハードウェア (実行中かどうかに関係なく) 上の SQL サービスのみ)。これは、SQL Server 2005 以降を想定しています。サービス管理コンソールを使用するdotnetengineerの推奨事項では、すべてのサービスが表示され、常に使用できるはずです (たとえば、以前のバージョンの 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 インスタンスに関する情報を含むテーブルを取得するには、共有/静的インスタンス プロパティを使用して、最初に列挙子を取得する必要があります。
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 コマンドラインから、次のように入力します。
SC \\server_name query | find /I "SQL Server ("
"server_name" は、SQL インスタンスを表示する任意のリモート サーバーの名前です。
もちろん、これには十分な権限が必要です。
このクエリは、サーバー名とインスタンス名を取得する必要があります。
SELECT @@SERVERNAME, @@SERVICENAME
スクリプトでこれを決定することに興味がある場合は、次のことを試すことができます。
sc \\server_name query | grep MSSQL
注: grep は gnuwin32 ツールの一部です
私も同じ問題を抱えていました。「osql -L」コマンドでは、サーバーのリストのみが表示され、インスタンス名は表示されませんでした (ローカル SQL サーバーのインスタンスのみが表示されました)。Wireshark では、sqlbrowser.exe (SQL インストールの共有フォルダーにあります) を使用して、問題の解決策を見つけました。
ローカル インスタンスは、レジストリ エントリによって解決されます。リモート インスタンスは、UDP ブロードキャスト (ポート 1434) および SMB によって解決されます。要求を一覧表示するには、"sqlbrowser.exe -c" を使用します。
私の構成では、1 つの物理ネットワーク アダプターと 3 つの仮想ネットワーク アダプターを使用しています。「osql -L」コマンドを使用した場合、sqlbrowser は、物理アダプターではなく、仮想アダプター (別のネットワーク セグメントにある) の 1 つからの要求を表示しました。osql は、メトリックによってアダプターを選択します。コマンド「route print」でメトリックを表示できます。私の構成では、ルーティング テーブルは物理アダプターよりも仮想アダプターの方が低いメトリックを示しました。そこで、高度なネットワーク設定で自動メトリックの選択を解除して、ネットワーク プロパティのインターフェース メトリックを変更しました。osql は物理アダプターを使用するようになりました。
SQL Server 2008 をインストールしましたが、どのデータベース インスタンスにも接続できませんでした。@G Mastros が投稿したコマンドには、アクティブなインスタンスが一覧表示されませんでした。
そのため、サービスを調べたところ、SQL サーバー エージェントが無効になっていることがわかりました。自動に設定してから起動することで修正しました。
100 台以上のサーバーを評価していたときに同じ問題が発生しました。SQL で構成されるサービス名を参照するスクリプトを C# で記述しました。インスタンスがサーバーにインストールされると、SQL Server はインスタンスごとにサービス名を持つサービスを追加します。2000 から 2008 のようにバージョンによって異なる場合がありますが、インスタンス名を持つサービスがあることは確かです。
サービス名を取得し、サービス名からインスタンス名を取得します。WMI Query Result で使用されるサンプル コードは次のとおりです。
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);
}
古い投稿であることは知っていますが、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}
簡単な方法は次のとおりです。[スタート]、[プログラム]、[Microsoft SQL Server 2005]、[構成ツール]、[SQL Server 構成マネージャー]、[SQL Server 2005 ネットワーク構成] の順に移動し、マシンにインストールされているすべてのインスタンスを見つけることができます。