web-dev-qa-db-ja.com

SQL Server 2012 LocalDB共有インスタンスに接続できないのはなぜですか?

Windows 7 x64マシンでSQL Server 2012 LocalDB(RTM、x64)共有インスタンスをセットアップしようとしていますが、共有インスタンスに接続できないようです。すべてのセットアップで管理者コマンドプロンプトを使用しています。インスタンスを作成する方法は次のとおりです。

sqllocaldb create MyInstance

これは応答をもたらします:

LocalDB instance "MyInstance" created with version 11.0.

ここまでは順調ですね。今私はインスタンスを共有します:

sqllocaldb share "MyInstance" "MySharedInstance"

その結果:

Private LocalDB instance "MyInstance" shared with the shared name: "MySharedInstance".

まだよさそうです。この時点で、infoコマンドによって次の結果が得られます。

.\MySharedInstance
MyInstance
v11.0

管理者または非管理者コマンドの両方を使用して所有者アカウント(管理者)からインスタンスに接続するプロンプトは正常に機能しているようです。しかし、通常のユーザー(Windows管理者ではない)としてログインして接続しようとすると、状況がうまくいきません。

sqlcmd -S (localdb)\.\MySharedInstance

結果は:

Sqlcmd: Error: Microsoft SQL Server Native Client 11.0 : Named Pipes Provider: Could not open a connection to SQL Server [2]. .
Sqlcmd: Error: Microsoft SQL Server Native Client 11.0 : Login timeout expired.
Sqlcmd: Error: Microsoft SQL Server Native Client 11.0 : A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online..

「-l」スイッチを使用してログインタイムアウトを大きくしても、効果はありません。共有されていないデフォルトのv11.0インスタンスに接続できます。非管理ユーザーのinfoコマンドは、 "MyInstance"がないこと以外は上記と同じです。これは、管理ユーザーが所有する名前付きインスタンスであるためです。次のコマンド(管理ユーザー/インスタンスの所有者に対して機能します):

sqllocaldb info ".\MySharedInstance"

また、エラーになります:

Windows API call "FileTimeToSystemTime" returned error code: -2147024809.

問題は、管理者以外のユーザーが共有インスタンスに接続できないのはなぜですか?これは共有インスタンスの目的全体を無効にするようです。また、共有インスタンスについてクエリを実行しようとすると、「sqllocaldb info」コマンドでエラーが発生するのはなぜですか。

25
Cory McCarty

別の編集

Cory、以前のバージョンのSQL Server(例:2008)がインストールされている場合、それは使用しているsqlcmdのバージョンです。 LocalDbに接続するには、SQL Server 2012バージョンのsqlcmdを使用する必要があります。したがって、ユーザーへの指示では、次のコマンドを実行して、SQL Server 2012バージョンを確実に使用する必要があります。

C:\Program Files\Microsoft SQL Server\110\Tools\Binn\sqlcmd -S "(localdb)\.\InstanceName"

これでうまくいきました。私が確認していないのは、sqlcmdのこのパスとバージョンがonlyをインストールしたユーザーがsqllocaldb.msiをインストールできるかどうかです。申し訳ありませんが、SQL Server 2012がインストールされていない(または以前のバージョンのみがインストールされている)ネイキッドマシンでこれを完全に試すことはできません。ただし、sqlcmdの110バージョンを明示的に呼び出すとうまくいく場合は、お知らせください。

110のバージョンが最初になるようにシステム変数を変更するようにユーザーに指示することもできると思います(IMHOが自動的に当てはまるはずです)。

FileTimeToSystemTimeは、Krzysztofの同僚の1人によってバグとして確認されています。したがって、所有者以外がsqllocaldb経由で接続するために知っている修正はまだありません。しかし、SSMSとsqlcmdの両方を機能させることができることを示したので、実行に近づくことを願っています。

[〜#〜]編集[〜#〜]

所有者以外のユーザーをインスタンスに追加する必要があります。 CREATE LOGIN [MyDomain\OtherUser] FROM WINDOWS;および適切な権限も同様です。私のテストでは、ログインが失敗し、間違ったエラーメッセージが生成されていました( "FileTimeToSystemTime"エラーメッセージはバグです)。また、GRANT CONNECT。これを行うと、will Management Studioを使用して2番目のユーザーからこの接続で接続できるようになります(私が試した1つだけ):

(localdb)\.\MySharedInstance

しかし、sqlcmdからは、どのように接続しようとしてもエラーが発生します。

sqlcmd -S "(localdb)\.\MySharedInstance"
sqlcmd -S ".\MySharedInstance"
sqlcmd -S "(localdb)\MySharedInstance"
sqlcmd -S "GREENHORNET\MySharedInstance"
sqlcmd -S ".\LOCALDB#SH04FF8A"
sqlcmd -S "GREENHORNET\LOCALDB#SH04FF8A"

すべての利回り:

HResult 0xFFFFFFFF、レベル16、状態1 SQL Serverネットワークインターフェイス:

指定されたサーバー/インスタンスの検索中にエラーが発生しました[xFFFFFFFF]。

Sqlcmd:エラー:Microsoft SQL Server Native Client 10.0:SQL Serverへの接続を確立中にネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからないか、アクセスできません。インスタンス名が正しいかどうか、およびSQL Serverがリモート接続を許可するように構成されているかどうかを確認してください。詳細については、SQL Server Books Onlineを参照してください。

Sqlcmd:エラー:Microsoft SQL Server Native Client 10.0:ログインタイムアウトの期限が切れました。

インスタンスがリモート接続を受け入れるように設定されていることを確認しましたが。したがって、sqlcmdが通過しなければならない他のフープがあります。

そしてsqllocaldb exeに関して、これはどのように論理に従いますか? infoを介してインスタンスがあることを確認できます。インスタンスを停止しようとすると、適切なエラーメッセージが表示されます。開始しようとすると、[すでに]開始されているというメッセージが表示されますが、それに接続しますか?

enter image description here

したがって、あなたがneedsqlcmdアクセスしない限り、短期的には、セカンダリユーザーにSSMSを使用して(適切なアクセス許可が付与されたら)実行してもらい、Krzysztofで詳細を確認できます他のアイテムに。


4.0.2アップデートに関しては、 http://connect.Microsoft.com/SQLServer/feedback/details/723737/smo-cant-connect-to-localdb-instances から:

LocalDBインストーラーに.NET Framework 4.0.2を含めないことを明示的に決定しました。 .NET Framework更新プログラムをインストールすると、LocalDBインストーラーのサイズが大きくなり、再起動が発生する可能性があります。 LocalDBは.NETから独立するように構築されているため、LocalDBのインストールごとにこのコストを費やす必要があるとは考えていませんでした。将来の.NETバージョン(.NET 4.5を含む、現在CTPに含まれる)は、そのままでLocalDBをサポートする予定です。また、一部の開発者は、ODBC、PHP Driver/PDO、および将来的にはJDBCを選択することを希望する場合があります。これらの開発者は.NETの更新に興味がありません。

23
Aaron Bertrand

元の投稿が示唆したように、これは予想されるほど簡単ではありませんでしたが、最終的に名前付きパイプを介して接続することができました。

Connecting to a LocalDB instance via named pipe

8
Russell Speight

これはインスタンスの削除を前提としていますIS OK。
ie:すべてのデータが失われ、それで問題ありません。

SSMSをアップグレードした後、同じ問題が発生していました。

sqllocaldb i
.\MyCustomInstance

sqllocaldb d
LocalDb instance ".\MyCustomInstance" does not exist!

sqllocaldb i .\MyCustomInstance
Windows API call "FileTimeToSystemTime" returned error code: -2147024809.

問題のあるインスタンスを取り除くために、もう1つMyCustomInstanceを作成する必要がありました。これにより、すでに存在するものが上書きされると思います。これで削除できます。

sqllocaldb c MyCustomInstance
LocalDB instance "MyCustomInstance" created with version 11.0.
sqllocaldb d .\MyCustomInstance
LocalDB instance ".\Octopus" deleted.

次に、インスタンスを起動して共有します。最初にインスタンスを起動する必要があります。

sqllocaldb s MyCustomInstance
LocalDB instance "MyCustomInstance" started.
sqllocaldb h MyCustomInstance MyCustomInstance
Private LocalDB instance "MyCustomInstance" shared with the shared name: "MyCustomInstance".

接続する必要があるときは、(localdb)\.\MyCustomInstance

1
ton.yeung

完全な.NET Framework 4.5.2以降をインストールしますその後、再起動。これで、次を使用して接続できます。

sqlcmd -S (localdb)\.\MySharedInstance

名前付きパイプがマシンの再起動時に新しいハッシュを生成することを発見しました。名前付き共有インスタンスは再起動後も存続します。

再起動するまで機能しないことに注意してください。

0
Wili Whitelaw