IBM Db2 Warehouse のトラブルシューティング

このトピックの情報は、Db2® Warehouse のデプロイメントと操作に関連した問題の識別と解決のために使用することができます。 IBM® Db2 Warehouse の既知の問題および回避策も参照してください。

IBM は、Db2 Warehouse に関連するあらゆる問題のトラブルシューティングを支援いたします。IBM は、Db2 Warehouse Docker コンテナーをサポートしていますが、 問題が Docker エンジンに関係する場合には Docker エンジン・プロバイダーにお問い合わせください。Docker エンジンのサポートへの登録はお客様の責任で行っていただく必要があります。

デプロイメントに関する問題

問題: デプロイメントが通信エラーで失敗する
症状
Db2 Warehouse をデプロイしようとすると、デプロイメント・プロセスは通信エラーで失敗します。デプロイメント・プロセスの一部として db2start コマンドが発行されると、コマンドは通信エラーで失敗します。この症状は、前提条件のセクションに記載されている該当トピックでリストされているポートがすべて開いていることを確認した場合でも発生します。
問題の解決方法
ICMP 拒否ルールを使用しているかどうかを確認し、使用している場合は削除します。 次の手順を実行します。
  1. 次のコマンドを発行して、ICMP 拒否ルールをリストします。
    iptables -S | grep icmp
    出力例を次に示します。
    -A INPUT -j REJECT --reject-with icmp-host-prohibited
    -A FORWARD -j REJECT --reject-with icmp-host-prohibited
    -A FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable
    -A FORWARD -i virbr0 -j REJECT --reject-with icmp-port-unreachable
    
  2. 拒否ルールを削除します。通常は、次のコマンドを発行することによってルールを削除できます。 rule_specification 変数には、iptables -S コマンドの出力の -A に続く情報を指定します。
    iptables -D rule_specification
    例えば、前のステップの出力例にリストされているルールを削除するには、以下のコマンドを発行します。
    iptables -D INPUT -j REJECT --reject-with icmp-host-prohibited
    iptables -D FORWARD -j REJECT --reject-with icmp-host-prohibited
    iptables -D FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable
    iptables -D FORWARD -i virbr0 -j REJECT --reject-with icmp-port-unreachable
  3. 次のコマンドを発行して、ルールの変更を永続化します。
    service iptables save
問題: Docker コンテナーの基本サイズが不十分である
症状
Linux へのデプロイメント時に、Docker コンテナーの基本サイズに関する警告メッセージが表示されます。 コンテナー内にログ・ファイルや一時ファイルを生成すると、スペース不足になる可能性があります。
問題の解決方法
コンテナー内にログ・ファイルと一時ファイル用の十分なスペースを確保できるように、Linux 上の Docker コンテナーの基本サイズを 20 GB 以上に増やす必要があります。サイズを増やすには、以下の手順を root として実行します。
  1. 以下のいずれかの方法を使用します。
    • デプロイメントに Db2 Warehouse Orchestrator を使用しなかった場合は、各ノードで以下の手順を実行します。
      1. 次のコマンドを実行して、Db2 Warehouse サービスを停止します。MPP デプロイメントの場合は、ヘッド・ノードでコマンドを実行します。
        docker exec –it Db2wh stop
      2. 次のコマンドを実行して、Db2 Warehouse コンテナーを停止します。
        docker stop Db2wh
    • デプロイメントに Db2 Warehouse Orchestrator を使用した場合は、ヘッド・ノードで db2wh_orchestrator.sh スクリプトを実行して、クラスター内のすべてのノードで Db2 Warehouse サービスと Db2 Warehouse コンテナーの両方を停止します。
      path_to_scripts/db2wh_orchestrator.sh --file /mnt/clusterfs/nodes --stop
  2. 各ノードで、以下のコマンドを発行してコンテナーを削除します。
    docker rm Db2wh
  3. 各ノードで、/etc/docker ディレクトリーに daemon.json ファイルを作成します (このファイルがその場所に存在していない場合)。
  4. 以下のように、daemon.json ファイルに storage-opts オプションを追加します。
    {
    "storage-opts": [ "dm.basesize=20G" ]
    }
  5. 各ノードで、以下のコマンドを発行して、Docker エンジンを再始動します。
    systemctl restart docker
  6. 各ノードで、次のコマンドを発行し、出力の Base Device Size フィールドを確認して、基本サイズが増加したことを確認します。
    docker info
  7. トラブルシューティング後の再デプロイ.
問題: デプロイメント中にポート検査が失敗する
症状
デプロイメント中に行われる通信テストで、テスト・プログラムがノードと通信できません。
Running database port check ...
Unable to communticate to node <node_name> over the port(s) 50000-50001,60000-60024
Check the network and firewall settings, and ensure that the indicated port/port range is open
On MPP clusters, check network and firewall settings on each node
* port(s) 50000-50001,60000-60024: CLOSED
問題の解決方法
システムに Firewalld がある場合 (またはダウンロードできる場合)、以下のコマンドを root として発行してポートを開きます。
firewall-cmd --zone=public --add-port=60000-60060/tcp --permanent ; 
firewall-cmd --zone=public --add-port=25000-25999/tcp --permanent ;
firewall-cmd --zone=public --add-port=50022/tcp --permanent ;
firewall-cmd --zone=public --add-port=50001/tcp --permanent ;
firewall-cmd --zone=public --add-port=50000/tcp --permanent ;
firewall-cmd --zone=public --add-port=9929/tcp --permanent ;
firewall-cmd --zone=public --add-port=9300/tcp --permanent ;
firewall-cmd --zone=public --add-port=8998/tcp --permanent ;
firewall-cmd --zone=public --add-port=8443/tcp --permanent ;
firewall-cmd --zone=public --add-port=5000/tcp --permanent ;
firewall-cmd --zone=public --add-port=2379-2380/tcp --permanent ; 
firewall-cmd --zone=public --add-port=389/tcp --permanent ;
firewall-cmd --zone=public --add-port=22/tcp --permanent ;
firewall-cmd --zone=public --add-port=60000-60060/udp --permanent ; 
firewall-cmd --reload

更新された規則を確認するには、次のコマンドを発行します。

firewall-cmd --list-all

ポート規則を更新した後、コンテナーを再デプロイします。

問題: Docker ストレージ・ドライバー
症状
次の警告メッセージが発行されます。
###################################################################
*** The discovered Docker storage driver is 'overlay’' ***
###################################################################
* The required Docker storage driver for is devicemapper
Switch to devicemapper before you try to redeploy. For information, 
see the "Switching storage drivers" topic in the IBM Knowledge Center
問題の解決方法
Docker の資料に説明されているとおり、ストレージ・ドライバーをオーバーレイから devicemapper に切り替えてください。その後、コンテナーを再デプロイしてください。

操作に関する問題

問題: Db2 Warehouse は正常にデプロイされたが、後でデータベースが異常終了した
症状
  • Db2 Warehouse が実行されていないか、接続できません。
  • docker exec -it Db2wh status コマンドの出力には、DB2connectivity または DB2running に対して報告された FAILURE が表示されます。
問題の解決方法
以下のコマンドを使用して、Db2 Warehouse サービスを明示的に停止して再始動します。
docker exec -it Db2wh stop
docker exec -it Db2wh start
クラスター・ファイル・システムの障害により、データベースが異常終了する
症状
  • エラー・メッセージは、ファイル・システムの問題 (デッドロックなど) が原因でファイル・システムがアンマウントされたことを示しています。
問題の解決方法
ファイル・システムのエラーを修正するには、以下のようにします。
  1. 次のコマンドを発行して、すべてのノードの Docker コンテナーを停止します。
    docker stop Db2wh
  2. ファイル・システムの問題に対処します。ホスト・レベルの問題は Db2 Warehouse の範囲を超えているため、管理者の判断とファイル・システムの種類に基づいて適切な処置を実行します。
  3. 以下のコマンドを発行して、すべてのノードで Docker コンテナーを開始します。
    docker start Db2wh
問題: 照会が失敗して、「トランザクション・ログがいっぱいです (transaction log full)」エラーが表示される
症状
  • ログが大量に記録される SQL 照会の実行時に、照会が失敗し、エラー「SQL0964C The transaction log for the database is full (データベースのトランザクション・ログがいっぱいです)」が表示されます。
問題の解決方法
一時的にロギング操作を中断して、ログ・スペースを消費せずに照会を実行できるようにします。 ロギング操作を一時的に中断するには、NOT LOGGED INITIALLY パラメーターを指定して照会のすべての表を変更します。次に例を示します。
ALTER TABLE BLUADMIN.MYTABLE ACTIVATE NOT LOGGED INITIALLY
ALTER ステートメントと照会は同じ作業単位内になければならないため、自動コミットを必ず無効にしてください。
重要: NOT LOGGED INITIALLY パラメーターを使用して表を変更する場合は、コミットを発行するまで変更のロールバックやロールフォワードは行えません。コミットにより、表の NOT LOGGED INITIALLY 状態が解除されます。 コミットを発行する前にロールフォワードやロールバックを行おうとすると、表に使用不可のマークが付きます。表に使用不可のマークが付けられた場合は、表をドロップして再作成してから、表にデータを再ロードする必要があります。
問題: コンテナー更新中にデータ・ノードへの接続が失われた
症状
  • MPP デプロイメントを更新しましたが、少なくとも 1 つのデータ・ノードとの接続が失われたためにクラスターを起動できません。メッセージに次のストリングが含まれています。「Warning: One or more nodes was not reachable. The system information output might not be accurate. (警告: 1 つ以上のノードに到達できませんでした。システム情報出力は正確でない可能性があります。)
問題の解決方法
  1. クラスターをスケールインし、障害のあるノードを正常に削除します。IBM Db2 Warehouse MPP クラスターのスケールインを参照してください。
  2. クラスターをスケールアウトし、障害のあるノードを追加します。IBM Db2 Warehouse MPP クラスターのスケールアウトを参照してください。
問題: write-suspend コマンドまたは write-resume コマンドが失敗する
症状
docker exec -it Db2wh write-suspend コマンドや docker exec -it Db2wh write-resume コマンドが失敗します。このコマンドの出力には、以下のメッセージ・セットのいずれかが含まれています。
Suspending write on bludb...this may take a while
Failed to suspend database
Check the log file for more information.
docker exec -it container_name cat /tmp/writesuspend.log
Suspending resume on bludb...this may take a while
Failed to resume database
Check the log file for more information.
docker exec -it container_name cat /tmp/writeresume.log
問題の解決方法
  1. /tmp/writesuspend.log ファイルまたは /tmp/writeresume.log ファイルに以下のメッセージが含まれているかどうか確認します。
    Host key verification failed.
    rah: host FQDN replied to /usr/bin/ssh
    Host key verification failed.
    rah: FQDN replied to /usr/bin/ssh
    ここで、FQDN は完全修飾ドメイン名です。
  2. このメッセージがログ・ファイルに含まれている場合は、/etc/hosts ファイルのデータの形式が次のようになっているかどうかを確認します。
    IP FQDN alias1 alias2 ... aliasN
    ここで、
    • IP はノードの IP アドレスです。
    • FQDN は完全修飾ドメイン名 (IP アドレスごとに 1 つのみ) です。
    • alias1 alias2 ... aliasN は、 ホストに固有の 1 つ以上の別名です。
    次に例を示します。
    192.0.2.214 Db2whblu01.example.com Db2whblu01
問題: サービスを開始できない
症状
  • コンテナーのサービスの開始は、次のいずれかの方法で試行できます。
    • SMP 環境または MPP 環境で docker exec -it Db2wh start コマンド (サービスのみを開始する) を発行します。
    • SMP 環境または MPP 環境で docker start Db2wh コマンド (コンテナーとサービスの両方を開始する) を発行します。
    • Db2 Warehouse コンテナー・イメージに対して docker run コマンドを発行します。このコマンドにより、SMP 環境または MPP 環境でサービスが自動的に開始します。
    出力には、以下の情報が含まれます。
    • 以下のメッセージ:
      Not able to continue starting services due to status failure of data node containers
    • さまざまなノードとの通信が失敗したことを示すメッセージ:
      ...
      Checking status of node node_name
         Unable to communicate with data node container: node_name
         Use the docker ps command to ensure that all the data node containers
         specified in the node list file are active on every node.
      Checking status of node node_name
         Unable to communicate with data node container: node_name
         Use the docker ps command to ensure that all the data node containers
         specified in the node list file are active on every node.
      * Network check: FAIL
    • 以下の最終メッセージ:
      Not able to continue starting services due to status failure of data node containers
問題の解決方法
特定のイメージが含まれている Db2 Warehouse コンテナーのサービスを開始しようとするときに、別のバージョンのイメージが含まれている別の名前の Db2 Warehouse コンテナーが既に実行されている場合は、そのサービスは開始しないようにします。以下のコマンドを発行して、どのコンテナーが実行中かを確認します。
docker ps 
出力例を次に示します。

CONTAINER ID    IMAGE                           COMMAND             CREATED           STATUS           PORTS    NAMES
833fb79b5d6e    ibmdashdb/local:v1.3.0          "/usr/sbin/init"    18 minutes ago    Up 18 minutes             dashDB
d65ecf4ca440    ibmdashdb/local:latest-linux    "/usr/sbin/init"     6 hours ago      Up 3 hours                dashDBprevious
開始しようとしているサービスを含む Db2 Warehouse コンテナーとともに、すでに実行中の別のバージョンの Db2 Warehouse コンテナーが出力に示される場合は、次の手順を実行します。
  1. 他のバージョンのコンテナーを停止するため、そのコンテナーが実行されている各ノードで次のコマンドを発行します。
    docker stop container_ID
    例えば、前述の出力例に示されている古いバージョンの Db2 Warehouse コンテナーを停止するには、次のコマンドを発行します。
    docker stop dashDBprevious
  2. 以下のようにして、開始しようとしていたサービスが含まれるバージョンの Db2 Warehouse を再デプロイします。
    1. 次のコマンドを発行して、すべてのノードの Docker コンテナーを停止します。
      docker stop Db2wh
    2. 以下のコマンドを発行して、すべてのノードで Docker コンテナーを開始します。
      docker start Db2wh
MPP クラスター内の個々のノードのネットワーク障害など、他の理由でコンテナーのサービスを開始できない場合もあります。
問題: MPP ノードを使用できない
症状
この問題の症状は状況によって異なり、次のようなものがあります。
  • docker exec -it Db2wh status コマンドの出力ではノードの状態は MISSING であるのに、Db2 Warehouse サービスは実行されています。以下がその例です。
    -- IBM Db2 Warehouse Services Status --
    Redirecting to /bin/systemctl status  slapd.service
    SUMMARY
    
    DB2connectivity               : RUNNING
    DB2running                    : RUNNING
    LDAPrunning                   : RUNNING
    dashDBtablesOnline            : RUNNING
    WebConsole                    : RUNNING
    Spark                         : ENABLED
    
    Getting IBM Db2 Warehouse High Availability Status...
    -- IBM Db2 Warehouse System Manager Status --
    HA Management is RUNNING.
    
    -- IBM Db2 Warehouse Cluster Status --
    +--------------+---------------+------+--------+-------+
    |   NodeName   |       IP      | Type |  Role  | State |
    +--------------+---------------+------+--------+-------+
    | node0101-fab | 192.168.10.80 | HEAD | ACTIVE |   UP  |
    | node0102-fab | 192.168.10.81 | DATA | ACTIVE |   UP  |
    | node0103-fab | 192.168.10.82 | DATA | ACTIVE |   UP  |
    | node0104-fab | 192.168.10.83 | DATA | ACTIVE |MISSING|
    | node0105-fab | 192.168.10.84 | DATA | ACTIVE |   UP  |
    | node0106-fab | 192.168.10.85 | DATA | ACTIVE |   UP  |
    +--------------+---------------+------+--------+-------+
  • Db2 Warehouse をデプロイまたは更新しようとすると、Db2 Warehouse サービスを開始するのに非常に時間がかかり、ノードで問題が報告されます。例えば、Db2 Warehouse をデプロイしようとすると、SSH が使用できるにもかかわらず、HA ログ (volume/ha/node/ha.log ファイル) でノード (状態が MISSING または DOWN) の問題が報告されます。Db2 Warehouse を更新しようとすると、ノードは MISSING であると報告されます。
  • Db2 Warehouse サービスを停止すると、ノードの状態が MISSING または DOWN に変わります。
問題の解決方法
まず、以下のコマンドを発行して時刻のずれ (進みまたは遅れ) がないか確認してください。その後、問題の他の原因を探します。
docker exec -it Db2wh dbhealth check --components time_sync -v
出力例を次に示します。
Checking whether node(s) are reachable...
Node(s) are running Db2Warehouse version v2.0.0-20170910-2244-local-ppcle

--------------------------------------------------------------------------------
Testing 'Time Synchronization Status' (plugin: time_sync)
  [node0101-fab(Headnode)]
    Headnode view: node0103-fab and node0104-fab clocks are
    more than 10 seconds out of sync                                [Fail Sev:High]
    Headnode view: node0103-fab and node0101-fab clocks are
    more than 10 seconds out of sync                                [Fail Sev:High]
    Headnode view: node0104-fab and node0101-fab clocks are
    more than 10 seconds out of sync                                [Fail Sev:High]
    Headnode view: node0104-fab and node0105-fab clocks are
    more than 10 seconds out of sync                                [Fail Sev:High]
    Headnode view: node0104-fab and node0102-fab clocks are
    more than 10 seconds out of sync                                [Fail Sev:High]
    Headnode view: node0104-fab and node0106-fab clocks are
    more than 10 seconds out of sync                                [Fail Sev:High]
    Headnode view: node0101-fab and node0105-fab clocks are
    more than 10 seconds out of sync                                [Fail Sev:High]
    Headnode view: node0101-fab and node0102-fab clocks are
    more than 10 seconds out of sync                                [Fail Sev:High]
    Headnode view: node0101-fab and node0106-fab clocks are
    more than 10 seconds out of sync                                [Fail Sev:High]

Advice:
        1) Verify NTP configuration settings and NTPd service status on all nodes.
時刻のずれ (進みまたは遅れ) があることが出力に示される場合は、出力のアドバイスにしたがって、すべてのノードで NTP 構成設定と NTPd サービス状況を確認します。ノード全体で時刻が同期されると、状態が MISSING または DOWN であったノードの状態が UP になるはずです。
問題: 照会がエラー SQL1229N で失敗する
症状
docker exec -it Db2wh status コマンドではシステムが稼働していることが報告されるのに、すべての照会がエラー SQL1229N で失敗します。
問題の解決方法
ヘッド・ノードで以下のコマンドを発行して、サービスの停止と開始を行います。
docker exec -it Db2wh stop
docker exec -it Db2wh start

トラブルシューティング後の再デプロイ

デプロイメントが失敗した場合は、次の手順を実行します。MPP デプロイメントの場合、クラスターの各ノードで以下のステップを実行します。
  1. 次のコマンドを実行して、失敗したコンテナーを削除します。
    docker rm Db2wh
  2. 次のコマンドを発行して、Docker エンジンを停止します。
    systemctl stop docker
  3. 次のコマンドを発行して、ネットワークを再始動します。
    systemctl restart network
  4. 次のコマンドを発行して、Docker エンジンを開始します。
    systemctl start docker
  5. MPP システムの場合、ノード・ファイル (/mnt/clusterfs/nodes) のコピーを保存し、再デプロイ時に再利用できるようにしておきます。ノード・ファイルは、ヘッド・ノードにあります。例えば、ヘッド・ノードで以下のコマンドを入力します。
    cp  /mnt/clusterfs/nodes  /tmp/nodes
  6. 以下のコマンドを発行して、クラスター・ファイル・システム・ディレクトリーの内容を削除します。
    rm -rf /mnt/clusterfs/*
  7. 使用しているオペレーティング・システムとハードウェアに対応するデプロイメントの手順に従って、デプロイメントを再試行します (IBM Db2 Warehouse のデプロイを参照してください)。