2009-03-05 7 views
3

DB1とDB2の2つのデータベースがあります。
DB1には、DB2内のデータにもアクセスするすべてのストアド・プロシージャが含まれています。
DB1はシノニムを使用してDB2のテーブルにアクセスします。
(私たちの状況では同義語を使用する必要があります)SQL Server:Express Editionの同義語に関するスナップショット・トランザクションの問題

これは、SQL Server 2005 Developer Editionのあらゆる状況で問題なく動作します。私たちは、次のないとき

しかしExpress Editionの中で、我々は例外を取得:これは以下になります

set transaction isolation level snapshot
begin transaction
declare @sQuery varchar(max)
set @sQuery = 'Select * from synToSomeTableInDB2'
exec (@sQuery)
commit transaction


1 SQL Serverを再起動し
2 DB1内に次のコードを実行しますエラー:

Snapshot isolation transaction failed in database '...' because the database was not recovered when the current transaction was started. Retry the transaction after the database has recovered.

EXECを使用せずに使用した場合、またはDeveloper Editionで実行した場合も、同じselectクエリが正常に処理されます。
一度DB2に接続すると、コードはSQL Server Express Editionでも正常に実行されるため、手順1でサーバーを再起動することは重要です。

これは何ですか?動的クエリーにはEXECを使用できる必要があります。 MSDNをチェックしてGoogleを検索しました... 助けを歓迎します。

---編集:March 10 09
下記のEd Harperと同様に、私はバグレポートを提出しました。
https://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=422150

答えて

3

Microsoft Connectを介して見られるように、問題は、SQL ServerのExpress Editionの上、デフォルトでAUTO_CLOSEオプションがに設定されていることです。
このオプションをに変更すると、偽が問題を解決します。

1

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

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

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

+0

再起動は、以前にDB2への接続が行われていないことを確認するためにのみ必要です。以前にDB2に接続していない限り、経過時間に関係なくエラーが発生します。 – Marc

+0

サーバーログを確認しました。エラーはありません。 「復旧が完了しました」と「DB1/DB2を起動しています」と表示されます。大丈夫だと思われる。 – Marc

+0

Expressでバグのように聞こえます。データベースサービスを再起動した後で、失敗したトランザクションを実行させることで対処できますか? –

関連する問題