1

次のようなbatファイルを使用してSQLServer2008R2にデータをインポートしています。

sqlcmd -E -S fooserver -d fooDB -e -i foo.sql -o foo.output
sqlcmd -E -S fooserver -d fooDB -e -i bar.sql -o bar.output
sqlcmd -E -S fooserver -d fooDB -e -i baz.sql -o baz.output
sqlcmd -E -S fooserver -d fooDB -e -i qux.sql -o qux.output

Developer Editionインスタンスを指すと、すべて正常に機能します。ただし、SQL Expressインスタンスをポイントすると、最初の2つほどのコマンドは正常に実行され、次のコマンドは認証エラーで失敗します。

Login failed for user 'MYDOMAIN\FOOUSER'. Reason: Failed to open the explicitly specified database. [CLIENT: <local machine>]

ただし、上記のコマンドを一度に1つずつ実行すると、すべてエラーなしで実行されます。

また、対象のデータベースが一時的にリカバリモードになり(SQL Server Management Consoleのデータベースの横に「リカバリ中」と表示されます)、ターゲットDBが一時的にリカバリモードになっているため、ログインに失敗したように見えることも注目に値します。この問題はDeveloperEditionインスタンスでは発生しないことを繰り返します。

SQL Express 2008 R2 RTMおよびSP2(SP1はまだテストされていません)に対して同じ問題が観察されました。

4

1 に答える 1

2

解決策を探してこの質問にたどり着いた人にとっては、データベースの「自動クローズ」オプション(SQLServer管理コンソールの[MyDatabase]->[Properties]-> [Options])が原因であることが判明しました。Developerエディションのインスタンスでは、デフォルトは「false」のように見えますが、SQLExpressインスタンスのデフォルトは「true」です。

私にとって失敗したsqlcmdは、大量のデータを挿入したsqlcmdに続き、おそらく、自動クローズロジックが次のsqlcmdとオーバーラップするのに十分な作業を引き起こしました。

于 2012-10-18T16:04:27.367 に答える