27

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」コマンドでエラーがスローされるのはなぜですか?

4

5 に答える 5

25

別の編集

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"

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

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

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

編集

所有者以外のユーザーをインスタンスに追加する必要があります。たとえばCREATE LOGIN [MyDomain\OtherUser] FROM WINDOWS;、適切なパーミッションも追加する必要があります。私のテストでは、ログインに失敗し、間違ったエラー メッセージが生成されました (「FileTimeToSystemTime」エラー メッセージはバグです)。また、する必要がありGRANT CONNECTます。これを行う、この接続で Management Studio を使用して 2 番目のユーザーから接続できるようになります (私が試した唯一の接続です)。

(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 オンライン ブックを参照してください。

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

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

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

ここに画像の説明を入力

したがって、アクセスが必要 sqlcmdでない限り、短期的にはセカンダリ ユーザーに 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 ドライバー/PDO、および将来的にはおそらく JDBC にもオプトインしたいと考えているかもしれません。それらの開発者は、.NET の更新に関心がないでしょう。

于 2012-04-18T18:46:00.487 に答える
9

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

名前付きパイプ経由で LocalDB インスタンスに接続する

于 2014-01-10T05:23:35.613 に答える
1

この回答は、インスタンスの削除に問題がないことを前提としています。
つまり、すべてのデータが失われますが、それで問題ありません。

SSMSをアップグレードした後、私は同じ問題を抱えていました。

sqllocaldb i
.\MyCustomInstance

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

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

問題のあるインスタンスを取り除くために、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

于 2016-08-26T16:23:41.480 に答える
-4

問題は、データベース名を引用する必要があることです:

sqlcmd -S "(localdb)\.\MySharedInstance"
于 2012-11-23T16:02:44.733 に答える