5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

IBM i Migrate While Active のオブジェクト毎のコピー方式について

Last updated at Posted at 2025-02-04

yoichi_nakamuraさんのこちらの記事を読みましてインスパイアされました(感謝♪)IBM i Migrate While Active  をちょっと調べてみました。

IBM i Migrate While Active とは

上記yoichi_nakamuraさんの記事をご参照ください。
個人的に要点を抜き出すと、、

  • 同一のバージョン、PTFレベルのIBM i 同士でのシステム移行を想定した機能
  • オンプレ・クラウドは問わず利用可能
  • 当機能はSYSBAS(ASP1~32)だけが対象(IASPはIBM i OSの別機能またはベンダーツールで移行できる)
  • ベースとなったDb2 Mirror for i では2つのIBM i システムでActive-Activeの負荷分散構成がとれたり、逆方向への複製もサポートされますが、当機能は一方方向の複製のみサポート(Active-Active構成もとれない)

Db2 Mirror for i と IBM i Migrate While Active の関係性?

調べてないので機能面比較から一部推測ありになってしまいますが、

  • Db2 Mirror for i はOracle RAC的な冗長化システムを構成するのが主目的で、そのためのオブジェクトのほぼリアルタイムな2システム間同期を目的としています。この機能を基本的には踏襲して(一部制限して&非同期モード前提に修正して?)IBM i Migrate While Activeでも利用しているようです。以下に記載している、「Db2ミラーのレプリケーション適格なオブジェクト」と「疑似オブジェクト」に該当するオブジェクトタイプがD2b Mirror for i の複製対象オブジェクトとほぼ同一だからです。
  • IBM i Migrate While Active は2システム間のマイグレーションが目的なので上記で対象外となるオブジェクトの複製機能を追加している。これらには「Non-Db2 ミラーレプリケーション適格オブジェクト」、「IFSオブジェクト」がある。
    という事になると思います。

オブジェクトの種類ごとの複製方式

ということで、上記のオブジェクトの複製カテゴリー別に要約してみます。(マニュアルページはこちらです。)オブジェクトの種類と移行

※図式化するとこんな具合になると思います。
image.png

サマリーすると

  • ①Db2ミラーのレプリケーション適格なオブジェクト(ミラー複製オブジェクトと表記します)
    Db2 Mirror for iと同様にIBM i OSが元システム(ソース・ノード)のオブジェクトの変更を検知しほぼリアルタイムにターゲットシステム(コピー・ノード)にオブジェクトの複製を行う。たとえばデータベース・テーブルの場合、追加・更新されたレコードだけが複製される。(テーブルがまるまる再コピーされるわけではない)。ミラー・レプリケーションと呼ばれる。
  • ②Non-Db2ミラーレプリケーション適格オブジェクト(非ミラー複製オブジェクトと表記します)
    ①に該当しないライブラリーに存在しているオブジェクトを複製する機能で、ソース・ノードでオブジェクトを保管してコピー・ノードにオブジェクトを復元する。
  • ③IFSオブジェクト
    狭義のIFS(=/QSYS.LIB以外のディレクトリー配下のオブジェクト)を複製する。②と同じくソース・ノードでオブジェクトを保管してコピー・ノードにオブジェクトを復元する。
  • ④疑似オブジェクト
    疑似オブジェクトとは、IBM i OSのシステム値などIBM i OSが内部的に属性として保持している情報・設定についてソース・ノードからコピー・ノードに反映させる機能

①ミラー複製オブジェクト(正式には、Db2ミラーのレプリケーション適格なオブジェクト)

以下のオブジェクトタイプが対象
ただし、QGPL、QTEMP、QSYS、QUSRSYSなどQxxxという名前のIBM i システム提供ライブラリーについては対象外。

オブジェクト・タイプ 説明 コメント
*DTAARA データエリア
*DTAQ データキュー タイプ *DDM, *DSP のデータキューは対象外
*FILE ファイル Db2 for iテーブル、プログラムソース等。タイプ *DSPF, *PRTF、*TBL、*ICFF、CMNF、およびSAVF は対象外
*JOBD ジョブ記述
*JOBQ ジョブキュー
*JRN ジャーナル  リモートジャーナルは対象外
*LIB ライブラリー
*OUTQ 出力待ち行列 OUTQ内のスプールファイルはすべて複製される。スプールファイルを個別に複製指定は不可。
*PGM プログラム
*SQLPKG SQLパッケージ 拡張ダイナミックパッケージは対象外
*SQLUDT SQLユーザー定義タイプ
*SQLXSR SQL XMLスキーマリポジトリー
*SRVPGM サービス・プログラム
*USRIDX ユーザー索引
*USRSPC ユーザースペース
:-: :-: :-:
*AUTL 権限リスト
*USRPRF ユーザー・プロファイル ユーザーID

デフォルトはすべてのユーザー・ライブラリーが複製対象になるが、Db2Mirrorレプリケーション基準リスト(RCL)に除外ルールとして追加すると除外も可能

マニュアル記載の除外設定のSQL例
ライブラリー COOLSTUFF を除外する

--
-- Pause Migrate While Active data synchronization
--
CALL QSYS2.CHANGE_MIGRATION_MANAGER("ACTION" => 'PAUSE');

--
-- Exclude the COOLSTUFF library, and all objects within, from 
-- Migrate While Active's data synchronization
--
CALL QSYS2.ADD_REPLICATION_CRITERIA(INCLUSION_STATE => 'EXCLUDE',
                                    IASP_NAME       => '*SYSBAS',
                                    LIBRARY_NAME    => 'COOLSTUFF',
                                    APPLY           => 'ACTIVE'); 
                                    
--
-- Resume Migrate While Active data synchronization
--
CALL QSYS2.CHANGE_MIGRATION_MANAGER("ACTION" => 'SYNCHRONIZE');

②非ミラー複製オブジェクト(正式にはNon-Db2 ミラーレプリケーション適格オブジェクト)

ミラーレプリケーションではなく保管・復元方式でレプリケーションされるオブジェクト。ライブラリーに存在するオブジェクトが対象(=狭義のISF上のオブジェクトは対象外)

オブジェクト・タイプ 説明 コメント
*ALRTBL 警報テーブル
*BNDDIR バインディング・ディレクトリー
*CHTFMT 図形フォーマット
*CLD C/400 ロケール記述
*CMD コマンド
*CSI 通信サイド情報
*DTAQ データ・キュー タイプ*DSPF, *DDM が対象
*FCT 用紙制御テーブル
*FILE ファイル タイプ *DSPF, *PRTF、*TBL、*ICFF、CMNF、およびSAVF が対象
*FNTRSC フォントリソース
*FNTTBL フォントテーブル
*FORMDF フォーマット定義
*FTR フィルター
*IGCDCT DBCS変換辞書
*JRN ジャーナル リモート・ジャーナルが対象
*LOCALE ロケール
*MEDDFN 媒体定義
*MENU メニュー
*MGTCOL マネジメントコレクション(パフォーマンスデータ)
*MODULE プログラム・モジュール
*MSGF メッセージ・ファイル
*MSGQ メッセージ・キュー ただし、メッセージキュー内のエントリーは複製・同期されない
*NODL ノードリスト
*OVL オーバーレイ
*PAGDFN ページ定義
*PAGSEG ページセグメント
*PDFMAP PDFマップ
*PDG 印刷記述グループ
*PNLGRP パネルグループ
*PSFCFG PSF印刷構成
*QMFORM 照会管理機能書式
*QMQRY QUERY管理機能PGM
*QRYDFN QUERY for i 定義
*SBSD サブシステム定義
*SCHIDX 検索見出し
*SSND セッション記述
*TBL テーブル
*USRQ ユーザー待ち行列
*VLDL 妥当性検査リスト
*WSCST ワークステーションカスタマイズオブジェクト

システムライブラリー内のオブジェクト
以下のライブラリー内のオブジェクトも複製対象です。ただし、これらはシステム移行フェーズで1度だけ(最初の複製で)移行されます。これ以降に変更された場合でもオブジェクトの複製し直しなどはされないので注意。 変更を反映させるにはユーザー操作による保管・復元になると思います。

※システム・ライブラリー内とは、QDOC、QPASE、QQALIB、QSHELL、QSYSDIR、QSYS、QSYS2、QTCP、QUTL、QGPL、QUSRSYS、および名前がQで始まるその他のIBM iシステム・ライブラリです。

〇:複製されるもの
NA:そのライブラリーには作成不可なオブジェクト(※ではなくて単に当機能で複製×だけかも・・のち確認します)

オブジェクト・タイプ 説明 システムライブラリー内 ユーザーライブラリー内 コメント
*CFGL 構成リスト
*CNNL 接続リスト NA
*COSD サービスクラス記述 NA
*CRG クラスターリソースグループ NA
*CRQD 要求記述の変更 NA
*CSPTBL システム間製品表 NA
*CTLD 制御装置記述 NA
*DEVD 装置記述 NA
*DOC 文書オブジェクト NA
*DDIR 分散フィアル・ディレクトリー NA
*DSTMF 分散ストリームファイル NA
*DTADCT データディクショナリー NA
*EDTD 編集記述 NA
*EXITRG EXIT登録 NA
*FLR フォルダー NA
*GSS グラフィックスシンボルセット NA
*IGCSRT DBCSソートテーブル NA
*IGCTBL DBCSフォントテーブル NA
*IMGCLG イメージカタログ NA
*IPXD 内部パケット記述 NA
*JOBSCD ジョブスケジュール NA
*JRNRCV ジャーナルレシーバー NA ※1 初期移行されるがそれ以後の更新差分はコピーシステムに複製されない
*LIND 回線記述  
*M36 S/36拡張 NA
*M36CFG S/36拡張構成 NA
*MODD モード記述 NA
*NTBD NETBIOS記述 NA
*NODGRP ノードグループ NA
*NWID ネットワークインターフェース記述 NA
*NWSCFG NWS CONFIG NA
*NWSD NWSD構成 NA
*PRDAVL プロダクト可用性 NA
*PRDDFN プロダクト定義 NA
*PRDLOD プロダクトロード NA
*RCT 参照コード変換表 NA
*S36 S/36記述 NA
*SOCKET ソケット記述 NA
*SPADCT スペル援助辞書 NA
*SVRSTG NWSサーバーストレージ NA
*TIMZON タイムゾーン記述 NA

※1ジャーナルレシーバーの差分は移行されない。一方でジャーナルレシーバーでジャーナル出来る*FILE,*DTAARA,*DTAQ,*STMF,*DIR,*SYMLNKは更新情報もコピー・ノードに複製(ミラー)される点に要注意。(ジャーナルレシーバーの情報も手動同期させないと先のオブジェクトタイプの状態と整合性が崩れる可能性がある。
※1監査ジャーナルも同様に差分は当機能では移行されない。ユーザー操作による同期その他が必要になる。(ただし、監査対象オブジェクトの変更等は当機能でコピー・ノードに複製される)

システム・ライブラリとユーザー・ライブラリの比較には,
QSYS2.MIRROR_COMPARE_LIBRARYプロシージャを使用可能。

IBM i サービス SQLサンプル
ソース・ノードとコピー・ノードの間で、すべての 'non-Db2ミラー・レプリケーション適格オブジェクトを比較する。結果はファイルQGPL/ALLNONDB2Mに格納。

CL: SBMJOB CMD(RUNSQL SQL('CALL QSYS2.MIRROR_COMPARE_NODE(   COMPARE_SCOPE    => ''*SYSBAS'',
                                  RESULT_LIBRARY     => ''QGPL'',
                                  OBJECT_TYPE_LIST   => ''*ALLNONMIRROR'',
                                  RESULT_FILE        => ''ALLNONDB2M'',
                                  COMPARE_ATTRIBUTES => ''YES'',
                                  COMPARE_DATA       => ''NO'' 
                                  )') COMMIT(*NONE)) 
               JOB(MCOMPN) JOBMSGQFL(*PRTWRAP) LOG(4 00 *SECLVL);
--
-- Review any non-Db2 Mirror replication-eligible object differences, 
-- where the difference exists in a user library
--
SELECT *
    FROM qgpl.allnondb2m
    WHERE library_name NOT LIKE 'Q%'
    ORDER BY library_name, object_type;

--
-- Review any non-Db2 Mirror replication-eligible object differences, 
-- where the difference exists in an IBM i system library
--
SELECT *
    FROM qgpl.allnondb2m
    WHERE library_name LIKE 'Q%'
    ORDER BY library_name, object_type;

③IFSオブジェクト

SYSBAS内のIFS(狭義のIFS)のオブジェクトは殆どが当機能でコピー・ノードに保管・復元方式で複製される。ただし以下のIFSオブジェクトは複製されない。

オブジェクト・タイプ 説明 コメント
*BLKSF ブロック特殊ファイル
*DDIR 分散ファイルディレクトリー
*DSTMF 分散ストリームファイル
*SOCKET TCP/IPソケット定義

また当機能はUDFSユーザー定義ファイルシステムも複製しない。以下のIFSパスは複製対象外となる。

QNTC
/QOPT
/QSR
/dev
/QIBM/ProdData
/QIBM/UserData/OS
/QIBM/UserData/OS400
/QOpenSys/QIBM/ProdData
/QOpenSys/pkgs
/QOpenSys/var/cache/rpm
/QOpenSys/var/cache/yum
/QOpenSys/var/lib/rpm
/QOpenSys/var/lib/yum
/QTCPTMM/.TMP

***ソースノードとコピーノードのIFSの比較をするSQLが提供されている。 IFS_OBJECT_STATISTICSテーブル関数。

SQLサンプル
/home/’の開始パスの下にあるサブディレクトリとサブディレクトリ内のオブジェクトが、ソースノードとコピーノードで比較される。

CL: CRTLIB MIGIFS;

CREATE OR REPLACE TABLE MIGIFS.COMP_HOMES AS (
SELECT *
  FROM TABLE (
      QSYS2.COMPARE_IFS(
        START_PATH_NAME1     => '/home/', 
        START_PATH_NAME2     => '/home/',
        RDB2                 => 'QIBM_DB2M_00000', 
        OBJECT_TYPE_LIST     => '*ALL', 
        SUBTREE_DIRECTORIES  => 'YES',
        COMPARE_ATTRIBUTES   => 'YES')
    )
    ) WITH DATA ON REPLACE DELETE ROWS;

SELECT * FROM MIGIFS.COMP_HOMES;

他にも有用な情報がInfocenterページにありました。

④疑似オブジェクト

※疑似オブジェクト
システム・レベルの環境変数 (*ENVVAR)、セキュリティー属性 (*SECATR)、システム値 (*SYSVAL)、および機能使用法 ID (*FCNUSG)のソース・ノードからコピー・ノードへの複製について。

オブジェクト・タイプ 説明 当機能での複製
*ENVVAR システムレベルの環境変数 当機能、Db2 Mirror for i では複製されない。※2
*SECATR セキュリティ属性 当機能で差分含め複製される
*SYSVAL システム値 初期にすべてのシステム値がコピーノードに複製される。その後一部のシステム値の変更が差分複製される※3
*FCNUSG 関数使用識別子 当機能で差分含め複製される※4

※2 ソース・ノードとコピー・ノードのシステムレベル環境変数の比較用SQL
サンプル
コピー・ノードに欠けているシステムレベルの環境変数を把握し、コピー・ノード上で実行可能なCLコマンドを構築して、それらの環境変数を設定する

--
-- Generate a list of system level environment variables (*ENVVAR) that exist on the copy node
--
DECLARE GLOBAL TEMPORARY TABLE SESSION.REMOTE_ENVVARS (
      ENVIRONMENT_VARIABLE_NAME, ENVIRONMENT_VARIABLE_VALUE, ENVIRONMENT_VARIABLE_CCSID) AS
      (SELECT ENVIRONMENT_VARIABLE_NAME, ENVIRONMENT_VARIABLE_VALUE, ENVIRONMENT_VARIABLE_CCSID
          FROM QIBM_DB2M_00000.QSYS2.ENVIRONMENT_VARIABLE_INFO
          WHERE ENVIRONMENT_VARIABLE_TYPE = 'SYSTEM')
      WITH DATA
  WITH REPLACE;

--
-- List the system level environment variables (*ENVVAR) that exist only on the source node
--
SELECT SOURCE.ENVIRONMENT_VARIABLE_NAME, SOURCE.ENVIRONMENT_VARIABLE_VALUE,
       SOURCE.ENVIRONMENT_VARIABLE_CCSID
  FROM QSYS2.ENVIRONMENT_VARIABLE_INFO SOURCE
       LEFT EXCEPTION JOIN SESSION.REMOTE_ENVVARS COPY
         ON SOURCE.ENVIRONMENT_VARIABLE_NAME = COPY.ENVIRONMENT_VARIABLE_NAME
  WHERE SOURCE.ENVIRONMENT_VARIABLE_TYPE = 'SYSTEM';
  
--
-- Generate CL commands that can be executed on the copy node to create the 
--   missing environment variables
--
SELECT 'QSYS/ADDENVVAR ENVVAR(''' CONCAT SOURCE.ENVIRONMENT_VARIABLE_NAME CONCAT 
       ''') VALUE(''' CONCAT  SOURCE.ENVIRONMENT_VARIABLE_VALUE CONCAT 
       ''') CCSID(' CONCAT SOURCE.ENVIRONMENT_VARIABLE_CCSID CONCAT ') LEVEL(*SYS)' 
       AS ENVVAR_COMMANDS
  FROM QSYS2.ENVIRONMENT_VARIABLE_INFO SOURCE
       LEFT EXCEPTION JOIN SESSION.REMOTE_ENVVARS COPY
         ON SOURCE.ENVIRONMENT_VARIABLE_NAME = COPY.ENVIRONMENT_VARIABLE_NAME
  WHERE SOURCE.ENVIRONMENT_VARIABLE_TYPE = 'SYSTEM';

※3 差分複製されるのは、下記のシステム値

QALWOBJRST	QCURSYM	QHOUR	QSECOND
QCCSID	QDATE	QIGCCDEFNT	QSECURITY
QCENTURY	QDATETIME	QIGCFNTSIZ	QSRTSEQ
QCHRID	QDATFMT	QKBDTYPE	QTIME
QCHRIDCTL	QDATSEP	QLANGID	QTIMSEP
QCNTRYID	QDAY	QMINUTE	QTIMZON
QCRTAUT	QDECFMT	QMONTH	QVFYOBJRST
QCRTOBJAUD	QFRCCVNRST	QPWDLVL	QYEAR

※4 ソース・ノードとコピー・ノードの疑似オブジェクトを比較できるSQLサンプル
複製オブジェクト・タイプを指定して比較可能。以下の例は*AUTL、*USRPRF、*SYSVAL、*ENVVAR、FCNUSG、およびSECATRを比較

--
-- Determine if the pseudo object types are "in sync" between the source and copy node
--
CALL QSYS2.MIRROR_COMPARE_LIBRARY(
    LIBRARY_NAME   => 'QSYS',
    RESULT_SET     => 'YES',
    RESULT_LIBRARY => 'MIG_COMP',
    RESULT_FILE    => 'PSEUDOCOMP');

SELECT * FROM MIG_COMP.PSEUDOCOMP;


…結構なボリュームになってしまいました(^^;
調査ミスなどあるかもしれませんのでもしあればご指摘ください…m(_ _)m

参考URL

インフォセンター(IBM docks):IBM® i Migrate While Active (ver.7.5)
https://www.ibm.com/docs/ja/i/7.5?topic=ssw_ibm_i_75/mig/migkickoff.html

Db2ミラーのレプリケーション適格なオブジェクトの移行
Non-Db2 ミラーレプリケーション適格オブジェクトの移行
IFSオブジェクトの移行
疑似オブジェクト・タイプの移行

5
1
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?