none
1つのテーブルを複数パブリッシュする際にエラーが発生することがある RRS feed

  • 質問

  • お世話になっております。

    Management Studioでマージパブリケーションを作成する際、特定の状況でエラーが発生します。

    SQL Server 2008 + SSMS(10.0.1600.22)

    (1) 適当にテーブルを作成する。

    (2) そのテーブルのマージパブリケーションを作成する。

    (3) そのパブリケーションのアーティクルのプロパティを開き、
    何か「カスタム競合回避モジュール」を選択する。

    (4) もう一つマージパブリケーション作成を試みる。
    (4)-1 [新しいパブリケーション]ウィザードを開く
    (4)-2 パブリケーションの種類:マージ
    (4)-3 「パブリッシュするオブジェクトの選択」で先ほどのテーブルにチェック
    ・・・
    (4)-4 [作成]ボタンをクリック

    (5) 作成の段階でエラーが発生します。
    エラーの例:
    >指定した競合解決情報は、'Microsoft SQL Server Additive Conflict Resolver' が競合の解決に
    >使用する有効な列名を示していません。


    対処療法ですが、一度「パブリッシュするオブジェクトの選択」ページまで戻って
    アーティクルのプロパティを開き、OKボタンを押してから[作成]すると成功しました。


    明らかにSSMSの不具合のような気がしますが、他の方の環境では再現しますでしょうか。
    2010年5月8日 7:34

回答

  • 補足&自己解決(?)です。

    確実に再現するカスタム競合回避モジュールは
    'Microsoft SQL Server Additive Conflict Resolver'
    ではなく
    自作のビジネスロジックハンドラです。

    また、そのときのエラーは以下の通りです。
    >指定したアーティクル解決モジュールは無効、または存在しません。


    通常、アーティクルのプロパティで自作のビジネスロジックハンドラを選択し、
    「競合回避モジュールが必要とする情報の入力」を空にしてOKを押すと
    自動的に アセンブリ+型名 が入ってきますが、

    パブリケーションウィザードでは「アーティクルのプロパティ」を開かないと
    「競合回避モジュールが必要とする情報の入力」が空のままのため
    作成する時点でエラーが出る、ということのようです。


    仕様といえば仕様なんでしょうけど、たくさんのアーティクルがあるときは
    いちいち「アーティクルのプロパティ」を開いては閉じる羽目になるので大変です・・・

    • 回答としてマーク 山本春海 2010年5月13日 8:23
    2010年5月8日 9:17

すべての返信

  • 補足&自己解決(?)です。

    確実に再現するカスタム競合回避モジュールは
    'Microsoft SQL Server Additive Conflict Resolver'
    ではなく
    自作のビジネスロジックハンドラです。

    また、そのときのエラーは以下の通りです。
    >指定したアーティクル解決モジュールは無効、または存在しません。


    通常、アーティクルのプロパティで自作のビジネスロジックハンドラを選択し、
    「競合回避モジュールが必要とする情報の入力」を空にしてOKを押すと
    自動的に アセンブリ+型名 が入ってきますが、

    パブリケーションウィザードでは「アーティクルのプロパティ」を開かないと
    「競合回避モジュールが必要とする情報の入力」が空のままのため
    作成する時点でエラーが出る、ということのようです。


    仕様といえば仕様なんでしょうけど、たくさんのアーティクルがあるときは
    いちいち「アーティクルのプロパティ」を開いては閉じる羽目になるので大変です・・・

    • 回答としてマーク 山本春海 2010年5月13日 8:23
    2010年5月8日 9:17
  • これは提案になりますが、

    パブリケーション作成ウィザードにおいて、アーティクルの競合回避モジュールにカスタムビジネスロジックが
    デフォルト選択されている場合は「競合回避モジュールが必要とする情報の入力」にも
    デフォルト値(※)を代入しておくべきだと思います。

    ※ ロジック登録時(sp_registercustomresolver)に渡したdotnet_class_nameの値


    # と言いつつ、アーティクルのプロパティを開くと代入されていることがあります。(なぜかページ全体がグレーアウトしていますが)
    # それにも関わらず、プロパティを開かずに[作成]するとやはり「指定したアーティクル解決モジュールは無効、または存在しません。」というエラーが出ます。

    もう仕様なのかバグなのか分かりません・・・
    2010年5月10日 2:31