2009-05-01 1 views
3

マージレプリケーションに問題があります。パブリッシャーはSQL Server 2008を実行し、2人のユーザーは2005年を実行します。パブリッシャーはALTER TABLE Foo SET (LOCK_ESCALATION)コマンドを加入者に送信しようとしています。私はこのコマンドがSQL Server 2008で新しくなったことを読んで覚えていると思います。もしそうなら、2005年のサーバーでコマンドが失敗するのは当然です。ただし、マージレプリケーションは2005年の互換性のために設定されています。テーブルのLOCK_ESCALATIONの設定時にマージレプリケーションが失敗するのはなぜですか?

スキーマスクリプト 'OBJECT_ID(N場合' [DBO]。[ユーザー] ')(ALTER TABLEは、[DBO]。[ユーザー] SET(LOCK_ESCALATION =表) ')' ができヌルEXECではありません'加入者に伝播されない。

私たちの出版社がなぜこれをしようとしているのでしょうか?

編集:当社の2008サーバーの互換性レベルが設定されているのは、「SQL Server 2005の(90)」

+1

SQL Server 2008のバグを確認しました.SQL Server 2011までは修正されていない可能性があります。(https://connect.microsoft.com/SQLServer/feedback/details/536571) – hangy

答えて

5

そのので、あなたのセットアップは、あなたがかもしれないがどのように複雑に応じて、2005年にサポートされていないSQL Server 2008の新機能データベースにSQL 2008の機能を追加しないように、データベースを互換性90(SQL 2005)で実行することを検討してください。スキルデータのレプリケーションに大きな問題がありました。私は常にそれをダムにしてデータを管理するようにしました。マージレプリケーションで32人のサブスクライバを持つマージシステムをサポートしなければならず、スキーマの変更をプッシュしたときに大きなスキーマの問題が絶えず発生しました。

これは、文書化されているように動作する場合、ロックの変更をプッシュしようとすべきではないと述べました。サブスクリプションがsql 2005 compatibleとしてマークされていることを確認してください。

しばらく前に新しいロックタイプのSQL devの男 blogged

一つ(例えば)彼らはデータ型に対して行ったように、2008年から2005年までの設定の自動マップを作成していない。その可能性

+1

私の疑惑を確認してくれてありがとう互換性オプション。残念ながら、互換性レベル*は90に設定されています。 –

+0

がコメント用に更新されました。おそらく2008年の複製のバグです。 msdnの記事には書かれていませんhttp://msdn.microsoft.com/en-us/library/ms143241.aspx – u07ch

4

これは、この命令とSQL Server 2005との互換性がなく、複製しているテーブルでスキーマ変更を行うと、この命令がスキーマの変更に反映されるためです。

2つの方法があります:サスペンスを削除して再度作成します。サスペンスは本番サーバーにあるときは適用できません。第二の方法は、データベース内のsysmergeschemachangeテーブルに移動し、このような何かを持っている行を削除です:

スキーマスクリプト「 OBJECT_ID(N場合」[dboは] [ユーザーは] '。) ではありませんnull exec( 'ALTER TABLE [dbo]。[Users] SET(LOCK_ESCALATION = TABLE)') ' は サブスクライバに伝播できませんでした。

これが役立ちます。

+0

そのテーブルから 'DELETE'行が少し怖いですが、私はそれを試しました。私のために。 – hangy

関連する問題