SQL Server:Express Editionの同義語に関するスナップショットトランザクションの問題

StackOverflow https://stackoverflow.com/questions/614178

質問

2つのデータベース、たとえばDB1とDB2があります。
DB1には、DB2のデータにもアクセスするすべてのストアドプロシージャが含まれています。
DB1は同義語を使用してDB2のテーブルにアクセスします。
(シノニムを使用することは私たちの状況の要件です)

これは、SQL Server 2005 Developer Editionのすべての状況で完全に機能します。

ただし、Express Editionでは、次の操作を行うと例外が発生します。
1 SQL Serverを再起動します
2 DB1内で次のコードを実行します。

  

トランザクション分離レベルのスナップショットを設定
  トランザクションを開始
  @sQuery varchar(max)
を宣言します   set @sQuery = 'select * from synToSomeTableInDB2'
  exec(@sQuery)
  トランザクションをコミット

これにより、次のエラーが発生します。

  

スナップショット分離トランザクションは、データベース '...'で失敗しました。現在のトランザクションの開始時にデータベースが回復されなかったためです。データベースが回復したら、トランザクションを再試行してください。

EXECを使用せずに使用する場合、またはDeveloper Editionで実行する場合、同じ選択クエリは問題なく通過します。
ステップ1でサーバーを再起動することは重要です。DB2への接続が確立されると、SQL Server Express Editionでもコードが正常に実行されます。

これが何であるか誰にも分かりますか?一部の動的クエリにはEXECを使用できる必要があります。 既にMSDNをチェックし、Googleを検索しました... どんな助けも大歓迎です。

---編集:3月10日09
以下のエド・ハーパーと議論したように、私はこのためのバグ報告を提出しました。
https://connect.microsoft.com/SQLServer/feedback/ViewFeedbackを参照してください。 .aspx?FeedbackID = 422150

役に立ちましたか?

解決

Microsoft Connect で判明した問題SQL Server Express Editionでは、デフォルトで AUTO_CLOSE オプションが true に設定されています。
このオプションを false に変更すると、問題が修正されます。

他のヒント

エラーメッセージは、クエリを実行するときにサービスの再起動後もSQLサーバーがデータベースを回復しているため、クエリが失敗することを示しています。

サービスが再起動されてからの経過時間に関係なく、このコードを最初に実行しようとしたときに常にエラーが発生しますか?

再起動後にデータベースが正しく回復していることをSQL Serverログから確認できますか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top