はじめに
- パブリッシャー:SQL Server 2012
- サブスクライバー:SQL Server 2016
で設定しましたが、今回は
- パブリッシャー:SQL Server 2017
- サブスクライバー:SQL Server 2016
というパブリッシャー側の方がバージョン上の場合にレプリケーションできるかを確認していきます。
また、サブスクライバーのSQL Server 2016にはまだ前回のレプリケーション設定が残っており、パブリッシャー2台からサブスクライバー1台に対してレプリケーションが可能かも併せて確認する予定です。
- 関連記事はこちら
capybara-engineer.hatenablog.com
capybara-engineer.hatenablog.com
実施作業
サンプルDB作成
以下の記事を参考にパブリッシャーのSQL ServerにサンプルDBを作成します。
capybara-engineer.hatenablog.com
途中の手順は省略しますが、作成ができました。
レプリケーション事前設定
スナップショットフォルダー準備
レプリケーション時に作成されるスナップショットの作成フォルダを作ります。
※設定内容は前回記事を参照
ディストリビューション構築
レプリケーション元DBでディストリビューションを構築していたところ、以下のエラーが発生しました。
以下のURLを見るとどうやらSQL Serverエージェントを自動起動するように設定する部分でエラーとなっているようです。
www.sqltact.com
一度ディストリビューションの設定を削除し、設定時にエージェントの起動方法を変更しない設定で再度作成することでエラーは発生しないようになりました。
※エラーが発生した場合の追加設定
SQL Serverエージェントのサービスを手動で自動起動するように設定します。
SSMSのSQLServer Agnetを起動させます。
レプリケーション設定
パブリッシャー構成
今回のパブリッシュ対象のデータは全テーブルを対象とします。
フィルターも設定せずに全期間が対象です。
Local Publicationsフォルダ配下に作成されていれば完了です。
スナップショット生成の状態を表示
スナップショットエージェントが正常に実行されていることを確認します。
作成したスナップショットフォルダにもファイルが作成されていることが確認できます。
repl_distributionユーザのPAL追加
作成したパブリッシャーのPALにスナップショットやログを転送するユーザを追加します。
サブスクリプションの作成
サブスクライバーの設定をしていきます。
今回は設定をするSSMSのバージョンがサブスクライバー側より上なのでGUIでレプリカ用DBを新規作成します。
前回はTSQLで設定したDistribution Agentも今回はGUIで設定します。
問題なく作成ができました。
サブスクライバー側のデータベース権限を設定
db_ownerロールを設定します。
サブスクリプションの同期状態を表示
前回と同じエラーが発生しました。
前回記事の原因調査3で解決した、DBのownerを設定する手順を実施します。
LogReaderのジョブを再起動します。
それでもダメなようなので、調べたところCREATE TABLEでUser Defined Functionsを呼び出しているようなので、サブスクリプション対象に追加します。
今度は別のエラーが出ました。
ここら辺が原因なような気がしますが、今回は何かしらのデータが同期できれば良いので、同期対象を変更します。
stackoverflow.com
同期可能なデータのみ同期します。
SQL Server Agentを再起動したところ、問題なく同期されました。