IBM Support

[Db2] HADR TAKEOVER 後、SQL1477N で一部の表へアクセスできない

Troubleshooting


Problem

HADR システムで TAKEOVER 後、新プライマリー・データベースで表へのアクセスが以下のように SQL1477N で失敗することがあります。なお、読み取り専用スタンバイ (ROS) が構成されている場合、TAKEOVER 前にスタンバイ・データベースでの表アクセスが SQL1477N で失敗します。
SQL1477N  表 "DB2INST1.T1" で、表スペース "2" 内のオブジェクト "5" にはアクセスできません。

Symptom

SQL1477N が返るとき、新プライマリーまたは読み取り専用スタンバイの db2diag.log には以下のような ADM5570W が記録されます。
2020-06-29-13.17.33.049788+540 E1743A784            LEVEL: Warning
PID     : 23986672             TID : 20674          PROC : db2sysc 0
INSTANCE: db2inst1             NODE : 000           DB   : HADB
APPHDL  : 0-84                 APPID: *LOCAL.db2inst1.200629041721
AUTHID  : DB2INST1              HOSTNAME: hadr02
EDUID   : 20674                EDUNAME: db2agent (HADB) 0
FUNCTION: DB2 UDB, data management, sqldSetupSQLCA, probe:3
MESSAGE : ADM5570W  Access was attempted on an unavailable object with id "5"
          in tablespace "2" for table "DB2INST1.T1".  If the object is a table
          it will have to be dropped.  If the object is a partition it will
          have to be detached. If the object is a non-partitioned index the
          index will have to be dropped.

Cause

HADR プライマリーで、スタンバイが再生できない以下のような操作が行われた場合、該当の表はスタンバイで無効化され、その後のアクセスは SQL1477N で拒否されます。
  • NONRECOVERABLE オプションを指定した LOAD の実行 (HADR で LOAD オプションを省略すると NONRECOVERABLE として扱われます。)
    例:db2 "load from data.del of del insert into T1"
  • 表に対して NOT LOGGED INITIALLY (NLI) が指定されたとき
    例:db2 "alter table T1 activate not logged initially"

Environment

HADR による高可用性を使用しているデータベース

Diagnosing The Problem

スタンバイで無効化された表は以下の手順で判別できます。

a) 読み取り専用スタンバイを構成している場合、ADMINTABINFO 管理ビューで削除ペンディングの表を一覧できます。
読み取り専用スタンバイを構成していない場合でも、TAKEOVER 後に新プライマリーで同じ SQL を実行して一覧できます。
db2 connect to <standby_database> 
db2 "select tabschema, tabname from sysibmadm.admintabinfo where available='N'"
​b) 読み取り専用スタンバイを構成していない場合、スタンバイの db2diag.log から ADM5571W を参照します。
たとえば、直近一カ月で無効化された表は以下のコマンドで一覧できます。
db2diag -g msg:=ADM5571W -H 1M

Resolving The Problem

表の無効化を防ぐため、原因となる操作を行わないようにしてください。
  • LOAD 実行時に COPY YES TO <path> でスタンバイからもアクセス可能なパスを指定する
    詳細はマニュアルの以下のページを参照してください。
    高可用性災害時リカバリー用のデータベース構成 (HADR)
    LOAD 実行時の事故を防ぐため、DB2_LOAD_COPY_NO_OVERRIDE レジストリー変数の使用も検討してください。
    たとえば、db2set DB2_LOAD_COPY_NO_OVERRIDE="copy yes to /share/load/data" のように設定すると、LOAD で COPY オプションを省略した場合にレジストリー変数で指定された COPY オプションが使用されます。
  • NOT LOGGED INITIALL (NLI) を実行しない
    表に対する NLI を実行しないよう注意してください。データベース構成パラメーター BLOCKNONLOGGED を YES に設定すると、NLI のようにログされない操作は SQL0628N で実行できなくなります。
無効化された表は以下のいずれかの方法で回復できます。
  • HADR システムの再統合 (データベース全体のバックアップとリストア)
    表が無効化されていないデータベースのバックアップを使用して HADR ペアを再統合します。
    詳細は以下の Technote の (b) を参照してください。
    [Db2] HADR スタンバイの復旧方法
  • LOAD REPLACE による単一表の回復
    表が無効化されていないプライマリー・データベースで表データの EXPORT と LOAD REPLACE を行って回復します。
    注1:LOAD COPY TO <path> でスタンバイからもアクセス可能なパスを指定します。
    注2:MDC 表、圧縮辞書を持つ表、XML 列を持つ表はこの手法で回復できません。
    db2 connect to <healthy_primary_database>
    db2 "export to data.ixf of ixf select * from <table_name>"
    db2 "load from data.ixf of ixf replace into <table_name> copy yes to /share/load/data"
    
  • 表スペース・リストアによる表の回復
    以下のページの「スタンバイ・データベースのエラー状態の表スペースを再初期化する手順」が利用可能なバージョンの場合、表スペースのリストアにより表データを回復できます。
    HADR スタンバイ・データベースでの表スペース・エラーのリカバリー
    1. プライマリーで対象の表スペースにダミー表を作成します。
      db2 "create table dummy1 (c1 int) in <tablespace_name>"
    2. プライマリーでダミー表へ COPY YES TO /dev/null の LOAD を行います。
        (この結果、スタンバイで該当表スペースがリストア・ペンディングになります)
      db2 "load from data of del replace into ​dummy1 copy yes to /dev/null"
    3. スタンバイ・データベースを非活動化します。
      db2 deactivate db <standby_database>
    4. プライマリーで表スペースのバックアップを取得します。
      db2 flush bufferpool all
      db2 "backup db <primary_database> tablespace <tablespace_name> online to <path_to_backup>"
    5. スタンバイでバックアップをリストアし、活動化します。
      db2 "restore db <standby_database> tablespace (<tablespace_name>) from <path_to_backup> taken at <backup_timestamp>"
      db2 "activate db <standby_database>"
    6. (オプション) プライマリーでダミー表を削除します。​
      ​db2 "drop table dummy1"
関連情報
パスポート・アドバンテージによく寄せられる質問  
お問合せ先
技術的な内容に関して、パスポート・アドバンテージの契約のもと Db2 テクニカル・サポートへお問い合わせください。
Db2 テクニカル・サポート

Document Location

Worldwide

[{"Type":"MASTER","Line of Business":{"code":"LOB10","label":"Data and AI"},"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SSEPGG","label":"Db2 for Linux, UNIX and Windows"},"ARM Category":[{"code":"a8m500000008PlvAAE","label":"HADR-\u003ELog shipping and Replay"}],"ARM Case Number":"","Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"All Versions"}]

Document Information

Modified date:
15 August 2023

UID

ibm16502883