p4 journaldbchecksums

テーブルチェックサムを使用してジャーナルノートを書き込みます。

構文規則

p4 [g-opts] journaldbchecksums [-t tableincludelist | -T tableexcludelist] 
                                [-l level]
p4 [g-opts] journaldbchecksums -u filename -t tablename [-v version] [-z]
p4 [g-opts] journaldbchecksums -s -t tablename [-b blocksize] [-v version]
p4 [g-opts] journaldbchecksums -c changelist

説明

p4 journaldbchecksumsコマンドは、分散および複製インストール環境で データの整合性を確保するためのツールのセットを提供します。

Perforceサービスでは、 p4 admin checkpointまたはp4 admin journalコマンドを使用すると 常に自動で整合性チェックを実行し、 p4 journaldbchecksumsコマンドを使用すると 整合性チェックを手動で実行します。

構造化ログ(「p4 logparse」を参照)でこのコマンドを使用するには、1つ以上の構造化ログで integrityタイプのイベントを取得する必要があります。

整合性チェックの実行時、Perforceサービスは、 指定のテーブル(または、テーブルの指定がない場合は、すべてのテーブル)の チェックサムを含むジャーナルにレコードを書き込みます。 レプリカサーバはこれらのレコードを受け取ると、これらのチェックサムを自身の データベーステーブルに対して計算した値と比較します。 これはp4 dbstatコマンドの処理と同様です。 比較結果はレプリカのログに書き込まれます。

チェックするテーブルは、個々のテーブルを-tおよび-Tオプションで追加または削除するか、 または3つの検証レベルのうちの1つを使用することで管理できます。

検証レベルは、rpl.checksum.auto構成可能変数または -l levelオプションで管理されます。

  • レベル1は、最も重要なシステムテーブルとリビジョンテーブルのみ検証します。
  • レベル2は、レベル1すべてと、レプリカ間で相違がないと想定されるメタデータが含まれます。
  • レベル3は、レプリカや、特にビルドファームやエッジサーバ間で異なる可能性のある メタデータを含むすべてのメタデータが含まれます。

個々のチェンジリストおよびテーブルをチェックする場合、 rpl.checksum.change構成可能変数やrpl.checksum.table構成可能変数により、 イベントをログに書き込むタイミングを管理します。

検証の各レベルに関連するデータベーステーブルの一覧など、詳しい情報については、 『Helix Coreサーバ管理者ガイド』の 「レプリカの整合性を検証する」を参照してください。

オプション

-b blocksize

テーブルのスキャン時に、ブロックごとにblocksize個のレコードをスキャンします。 デフォルトは5,000です。サーバはブロックごとにチェックサムを計算し、 ジャーナルノートとして書き込みます。レプリカサーバはこれらのノートの処理時に これらのブロックを自動的に検証します。 テーブルはブロックごとにロック解除されるため、このコマンドは生産システム上の 大規模なテーブルに使用できます。ブロック検証の結果を検査することにより、 データベーステーブルの一部のみに影響する破損箇所が明らかになります。 「データベーステーブルブロックのチェックサム」に記載されている例を参照してください。

-c changelist

個々のサブミット済みチェンジリストのチェックサムを計算します。 チェックサムはジャーナルノートとして書き込まれ、レプリカサーバは これらのノートの処理時に変更のチェックサムを自動的に検証します。 「チェンジリストのチェックサム」に記載されている例を参照してください。

-l level

チェックサムのレベルを指定します。各レベルは、より大きなテーブルのセットに対応します。 これらのレベルは、rpl.checksum.auto構成可能変数で使用されるレベルに対応します。

-s -t tablename

指定のデータベーステーブルをスキャンします。「データベーステーブルのアンロード」に記載されている例を参照してください。

-t tables

チェックサムを計算するテーブルを指定します。 複数のテーブルを指定するには、リストを二重引用符で囲み、 テーブル名をスペースで区切ります。テーブル名は、「db.」で始めます。 テーブル名は、カンマで区切ることもできます。 「データベーステーブルのチェックサム」に記載されている例を参照してください。

-T tableexcludelist

リストされているものを除く、すべてのテーブルのチェックサムを計算します。

-u filename-t tablename

指定のデータベーステーブルをアンロードします。 このコマンドはまた、この操作をドキュメントにするジャーナルノートを書き、 これらのノートの処理時にレプリカサーバが同じテーブルを 同じファイルへ自動的にアンロードするように指示します。

-v version

テーブルをアンロードまたはスキャンする場合に使用するサーバの バージョン番号を指定します。サーバのバージョン番号の指定がない場合、 現在のサーバのバージョンが使用されます。

-z

テーブルのアンロード時にファイルを圧縮します。

g-opts

グローバルオプション」を参照してください。

使用上の注意点

ファイル引数でリビジョン指定子を使用できるか? ファイル引数でリビジョン範囲を使用できるか? 最低限必要なアクセスレベル

適用外

適用外

  • super
  • このコマンドは、オペレータに対して実行することができます(「p4 user」の「ユーザのタイプ」を参照)。

分散環境または複製環境における Perforceの管理方法の詳細については、 『Helix Coreサーバ管理者ガイド』を参照してください。

データベーステーブルのチェックサム

p4 journaldbchecksums [-t tableincludelist | -T tableexcludelist] [-l N]

このコマンドを実行すると、サーバにより、テーブルのチェックサム情報が含まれているジャーナルノートが書き込まれます。

p4 journaldbchecksums -t db.rev
@nx@ 12 1487712216 @41@ 9 -933920831 0 4 0 @db.rev@ @@ @@ @@ @@

エッジサーバ/レプリカサーバは、これらのジャーナルノートを処理する際に、テーブルのチェックサムを自動的に検証し、その結果をサーバログに書き込みます(以下のような結果がログに出力されます)。オプションで、整合性構造化ログに書き込むこともできます(整合性構造化ログが設定されている場合)。

Table db.rev checksums match. 2017/02/21 13:23:36 version 9: expected 0xC8557FC1, actual 0xC8557FC1
p4 logparse -m1 -F f_table=db.rev -T 'f_date f_results' integrity.csv
... f_date 2017/02/21 13:23:36 219149298
... f_results match

テーブルチェックサムの比較結果としては、以下に示す3つが考えられます。

  • match
  • DIFFER
  • empty
Table db.have checksums DIFFER. 2017/02/21 13:08:38 version 3: expected 0x3BB210EE, actual 0xB1BF3E83

p4 logparse -F f_results=DIFFER -T 'f_date f_table' integrity.csv
... f_date 2017/02/21 13:08:38 203821071
... f_table db.have
Table db.ldap checksums empty. 2017/02/24 11:33:54
version 0: expected 0x0, actual 0x0.

p4 logparse -F f_results=empty -T f_table integrity.csv
... f_table db.ldap

データベース構造が以下の結果とは異なる場合、テーブルチェックサムの比較結果が「DIFFER」として表示されることがあります。

ソフトウェアのアップグレード:

テーブル内のデータにアクセスすると、一部のアップグレードがデータベースに対して実行されます。

チェックポイントまたはジャーナルの再生:

 

管理者がp4d-jrコマンドを使用してジャーナルデータまたはジャーナルパッチを再生した場合、データベース内で再生されたトランザクションがジャーナルに記録されることはありません。これが原因で、チェックサムの差異が発生する場合があります。

分散環境でジャーナルデータを再生する場合は、必ずp4d -s -jrコマンドを使用して、再生されたトランザクションをジャーナルに記録するようにしてください。これにより、ダウンストリームのエッジサーバ/レプリカサーバでジャーナルを再生できるようになります。

レプリカサーバに対してp4d -jrコマンドを実行すると、そのレプリカサーバ上のデータベースファイルだけが更新されることに注意してください。この場合、異なるチェックサムが生成されることがあります。

ジャーナルのフィルタリング:

複製プロセスでフィルタリング機能が有効になっている場合、一部のジャーナルチェックサムで差異が発生することがあります。

チェックサムの予期しない差異を修正するには、コミットサーバ/マスターサーバの新しいチェックポイントから、エッジサーバ/レプリカサーバのデータベースを復元します。

チェンジリストのチェックサム

p4 journaldbchecksums -c change

このコマンドを実行すると、サーバにより、サブミットされた各チェンジリストのチェックサムが計算されます。このチェックサムは、以下のようなジャーナルノートとして書き込まれます。

            p4 journaldbchecksums -c 12073
@nx@ 15 1487961638 @41@ 12073 1 0 0 0 @46B19358420B468668781A002BA0AC15@ @@ @@ @@ @@

レプリカサーバは、ジャーナルノートを処理する際に、変更内容のチェックサムを自動的に検証し、その結果を整合性構造化ログに書き込みます。以下に例を示します。

            p4 logparse -F f_change=12073 -T f_results integrity.csv
... f_results match

サーバの動作は、rpl.checksum.change構成可能変数の設定によって異なります。

データベーステーブルブロックのチェックサム

p4 journaldbchecksums -s -t tablename [ -b blocksize ][-v N]

このコマンドを実行すると、指定したデータベーステーブルがスキャンされます。データベーステーブルは、ブロック単位でスキャンされます。1ブロックのレコード数は、-bフラグで指定します。デフォルト値は5,000です。サーバはブロックごとにチェックサムを計算し、その結果を以下のようなジャーナルノートとして書き込みます。

            p4 journaldbchecksums -s -t db.have
@nx@ 17 1487964567 @41@ 3 1 313 0 0 @db.have@ @@@//Talkhouse/build/jar/Talkhouse.jar@@
 @ @@@//Jam/MAIN/src/glob.c@@ @ @2BCDA450287C03DE3433AEB6278EA4AA@ @@

レプリカサーバは、ジャーナルノートを処理する際に、読み込んだテーブルブロックを自動的に検証し、その結果を整合性構造化ログに書き込みます(整合性構造化ログが設定されている場合)。以下に例を示します。

            p4 logparse -F 'f_table=db.have' -T 'f_results f_checkSum f_checkSum2' integrity.csv
... f_checkSum 2BCDA450287C03DE3433AEB6278EA4AA
... f_checkSum2 D41D8CD98F00B204E9800998ECF8427E
... f_results failed

テーブルはブロック単位でロックが解除されるため、大規模なテーブルが存在する実稼働システムでこのコマンドを使用すると便利です。ブロックの検証結果を確認すると、データベーステーブルの一部だけに影響する破損箇所を特定することができます。

データベーステーブルのアンロード

p4 journaldbchecksums -u filename -t tablename [-v N] [-z]

このコマンドを実行すると、指定したデータベーステーブルが目的のファイルにアンロードされます。また、この動作を記述するジャーナルノートも書き込まれます。以下に例を示します。

            p4 journaldbchecksums -u working.txt -t db.working
@nx@ 16 1487964861 @41@ 10 0 0 0 0 @db.working@ @working.txt@ @@ @@ @@

レプリカサーバは、ジャーナルノートを処理する際に、コマンド内で指定されたテーブルを、コマンド内で指定されたファイルに自動的にアンロードします。上記の例のように、-uフラグでファイル名を指定するだけで、両方のサーバのP4ROOTディレクトリ内にアンロードファイルが作成されます。-uフラグで指定した相対パスは、P4ROOTディレクトリに対する相対パスになります。アンロードファイルの絶対パスを指定することもできます。アンロードを実行する前に、参照先のディレクトリパスがマスターサーバとレプリカサーバの両方に存在することを確認してください。

この方法でテーブルをアンロードすると、タイミングを合わせながらテーブルの内容を比較することができます。サイズの小さなテーブルの場合にのみ、このコマンドを使用することをお勧めします。ファイルを圧縮する場合は、-zフラグを指定します。