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
再起動は、以前にDB2への接続が行われていないことを確認するためにのみ必要です。以前にDB2に接続していない限り、経過時間に関係なくエラーが発生します。 – Marc
サーバーログを確認しました。エラーはありません。 「復旧が完了しました」と「DB1/DB2を起動しています」と表示されます。大丈夫だと思われる。 – Marc
Expressでバグのように聞こえます。データベースサービスを再起動した後で、失敗したトランザクションを実行させることで対処できますか? –