現象
Microsoft SQL Server 2008 ではトランザクションレプリケーションを使用していますが、このパブリケーションでは更新クエリが実行されていることを前提としています。 Sql Server を SQL Server 2012 または SQL Server 2014 にアップグレードするときに、更新クエリがアップグレード前に配布されていないと、ログリーダーエージェントが次のエラーで失敗することがあります。
<Date> <Time> Publisher: {call sp_replcmds (500、0、0、、0、50万)}<日付> <時刻> 状態: 0, code: 20011, text: ' sp_replcmds "<">"という パブリッシャー名 ' で実行できませんでした。<Date> <Time> プロセスで '<パブリッシャー名>' の ' sp_replcmds ' を実行できませんでした。<Date> <Time> Repl Agent Status: 6<Date> <Time> status: 0, code: 542, text: ' 無効な datetime 値が検出されました。 値の年が9999年を超えています。<Date> <Time> 状態: 0, コード: 3621, text: ' ステートメントは終了しました。 '<Date> <Time> 状態: 0, code: 22037, text: '<パブリッシャー名>'. ' の ' sp_replcmds ' を実行できませんでした。
この問題が発生していない場合でも、update ステートメントのアップグレードされたログレコードは、ログリーダーエージェントによって解釈され、次のエラーが発生する可能性があります。
515では、列 '<列名>'、テーブル '<テーブル名>' に値 NULL を挿入することはできません。column では null を使うことはできません。 更新が失敗します。
注:
-
データ型と制約の違いにより、異なるエラーが報告されることがあります。この問題は、非収束の原因になる可能性もあります。
-
この問題は、SQL Server 2008 または SQL Server 2008 R2 から SQL Server 2012 または SQL Server 2014 にアップグレードした場合に発生します。
解決方法
"515 は、列 '<列名>' に値 NULL を挿入できない場合、テーブル '<テーブル名>';column では null を使うことはできません。 ディストリビューションエージェントで更新が失敗しました。レプリケーションを再初期化する必要があります。 この修正プログラムでは、このエラーは解決されません。 このエラーを回避するには、アップグレードする前にログリーダーエージェントを無効にしてから、この修正にアップグレードして、ログリーダーエージェントを再度有効にする必要があります。この問題は、次の SQL Server の累積的な更新プログラムで最初に修正されました。
SQL Server 2012 SP2 の累積更新プログラム2 /en-us/help/2983175
SQL Server 2014 の累積更新プログラム3 /en-us/help/2984923
SQL Server 2012 SP1 の累積更新プログラム11 /en-us/help/2975396
SQL Server 用の新しい累積更新プログラムには、以前の累積的な更新プログラムに含まれていたすべての修正プログラムとすべてのセキュリティ修正が含まれています。 SQL Server の最新の累積的な更新プログラムを確認します。
状態
マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。