KB3197883 - 修正: トランザクション レプリケーションで SQL Server 2016 ディストリビューターに UDF を公開するとスナップショット エージェントが失敗する

適用先
SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2016 Service Pack 1

現象

Microsoft SQL Server 2016 がディストリビューターとして機能し、SQL Server 2014 または SQL Server 2012 がパブリッシャーとして機能するセットアップがあるとします。 このセットアップでは、SQL Server 2012 または SQL Server 2014 Publisher にアーティクルとしてユーザー定義関数 (UDF) を使用してスナップショット、トランザクション、またはマージ文書を作成すると、UDF のスクリプト作成中にスナップショット エージェントが失敗し、次のようなエラー メッセージが表示されます。

注

UserDefinedFunction 'schema.functionname' のスクリプトに失敗しました

スナップショット エージェントのジョブ履歴には、次のエラー メッセージが表示されます。

注

<DateTime> [5%] レプリケーション エージェントで例外が発生していた
<DateTime> ソース: 不明
<DateTime> 例外の種類: Microsoft.SqlServer.Management.Smo.FailedOperationException
<DateTime> 例外メッセージ: UserDefinedFunction 'schema.functionname' のスクリプトに失敗しました
<DateTime> メッセージ コード: 該当なし

原因

この問題は、スナップショット エージェント が SMO Miscrosft.SqlServer.Smo.dll を使用して記事をスクリプト化するために発生します。 SQL Server 2016 では、In-Memory 関数/ストアド プロシージャ用に新しい SMO プロパティ IsNativelyCompiled が追加されています。 このプロパティは、SQL Server 2016 より前のバージョンの SQL Server では表示されません。 SQL Server 2016 のディストリビューターで スナップショット エージェント を実行すると、SQL Server 2016 の Microsoft.SqlServer.Smo.dll が使用されますが、SQL Server 2012 または 2014 Publisher に対して SMO プロパティ IsNativelyCompiled をチェックしようとすると、上記のエラーで失敗します。

解決策

この問題は、次の SQL Server の累積的な更新プログラムで修正されています。

SQL Server 2016 SP1 の累積的な更新プログラム 2

SQL Server 2016 の累積的な更新プログラム CU 38

SQL Server 用の累積的な更新プログラムについて

SQL Server 用の新しい累積的な更新プログラムには、以前の累積的な更新プログラムに含まれていたすべての修正プログラムとすべてのセキュリティ修正プログラムが含まれています。 SQL Server の最新の累積的な更新プログラムを確認してください。

SQL Server 2016 の最新の累積的な更新プログラム

回避策

この問題を回避するには、サブスクライバーでユーザー定義関数 (UDF) を手動で作成します。

状態

Microsoft は、これが "適用対象" セクションに記載されている Microsoft 製品の問題であることを確認しました。

参考資料

マイクロソフトでソフトウェア更新プログラムの説明に使用する用語集を参照してください。