Release Notes¶
2.3.0(2022-08-16)¶
改善¶
IBM PowerでのRedHat Enterprise Linux (RHEL) 8のサポート (ppc64le)
IBM PowerでのSLES 12 SP5のサポート(ppc64le)
IBM PowerでのSLES 15 SP3のサポート(ppc64le)
x86_64でのUbuntu 22.04(Jammy)のサポート
x86_64でのDebian 11(ブルズアイ)のサポート
2.2.0(2022-06-14)¶
新機能¶
--dry-run実行モードを追加しました。これにより、ユーザーは比較セッションを実行せずに.iniファイルを検証し、いくつかの有用な比較情報を表示できます(LIV-142、RT78462):比較セッション中に受信したアボートメッセージは時系列で印刷されます
接続がタイブレーカーまたは信頼できるソースであるかどうか、および到達可能かどうかを含む接続のリストを表示します。
Table Filterが構成されている場合は表示します。比較に含まれるテーブルをリストします。これは、
Table Filterを適用した後のすべての接続に存在する共通テーブルのリストです。各テーブルについて、該当する場合、Column Filter、Row FilterおよびComparison Keyを示します。
改善¶
x86_64でのSLES 12のサポート(LIV-112)。
x86_64でのSLES 15のサポート(LIV-113)。
Postgres
kwlistのソースコード(LIV-141、RT80745)に従って予約語のリストを更新しました。メインのプログレスバーのパーセンテージが、整数ではなく浮動小数点数を使用するようになりました。以前は、数値が切り上げられていました(LIV-138、RT80745)。
EPASで
edb_redwood_dateが有効になっている場合、date列はtimestamp列として作成されます。この型の不一致は、以前に共通ハッシュの不一致として検出され、行全体の比較がトリガーされました。これらの場合にedb_redwood_date設定をチェックすることにより、共通ハッシュ(完全な行よりも高速)でこの不一致を処理することにより、パフォーマンスが向上します。ハッシュ不一致ログメッセージをWARNINGからDEBUGに降格しました(LIV-145)。
ログには、メッセージに
application_nameが含まれます(LIV-141)。data_fetch_mode = prepared_statements(デフォルト)の場合、PostgresまたはEPASのRow Filterで現在のタイムスタンプを使用する動作を文書化しました。この場合、data_fetch_mode = server_side_cursors_with_holdまたはserver_side_cursors_without_holdも設定する必要があります(LIV-155)。検出された発散の数が増加した場合に適用DMLスクリプトを生成するときのパフォーマンスが向上しました(LIV-159)。
バグ修正¶
配列列が比較キーと見なされると、テーブルでの比較が例外により中止される問題を修正しました(LIV-38、LIV-154、RT81758)。
ハートビートによってのみ、比較ラウンド後に発散および処理された行の数が適切に更新されない問題は解決されました。この場合、行は古く、最後のハートビート以降の位置のみを示しています。比較にかかる時間が
min_time_between_heart_beatsよりも短いテーブルの場合、常にゼロを示していました(LIV-149、RT75805)未処理の例外が原因で比較ワーカーがハングするコーナーケースを修正しました(LIV-140、RT80745)。
OracleとPostgresを比較するときに誤検出を回避するための10進値の正規化(LIV-153)。
comparison_algorithm = block_hashとbuffer_size = 1で、相違が見つかった場合、カーソル前進アルゴリズム(LIV-150)の問題が原因で比較が進められないコーナーケースを修正しました。複数のフィルターセクションで同じテーブルを設定できるようにします (LIV-156)。
2.1.0(2022-03-31)¶
新機能¶
Postgres- BDR 4(LIV-131)のサポート。
ハートビートごとに比較の進行状況をログに記録するようにLiveCompareに指示する新しい設定
min_time_between_heart_beatsは、INFOログレベルを使用してデフォルトで30秒に設定されます。新しい設定
comparison_cost_limitとcomparison_cost_delayは、0より大きい場合、各ワーカーにcomparison_cost_limit行数を処理した後にcomparison_cost_delay秒(たとえば、0.5)昼寝をするように指示します。
その他の変更¶
最近の調査により、一般的なユースケースのパフォーマンスが低下することが判明したため、
parallel_chunk_rowsのデフォルト値は0に設定されています。詳細については、設定(LIV-130)のドキュメントを参照してください。CanAdvanceCursorsメソッドからの処理された行数に関するログメッセージをDEBUGに降格しました。
バグ修正¶
timestamp(6)データ型のOracleとPostgresの比較でORA-01830で失敗する問題を修正しました(LIV-127)。
2.0.0(2022-02-15)¶
重大な変更¶
パッケージの名前が
2ndq-livecompareからedb-livecompareに変更されました。実行可能ファイルは
2ndq-livecompareからlivecompareに名前が変更されました。
新機能¶
Comparison Keyと呼ばれる設定の新しいセクションにより、ユーザーはテーブルごとにカスタム比較キー(列のリスト)を定義できます。これは、主キーまたは一意のインデックスのないテーブルで役立ちます(LIV-5)。テーブルにユーザー定義の比較キーまたは主キーがない場合、LiveCompareはテーブルの一意のインデックスを使用しようとします。テーブルは複数の一意のインデックスを持つことができるため、 LiveCompare は列がnullを許容しないインデックスを使用することを好みます。不可能な場合、LiveCompareは列の少ない最初の一意のインデックスを使用しようとします。一意のインデックスがない場合、LiveCompareはテーブルのすべての列を比較キーとして使用しようとします。 LiveCompareは一意のインデックスからのnull許容列を無視しないことに注意してください(LIV-39)。
テーブルのすべての列を比較キーとして使用する場合、LiveCompareはNULL可能な列を無視して、すべての列を検討する際の誤検出を回避するようになりました。この動作は、
ignore_nullable = false(LIV-96)を設定することで無効にできます。ユーザー定義の比較キーまたはテーブルのすべての列を比較キーとして使用する場合、LiveCompareは一意性を強制するかどうかを確認するようになりました。列セットを使用しているときに値が重複している場合、LiveCompareはテーブルでの比較を中止します。この動作は、
check_uniqueness_enforcement = falseを設定することで無効にできます。
パフォーマンスの向上¶
Oracle 12c以降では、LiveCompareは既に共通のハッシュを使用して
comparison_algorithm = block_hashとcomparison_algorithm = row_hashを使用できます。これらはより高速で、マルチプルのワーカープロセス間でテーブルを分割できます。これは、Oracle 12cで導入されたstandard_hash()関数を使用してOracle側で実行されます。現在、LiveCompareは、ユーザーがsys.dbms_cryptoOracleシステムパッケージ(LIV-79)に対するEXECUTE権限を持っている場合、同等の機能sys.dbms_crypto.hash()を使用して、Oracle 11gでcomparison_algorithm = block_hashおよびcomparison_algorithm = row_hashも許可します。
その他の改善¶
Oracle 21c(LIV-47)のサポートを追加しました。
LiveCompareスキーマをレプリケーション対応(BDR、 pglogicalまたはネイティブ論理レプリケーション)データベースに追加できるようになりました(LIV-42)。
LiveCompareは、PostgreSQL 14の新しい
pg_read_all_dataロールを使用できます(LIV-73)。データベースバージョンがサポートされていない場合は、適切なメッセージで中止します。
バグ修正¶
DML生成時のエラーを回避するために、ユニコードシーケンス
\u0000を適切に引用します。
・テーブルを複数のラウンドに分割した場合、合計行数が誤って表示される問題を修正しました(LIV-14)。
Oracle上の空の
BLOBとPostgresの空のbyteaを比較すると、誤検知が生成される問題を修正しました(LIV-103)。接続の問題が原因で比較セッション全体が中止される問題を修正しました。 LiveCompareは再接続して、可能な場合は比較を続行できるようになりました(LIV-84)。
相違がある場合の再チェックモードでの未処理の例外を修正しました(LIV-107)。
テーブルが接続に存在せず、
logical_replication_modeが無効になっている場合、テーブル比較が中止されない問題を修正しました(LIV-108)。timestampデータ型のフィールドがOracleとPostgresの間で常に一致しないハッシュを生成していた問題を修正しました。無視された列が一般的なハッシュでまだ考慮されている問題を修正しました。
非推奨の通知¶
Oracle 10g(LIV-47)へのサポートを終了しました。
1.18.1(2021-12-14)¶
バグ修正¶
非同期接続で内部の丸い部分の列名設定が考慮されていない問題を修正しました(LIV-95)。
1.18.0(2021-12-01)¶
パフォーマンスの向上¶
Oracle用の新しいQueryBlockデータフェッチメソッドを実装しました。アルゴリズムは同じソケットから行をフェッチし続けます。Oracleでは、以前は最後に処理されたマルチ列のPK値を過ぎて行をフェッチする必要があった行値式を含む不等号演算子が許可されないため、より効率的です。これにより、OracleとPostgresの比較のパフォーマンスが大幅に向上します。 PostgreSQLでは行値式を含む不等号演算子が許可されているため、 LiveCompareは準備されたステートメントを使用して同じアルゴリズムを使用して、膨張と
xminホライズンの抑制の観点から影響を与えません。したがって、PostgresとPostgresのパフォーマンスはこの実装の影響を受けません(LIV-83、RT75644、RT75675、RT75332)。comparison_algorithm = block_hash使用時にバッファーをリセットする必要がなくなりました。ハッシュが一致しないブロックが見つかると、 LiveCompare は、一致しないブロック(既にフェッチされている)内のすべての行が個別に比較されるまで正しくcomparison_algorithm = row_hashに切り替え、次のバッファーをフェッチするためにcomparison_algorithm = block_hashに戻ります。これにより、OracleとPostgres、およびPostgresとPostgresの比較(LIV-85、LIV-86、RT75644、RT75675、RT75332)のパフォーマンスが向上します。comparison_algorithmがblock_hashまたはrow_hash(現在Oracle 12以降が必要)に設定されている場合、LiveCompareはOracleとPostgresの比較でも大きなテーブルを分割できるようになりました。ハッシュはデータベース側で行われるため、以前はPostgres対Postgresでのみ可能でした。 OracleとPostgresは共通のハッシュ関数を共有していないため、MD5に基づく共通の行ハッシュを整数ハッシュに変換して、テーブルデータをマルチプルのワーカーに分割できるようにしました。 Oracleでは、パフォーマンス上の理由からデータベース側で実行できなかったため、このハッシュをPython側で計算します。 OracleとPostgresのテーブル分割の並列処理のコストは、PostgresとPostgresの場合と同じではないため、OracleとPostgresでは、parallel_chunk_rowsをデフォルトの1000万よりも高く設定することをお勧めします。たとえば、1億以上に設定すると、アルゴリズムは非常に大きなテーブルのみを分割します(LIV-87)。
その他の改善¶
EDB Extended PostgreSQL 14およびEDB Advanced PostgreSQL 14(LIV-71、LIV-72)のサポート。
相違の検査に役立つOracle
rowidを収集する(LIV-90、RT75644、RT75675)。相違の検査に役立つLiveRound比較アルゴリズムのログを改善しました(LIV-91、RT75644、RT75675)。
バグ修正¶
oracle_fetch_fk_metadataが尊重されない問題を修正しました(LIV-92)。ログが多いユースケースで
log_level = debugを使用すると、ログキューがいっぱいだったためにLiveCompareが未処理の例外で終了する可能性がある問題を修正しました。 Unixシステムでは、キューの最大サイズは32676です。基本のPython実装がログレコードを非同期にエンキューしたために問題が発生しました。解決策は、Python実装をオーバーライドしてログレコードを同期的にエンキューすることでした。これは、log_level = debugおよびログが多いユースケース(LIV-93)
1.17.0(2021-10-01)¶
改善¶
PostgreSQL 14(LIV-66)のサポートを追加しました。
Debian 11(LIV-70)のサポートを追加しました。
バグ修正¶
--recheckは常にセッションIDを必要とします (LIV-76)。ドキュメントのマイナーな修正(LIV-26、LIV-68、LIV-80)。
1.16.0(2021-08-04)¶
パフォーマンスの向上¶
OracleとPostgresの比較セッションで、一般的なユースケースのパフォーマンスを向上させるMD5に基づいた共通の行ハッシュを使用できるようになりました。以前は、OracleとPostgresの比較は
comparison_algorithm = full_rowに制限されていましたが、現在はcomparison_algorithm = row_hashまたはcomparison_algorithm = block_hashも使用できます。デフォルトでは、comparison_algoritm = block_hashに設定されています。 Oracleの制限により、共通ハッシュ、BLOB、およびCLOBフィールドの使用は2000文字に制限され、行全体の幅は4000文字を超えることはできません。共通ハッシュの要件を満たさないテーブルは、comparison_algorithm = full_rowを使用して個別に比較できます。詳細については、ドキュメントを確認してください(RT72038、LIV-61)。buffer_sizeのデフォルト値を256行から4096行に増やしました。parallel_chunk_rowsのデフォルト値を100万行から1000万行に増やしました。
1.15.0(2021-06-06)¶
改善¶
--conflicts実行モードの競合フィルタリングを導入しました。 (LIV-40)LiveCompareは、照合が指定されていない場合、混合テクノロジの比較(OracleとPostgreSQLなど)で
force_collate = Cを想定します(LIV-44)。既に追加されたEPAS 13へのサポートに加えて、EPAS 11および12(LIV-48)へのサポートを追加しました。
バグ修正¶
OracleとPostgreSQLの比較でLiveCompareが動かなくなった (RT71243 / LIV-43)
--conflictsで作成された比較セッションで--recheckを実行できないバグを修正しました (LIV-50)
1.14.0(2021-05-14)¶
新機能¶
BDR 3クラスターに固有の新しい
--conflicts実行モード。 BDR 3.6の場合、テーブルbdr.apply_logがチェックされ、 BDR 3.7の場合、テーブルbdr.conflict_historyがチェックされます。 LiveCompareは、競合がログに記録された行(key_tuple、local_tuple、remote_tuple、およびapply_tuple)からPK値を抽出し、既にPK値でフィルター処理されている影響を受けたテーブルでのみ自動クラスター全体の比較を実行できます。次に、比較により、クラスター内のすべてのノードの現在の行バージョンが確認されます。 BDRの競合のみをチェックすることにより、比較は--compareモードよりもはるかに高速であるため、頻繁に実行してクラスターの一貫性を確保することが実行可能であり、推奨されます。
改善¶
LiveCompareは、特定のテーブルが存在しない場合、またはテーブルがレプリケーションセットの構成に従ってレプリケートされたデータを受信しない場合に、 BDRノードを無視できるようになりました。以前はすべての接続で比較が実行されましたが、比較コンセンサスは必要に応じてテーブルごとにノードを自動的に除外できます。コンセンサスマジョリティは、テーブルが存在し、テーブルがノードがサブスクライブしているレプリケーションセットに関連付けられているノード間で引き続き達成されます。これにより、 BDR Witnessノード(LIV-29)を適切に無視することを含め、レプリケーションセットによって定義された異なるアーキテクチャを持つBDRクラスターで比較できます。
すべての実行モードの短い説明を表示する
--helpのメッセージを改善しました(LIV-28)。列がNULL可能かどうかに関する情報は、テーブルのメタデータにも収集されるようになりました(LIV-28)。
ドキュメントで、列が主キーの一部である場合、ソートできないデータ型が
stringに変換されることを明確にしました(LIV-4)。oracle_ignore_unsortableがOracleのPKの一部ではないソートできない列を無視することをドキュメントで明確化しました(LIV-26)。data_fetch_modeがprepared_statements(デフォルト)またはserver_side_cursors_with_hold(LIV-26)に設定されている場合、parallel_data_fetchを有効にできる(デフォルトで)ことをドキュメントで明確にしました。max_parallel_workersのデフォルト値が2であることをドキュメントで明確化しました(LIV-26)。
バグ修正¶
LiveCompareは型をスキーマ修飾名として扱うようになりました。この修正の前に、LiveCompareは
search_path外のタイプを見つけることができませんでした(LIV-35)。
非推奨¶
BDR 3.7で非推奨になった
bdr.difference_fix*関数の使用を削除しました。これらの関数はPostgreSQLスーパーユーザではなくbdr_superuserを必要とするため、 BDR 3.6用に生成されたDMLスクリプトにまだ含まれています。これはドキュメント(LIV-1、LIV-31)で明確にされています。
1.13.1(2021-04-14)¶
バグ修正¶
Oracle データ型
RAWおよびROWIDのサポートに関する問題を修正しました (RT69656)。Oracle からのバイナリオブジェクトフィールドが NULL の場合の未処理の例外を修正しました (RT69656)。
ドル引用符で囲まれた文字列を含むOracle x Postgres比較サポートの問題を修正しました(RT69656)。
特定のPostgreSQLの予約キーワードとして名前付けられた列が引用され、比較で考慮されないコーナーケースを修正しました(RT69656)。
1.13.0(2021-02-25)¶
パフォーマンスの向上¶
PostgreSQL接続にのみ適用される新しい設定
data_fetch_modeを実装しました。次のいずれかの値を想定できます。 -prepared_statements:このバージョンおよび以前のバージョンのデフォルトの動作。準備されたステートメントを使用してデータを取得します。データベース上のフットプリントが小さく、一般的なユースケースで優れたパフォーマンス。運用データベースには stronly をお勧めします。 -server_side_cursors_with_hold:サーバー側のカーソルWITH HOLDを使用してデータを取得します。これは、データの各チャンクがLiveCompareに送信される前に一時ファイルで具体化されるため、xminを抑制し、データベースのメモリと一時ファイルの使用量を増やす可能性があります。その結果、複数の小さなテーブルの方が高速になる可能性があり、テストと移行のシナリオに推奨されます。 -server_side_cursors_without_hold:サーバー側のカーソルWITHOUT HOLDを使用してデータをフェッチします。xminを保持できますが、データベースのメモリと一時ファイルの使用量はWITH HOLDよりも低くなります。大規模なテーブルの場合は高速になる可能性があるため、負荷の低いデータベースにお勧めします。
その他の改善¶
新しい設定
abort_on_setup_errorを実装しました。有効にすると、テーブルの比較ラウンドを設定するときにエラーが発生した場合、比較セッション全体を中止するようにLiveCompareに指示します。デフォルトで無効になっています。つまり、LiveCompareは何らかの理由でセットアップフェーズが失敗したテーブルをログに記録し、無視します。新しい設定
abort_on_setup_errorのため、設定setup_max_attemptsおよびsetup_min_interval_between_attemptsは廃止されました。
1.12.0(2021-02-11)¶
新機能¶
新しい設定
session_replication_roleを実装しました。有効にすると、適用スクリプトの先頭でsession_replication_roleをreplicaに設定します(RM20247、RT69742)。新しい設定
split_updatesを実装しました。有効にすると、UPDATEステートメントを対応するDELETEおよびINSERTステートメントに分割します(RM20355、RT69742)。新しい接続設定
fetch_fk_metadata、特定の接続で外部キーに関するメタデータを取得するかどうかを指示します。デフォルトで有効になっています。新しい一般設定
oracle_fetch_fk_metadata。Oracle接続のfetch_fk_metadataの値をオーバーライドします。デフォルトで無効(RM20244、RT69656)。新しい一般設定
float_point_round。浮動小数点値を比較するときに指定された10進数で丸めるようにLiveCompareに指示します。デフォルトで無効になっています(RT69381)。
削除された機能¶
--fix実行モードを削除しました。ユーザーは、LiveCompareが生成するDMLスクリプトを確認することをお勧めします。
改善¶
LiveCompareで生成された適用スクリプトには、先頭に
difference_fix_start_queryも含まれ、DMLを適用する前にテーブルの所有者を設定するようになりました。comparison_algorithm = full_rowはparallel_chunk_rowsを尊重し、すべての接続で比較されるテクノロジーがPostgreSQLの場合、テーブルを複数のワーカーに分割します。テーブル分割を無効にするには、parallel_chunk_rows = 0を設定します。EPASを比較するときにシステムスキーマ
sysのテーブルを除外する(RM20392)。max_parallel_workersのデフォルト値を2から4に増やしました。
バグ修正¶
comparison_algorithm = block_hashで、パラレルワーカーが処理していたデータチャンクに相違がある場合のパフォーマンスの低下を修正しました。custom_dollar_quoting_delimiterのデフォルトのランダムに生成された文字列が原因で、FIPS対応のオペレーティングシステムでLiveCompareがクラッシュする問題を修正しました(RT70032、RM20378)。oracle_ignore_unsortableまたはcolumn_intersectionがすべての列を削除しても、LiveCompareが比較を実行しようとする問題を修正しました。現在、 LiveCompare はこれらのテーブルでの比較を中止し、適切なメッセージをログに記録します。LiveCompareが
custom_dollar_quoting_delimiterを使用してPK値を表していないコーナーケースを修正しました(RT69656)。--recheckモードでLiveCompareを実行すると、順序付けが異なるために出力スキーマの制約が損なわれる可能性があるバグを修正しました。
1.11.0(2021-01-19)¶
改善¶
LiveCompareによって生成されるDMLコマンドの順序の新しい設定
difference_statement_order、デフォルトでdelete_update_insertに設定されます(RT69742、RM20245)。EnterpriseDB PostgreSQL Advanced Serverのサポート - EPAS 13。
CentOSおよびRHELシステムでのPostgreSQL 13のパッケージ化。
バグ修正¶
最小PK値が既にデータの最後に達したカーソルの最大PK値より大きいためにカーソルがまだ初期化されていない場合、以前のカーソルは初期化されますが、そのデータは終了(RT69742、RM20249)。
LiveCompareが
logical_replication_mode = pglogicalのときにInitial Connectionとnode_nameを許可していないバグを修正しました(RM19795)。LiveCompareが
schema_qualified_table_names = offのときに強制するのではなく、schema_qualified_table_names = onのときに強制的にoracle_user_tables_only = onを強制していたバグを修正しました(RT69656)。comparison_algorithm = full_rowの場合、文字列が適切にクォートされないバグを修正しました(RM20251)。生成されたDMLで文字列が適切に引用されないバグを修正しました。
1.10.1(2020-10-29)¶
バグ修正¶
初期メタデータフェッチフェーズで行われる、各テーブルの最小および最大プライマリキー値のフェッチのパフォーマンスを向上しました(RM19681、RT69088)。
比較セッションを再開でき、実行モード
--fixおよび--recheckは、同じメジャーバージョンの場合、別のLiveCompareバージョンで以前に作成した比較セッションに対して実行できます。例:セッションが1.10.0で作成され、顧客がLiveCompareを1.10.1にアップグレードしてから--fixを実行した場合、セッションは同じメジャーバージョンで作成されたため、LiveCompareは--fixモードの実行を許可します(RM19686、RT69088) 。LiveCompareメタデータで
Row Filterを保存するときの一重引用符の問題を修正しました(RM19682、RT69088)。LiveCompareのデフォルトのドルクォーティング区切り文字(
custom_dollar_quoting_delimiterが設定されていない場合)が固定されたハッシュ文字列になりました。実行間でランダム設定値が変更されたため、比較セッションを再開できませんでした(RM19684、RT69091)。custom_dollar_quoting_delimiterの設定をoffで明示的に無効にできるようになりました。つまり、LiveCompareはデフォルトのハッシュ文字列を区切り文字として使用します。 (RM19685、RT69091)。
1.10.0(2020-10-02)¶
改善¶
新しい一般設定
custom_dollar_quoting_delimiter、Postgres DMLコマンドを生成するときに文字列を引用する方法をLiveCompareに指示します。設定されていない場合(デフォルト)、LiveCompareはランダムな文字列を生成してドル引用符の区切り文字として使用します(RT68950、RM19159)。LiveCompareは、セッションの最初の実行(セッション作成)と次の実行(
resume、--recheckまたは--fix)の間に設定も接続属性も変更されていないことをチェックするようになりました。バックグラウンドまたは別のシェルウィンドウで実行中にLiveCompareをソフトに停止できるようになりました(RM18564)。
バグ修正¶
ユーザーが
apply_on_the_<node>.sqlファイルを使用して手動で修正を適用した後、--recheckモードで実行中にLiveCompareが差分の数を正しく更新していませんでした。LiveCompareを
--recheckモードで複数回実行すると、apply_on_the_<node>.sqlファイルに複製されたエントリが表示され、サマリーに違い/修正の複製数が表示されます。サマリービューで多数の相違があると
integer out of rangeエラーが発生する。
1.9.1(2020-08-13)¶
バグ修正¶
特定のプラットフォームに存在しない可能性のあるPOSIX定数を処理しました(RM18197)。
パーティション分割されたテーブルを処理するときに、ユーザーがテーブルフィルターを設定してパーティションを削除すると、LiveCompareはマスターテーブルとフィルターされたものを除く他のすべての子の両方を比較します。これは修正されました。 (RM16912)。
1.9.0(2020-08-06)¶
新機能¶
設定
full_comparison_mode = on|offは非推奨になり、新しいblock_hashアルゴリズム設定を許可する新しい設定comparison_algorithmに置き換えられました-これにより、基本テストで50%のパフォーマンスが向上しました。サポートされているアルゴリズムの完全なリストは次のとおりです。 -full_row(古いfull_comparison_mode = onと同じ): ハッシュを使用した行比較を無効にします。また、ハッシュに依存しているため、テーブル分割も無効になります。設定parallel_chunk_rowsは無視され、テーブルは分割されません。この場合、完全な比較は、行を列ごとに比較することによって実行されます。 PostgreSQL以外のデータ接続がある場合、LiveCompareは自動的にcomparison_algorithm = full_rowを設定します。 -row_hash(旧full_comparison_mode = offと同じ) : ハッシュを使用した行比較を有効にし、テーブル分割を有効にします。テーブルは分割されるため、各ワーカーはテーブルごとに最大parallel_chunk_rowsを比較します。データ行はPostgreSQLでハッシュされるため、比較はfull_rowよりも高速です。ただし、特定の行についてハッシュが一致しない場合、その特定の行について、LiveCompareはfull_rowアルゴリズムにフォールバックします(つまり、行ごとに比較します)。この設定は、すべてのデータ接続がPostgreSQLの場合にのみ許可されます。 -block_hash(新しく実装された比較アルゴリズム):row_hashと同じように動作しますが、行ごとに比較する代わりに、LiveCompareは「ブロックハッシュ」、つまり、フェッチされたデータバッファー内のすべての行のハッシュ(最大buffer_size行)。概念的には、2レベルのマークルツリーのように機能します。ブロックハッシュが一致する場合、 LiveCompare はブロック全体を進めます(これが、この比較アルゴリズムがrow_hashよりも高速な理由です)。ブロックハッシュが一致しない場合、 LiveCompare はrow_hashにフォールバックし、バッファー内で行ごとに比較を実行して、発散する行を見つけます。この設定は、すべてのデータ接続がPostgreSQLの場合にのみ許可されます。これがデフォルト値(RM14146)です。LiveCompareは、エラーで終了する前に、各テーブルセットアップで数回試行できるようになりました。この動作を構成するために2つの新しい設定が追加されました。
setup_max_attempts(デフォルトは3)とsetup_min_interval_between_attempts(デフォルトは30秒)です(RM17518)。
改善¶
LiveCompareの出力は、
>を使用して出力をリダイレクトしているときに出力ファイルに印刷され、sshを介してLiveCompareを実行しているときにも表示されるようになりました。ログとデバッグを改善するためにコンセンサスがリファクタリングされました(RM17107)。
比較セッションの最後に、LiveCompareがログレベルに応じて、検出された問題のカウンターを表示するようになりました(RM18196)。
Tieの場合、すべてのノードに対してDMLが生成されるようになりました(RM16656)。
LiveCompareは、特定のテーブルで相違が見つかった場合、テーブルのサマリーに無視される列の最大数を表示するようになりました(RM16581)。
LiveCompareは、
OutputまたはInitial(指定されている場合)の適切なメッセージで中止されるようになりました。接続に到達できません。また、到達可能なデータ接続が2つ未満の場合は、適切なメッセージで中止します。 2つ以上到達可能な場合、その1つだけを比較します(RM14030)。DebianおよびUbuntuパッケージには
python3-setuptoolsが必要になりました(RM17232)。サポートされている最小のPythonバージョンとLinuxディストリビューションに関するドキュメントを明確化しました(RM17232)。
パーティション分割されたテーブルを扱う場合、LiveCompareはマスターテーブルを使用する代わりに各パーティションをスキャンすることを優先します。このようにして、行数のより良い見積もりと、ワーカー間のジョブのより良い分割を実現します。
差分カウントの代わりにPOSIX標準のリターンコードを使用する (RM18197)。
TPAexecを使用してLiveCompareをインストールする方法を示すドキュメントに、サンプル
config.ymlの例を追加しました(RM15312)。--recheckおよび--fixモードのログを改善しました (RM15768)。例外が発生した場合、ログにPythonスタックトレースが含まれます(RM17158)。
PgBouncerを介してPostgreSQLに接続するLiveCompareに関するいくつかの考慮事項をドキュメントに含めました(RM18019)。
vw_running_processesビューにround_idおよびround_partフィールドを追加しました。これは、LiveCompareの実行がcronジョブとしてスケジュールされている場合の比較の進行状況を確認するのに役立ちます。
バグ修正¶
Output Connectionでtuple concurrently updatedを引き起こしたConsensusの競合状態を修正しました(RM17107)。num_processed_rowsが実際の値よりも高く報告される問題を修正しました(RM17373)。実行中に何らかの問題が見つかった場合、LiveCompareは
successfully executedを報告しなくなりました(RM17289)。ユーザーが
max_parallel_workers<= 0を設定した場合にハングしないように、少なくとも1人のワーカーを強制しました。印刷されたテーブルの大きな整数の固定番号形式。 LiveCompareは、科学表記法を使用する代わりに数値全体を表示するようになりました(RM16683)。
--fixモード実行後、--recheckモードが誤った差分ステータスを報告する問題を修正しました(RM15953)。無視された列のリストがテーブルのメタデータで誤って報告される問題を修正しました (RM17663)。
別の信頼できるソースまたはタイブレーカーでLiveCompareを再実行すると、相違が同点として誤って報告される問題を修正しました(RM17909)。
1.8.0(2020-06-15)¶
新機能¶
新しい設定
difference_sources_of_truth、どの接続が常にコンセンサスを得るかを指示するために使用されます。consensus_modeをsource_of_truthに設定する必要があります(RM15952)。セッションフォルダーが作成される場所を示す新しい設定
work_directory。 cronジョブとしてスケジュールされたLiveCompareを実行するのに役立ちます(RM16476)。
改善¶
差分修正DMLスクリプトに書き込まれるDMLコマンドの順序は、外部キーを考慮に入れるようになりました。
--fix実行モードでも同じ順序が使用されます(RM15766)。LiveCompareは、既知の接続IDのリストに対して
difference_tie_breakersおよびdifference_sources_of_truthをチェックするようになりました。不明な接続IDが指定された場合、ユーザーにエラーが表示され、比較が中止されます(RM16622)。CentOS 8およびUbuntu 20.04のサポートを追加しました(RM14480、RM14619、RM14974)。
通常のテーブルを印刷するときに、データがnullの場合に空のセルが印刷される。代わりに
[null]を出力するようになりました(RM16686)。
バグ修正¶
Coverityスキャナーで検出された軽微な問題を修正(RM16623)。
メインスクリプトが3つのパラメーターのみで呼び出されたときに正しく処理し、セッションIDか実行モードかを正しく区別します。
表データを転置形式で印刷するときに、データがnullの場合、フィールド全体が省略される。この問題は修正されました(RM16686)。
1.7.0(2020-05-18)¶
重大な変更¶
実装されたLiveCompare実行モード: -
--compare:デフォルトの実行モード。比較のみを実行し、並列で実行されているスレッドを再確認/修正することに違いはありません。比較中に、検出された各違いは、後で再チェックとオプションの自動修正のためにdifference_logテーブルに保存されます。・--recheck:compareモードで作成済みのセッションに対して何度でも実行できます。一つ一つ違いを再確認し、difference_logテーブルを更新します。・--fix:compareモードで作成済みのセッションに対して実行できます。違いを1つずつ再確認し、自動的に修正を試み、difference_logテーブルを更新します。比較モードでは、相違のリストを保持するビューは
vw_open_differencesですが、再チェックおよび修正モードの場合、ビューはvw_differencesです。自動修正モードでは、 BDR >= 3.6.18の場合、LiveCompareは
bdr_local_only_originと呼ばれる新しく作成された複製起点を使用します。設定
difference_mode、min_time_between_difference_checks、max_difference_check_attemptsおよびdifference_check_nap_timeを削除しました。設定
live_mode、min_time_between_rounds、およびmax_tail_rounds_before_full_roundを削除しました。show_progress_barsの設定が有効になっていて(デフォルトで)、Pythonモジュールtqdmが< 4.16.0、LiveCompareはアップグレード方法を説明して中断します。
新機能¶
デフォルトで無効になっている新しい一般設定
column_intersectionを実装しました。この設定を有効にすると、PK列が同じである限り、LiveCompareは異なる列セットを含むテーブルの比較を許可します。比較で考慮される列のセットは、すべての接続のテーブルに存在する列の共通部分です(RM14147、RT67064)。新しいセクション
Column Filterを実装しました。ここでは、テーブルごとに、比較で無視する列のコンマ区切りリストを定義できます。 PKの一部である列は無視できません。このセクションのフォーマットは、Row Filterセクション(RM14629、RT67064)と同様に、1行に1つのテーブルです。デフォルトで無効になっている新しい一般設定
oracle_ignore_unsortableを実装しました。有効にすると、テーブルにPKがない場合、Oracleのソートできないデータ型(BLOB、CLOB、NCLOB、BFILE)の列を無視するようにLiveCompareに指示します。この設定を有効にする場合は、column_intersectionも有効にすることをお勧めします(RT67064)。デフォルトで無効になっている新しい一般設定
oracle_user_tables_onlyを実装しました。有効にすると、Oracleにログインしているユーザーからのみテーブルのメタデータを取得するようにLiveCompareに指示します。また、Table Filter -> tablesはスキーマ名なしでテーブル名でフィルタリングできるようになりました(RT67064)。デフォルトで有効な新しい一般設定
schema_qualified_table_namesを実装しました。それを無効にすると、スキーマ修飾テーブル名を使用せずにテーブルを比較できます。Oracle x Postgres比較では、oracle_user_tables_onlyも有効にする必要がありますが、Postgres x Postgresでは、同じデータベース内であっても、異なるスキーマの下にあるテーブルを比較できます。また、schema_qualified_table_namesが有効になっている場合、Table Filter -> tables、Row Filter、およびColumn Filterはスキーマ名なしでテーブル名を許可します。 (RM14901、RT67042)。schema_qualified_table_namesが有効でstart_queryが設定されていない場合(デフォルト)、LiveCompareはCVE-2018-1058 (RM15391)から保護するためにstart_queryを使用してsearch_pathをクリアします。新しい一般設定
force_collateを実装しました。デフォルトではoffに設定されます。これは、PostgreSQLで照合が強制されないことを意味します。有効な照合名に設定すると、照合が異なるPostgresデータベース、またはPostgresにC以外の照合がある場合はOracleとPostgresデータベースを比較すると役立ちます(この場合、ユーザーはforce_collate = Cを設定する必要があります)(RM15016、RT67064)。デフォルトで無効になっている新しい一般設定
fetch_row_originを実装しました。この設定を有効にすると、LiveCompareは各行のBDR/pglogicalオリジン名を取得します(RM14487)。比較中に例外が見つかった場合、LiveCompareは特定のテーブルの比較ラウンドを中止し、新しい列
rounds.round_errorにエラーを書き込み、失敗したワーカーをプールに戻します。LiveCompareの一般的な進行状況バーに、比較中にエラーが発生したために中止されたテーブルの数が表示されるようになりました。
改善¶
最初に接続を開き、データベース接続を再利用します (RT67042)。
ユーザーに設定ファイルを読み取る権限がない場合のエラーメッセージを明確にしました (RT67064)。
Table FilterとRow Filterには一般設定schema_qualified_table_namesが無効になっていない限りスキーマ修飾テーブル名が必要であることをドキュメントで明確化し、構成例を提供しました(RM15311、RT67669)。構成ファイルに認識されない設定が見つかった場合、エラーメッセージで中断します。
必要な接続数についてドキュメントで明確化。
CentOS / RHELのEPELリポジトリへの依存関係に関するドキュメントを明確化。
postgresオペレーティングシステムユーザー用のcx_OraclePythonモジュールのインストール方法に関するドキュメントを明確にしました。セッションディレクトリとログファイルに
lc_プレフィックスを追加しました。いずれかの接続で
technology = oracleとPythonモジュールcx_Oracleが見つからない場合、LiveCompareは現在のユーザーの最新のcx_Oracleをインストールする方法の説明を中止します。自動生成されたDML
*.sqlスクリプトには、 BDRのSET LOCAL bdr.xact_replication = off;句が含まれています。
バグ修正¶
列名がPostgresの予約語であるため、列名の不一致が誤って評価され、OracleとPostgresのテーブル比較が中止される問題を修正しました(RT67064)。
Oracle: テキスト列を含むPKが
ORA-00920: invalid relational operatorエラーを生成することがある問題を修正 (RT67064)ソートできないデータ型の列が
ORDER BY句で適切に処理されないOracleとPostgresの問題を修正しました(RT67064)。設定
difference_allow_null_updatesが誤って解釈されていたため、UPDATEが列をNULLに設定していないDMLジェネレーターの問題を修正しました。比較カーソルが適切に進行しないコーナーケースを修正しました。
ユーザーが既に終了した比較セッションを再開しようとしたときのエラーメッセージを修正しました。
1.6.0(2020-04-03)¶
PostgreSQL >= 11の場合、
hashtextの代わりにhashtextextendedを使用して比較ワーカー間でデータを分割します (RT67167、RM13664)。Oracle PKの列名のリストに重複する列名があり、エラーが発生して比較が中止される問題を修正しました(RT67064、RTM14145)。
最初にデータ接続に接続できない場合、LiveCompareは比較セッション全体を中止するようになりました(RT67042)。
ラウンド状態が頻繁に保存され、
min_time_between_round_savesを尊重しない問題を修正しました。パフォーマンスを向上させます。接続とクエリの問題のログを改善しました。
1.5.0(2020-03-13)¶
Oracleは
parallel_data_fetchをサポートしていないため、接続の1つがOracleの場合、parallel_data_fetchの設定は自動的に無効になります。実行できるラウンドの最大数と処理できる行と1回の比較で見つかる差分を増やしました(データ型は
integer〜bigint)(RM13664、RT67167)。プログレスバーをASCIIからUnicodeに変更。
5秒ごとに経過したグローバルプログレスバーを更新します。
グローバル進行状況バーからレートと推定時間を削除し、接続数を追加しました。
Pythonモジュール TQDM >= 4.16が利用可能な場合、グローバル進行状況バーに追加の統計(検出された違いと適用された自動修正の数)が表示されます。
テーブルが分割されていても、最大プロセス数が比較予定のテーブル数によって制限される問題を修正した。
テーブルのメタデータを取得するときのログの冗長性をINFOからDEBUGに減らしました。
手動(Ctrl-C)または自動割り込み(
stop_after_time)が発生したログケースを含みます。
1.4.0(2020-02-13)¶
多方向比較のパフォーマンスを向上させるために、並列データフェッチを実装しました。パラレルデータフェッチはデフォルトで有効になっていますが、
parallel_data_fetch = offを設定して無効にできます。行がローカル、つまり
xminがレプリケーションオリジンに関連付けられていない問題を修正しました (RT66906)。
1.3.0(2020-01-30)¶
多方向比較:LiveCompareは、任意の数の接続を比較できるようになりました。比較は、すべてのノードから同時にデータを取得することによって実行されます。これにより、コンセンサス(クォーラムベースと単純過半数の両方がサポートされます)とタイブレーカー接続のオプションのリストに基づいて、データの不整合を判断できます。新しいビュー
vw_consensusを使用して、LiveCompareがどのように機能したかの詳細を確認できます。新しい一般設定
all_bdr_nodesを追加しました。有効にすると、ユーザーはBDRノードをポイントするInitial Connectionセクションのみを指定でき、LiveCompareはBDRクラスター内のすべてのアクティブノードを考慮して接続のリストを構築します。bdr.node_summaryビューに表示されるように、LiveCompareがノードDSNを使用してすべてのBDRノードに接続できる必要があることに注意してください。データ比較で相違が見つかったときにどの接続(またはBDRノード)が正しいと見なされるかを決定する、新しい一般設定
consensus_modeを追加しました。simple_majorityまたはquorum_basedです。consensus_mode = quorum_basedの場合、新しい設定difference_required_quorum(0.0〜1.0の値、デフォルト0.5)が考慮されます。デフォルトはconsensus_mode = simple_majorityです。新しい設定
difference_tie_breakersを追加しました。データに相違がある場合にコンセンサスが正しい接続またはノードを決定できない場合に役立ちます。接続名のコンマ区切りリストである必要があります。例:difference_tie_breakers = node1,node2。この例では、セクションnode1 Connectionおよびnode2 Connectionsを.iniファイルまたはbdr_all_nodes = onで定義する必要があり、Initial Connectionのみが定義されていますが、node1およびnode2は有効なBDRノード名である必要があります。デフォルトでは、接続はタイブレーカーと見なされません。
・
多元比較では、接続部名に「Left」「Right」以外の接続名も可能です。下位互換性が維持されているため、ユーザーは引き続きLeft Connection
とRight Connection
を定義できますが、上記で説明したようにdifference_tie_breakers
の定義が必要になるのは2つの接続のみです。以前は、「左」接続は常にタイブレーカーと見なされました。つまり、自動差分修正が有効になっている場合は正しいと見なされました。
多方向比較では、接続の1つだけがPostgreSQLと異なる必要があります。
新しい設定
stop_after_timeを実装して、数秒後にLiveCompareを手動で中断できます。デフォルトではstop_after_time = 0これは、LiveCompareが自動的に停止しないことを意味します(手動Ctrl-cのみ)。 LiveCompareは、すべての場合にCtrl-cを使用して手動で停止できます。 LiveCompareが手動で中断されたか自動で中断されたかに関係なく、コマンドラインでセッションIDを引数として渡すことで再開できます。新しいテーブル
difference_fixは、各データ接続で実行された(または実行しようとした)正確なDML LiveCompare、時間、エラー(ある場合)を保存します。スクリプトapplied_*.sqlにも、同じように適用されたDMLが含まれます。LiveCompareはテーブルの所有者をテーブルのメタデータに保存するようになりました。
差分修正トランザクションのタイムスタンプを2000-01-01から2010-01-01に変更しました。これはBDR < に対してのみ有効です。 3.6.11、3.6.11以降、組み込み関数
bdr.difference_fix_xact_set_avoid_conflictが使用されるため。自動修正が無効になっている場合、 BDRデータベースに
bdr_livecompareレプリケーションオリジンが不必要に作成されていた問題を修正しました。比較ワーカープロセスが正常に終了しない場合がある問題を修正しました。
CI:LiveCompareパッケージがUbuntu 18.04 LTS用にもビルドされるようになりました。
1.2.0(2020-01-03)¶
LiveCompareは、OracleとPostgresの比較でBLOBフィールドをサポートするようになりました。
相違点の無視:ユーザーは、出力PostgreSQL接続(RM8939)で関数
<livecompare_schema_name>.accept_divergence(session_id, table_name, difference_pk)を手動で呼び出すことにより、特定の相違点の相違の再チェックを停止できます。揮発性のダイバージェンス:違いの再チェック時に一貫性のない行で
xminが変更された場合、LiveCompareは再チェックを停止し、違いを揮発性としてマークします(RM10964)。上書きされた相違:自動修正が適用された後、再チェックして
xminが変更された場合、修正後に行が変更されたことを意味します。 LiveCompareは発散を上書き済みとしてマークします(RM10964)。修正不可能な相違:自動修正が正常に適用された後、再チェックしても
xminが変更されていない場合、LiveCompareは相違を修正不能としてマークします(RM10964)。LiveCompareは、相違がない場合にcode = 0を返し、相違がある場合にリターンコード> 0を返すようになりました。
テーブルフィルターと行フィルターは、すべての一般設定とともにテーブル
<livecompare_schema_name>.settingsに保存されるようになりました。新しい一般設定
difference_check_nap_time、新しい差分チェックスプリントを開始する前に差分チェックワーカーがスリープする秒数を制御します。デフォルト:5秒。BDR 3のテーブルリストを構築するとき、LiveCompareは宣言型パーティションを考慮しません (RT66502)。
LiveCompareは、PostgreSQL接続に対してのみDMLスクリプトを生成するようになりました。
自動修正を有効にする場合(
difference_mode = live_fixまたはdifference_mode = offline_fix)、右の接続がPostgreSQLである必要があります。修正されたセキュリティ問題:テーブル/列の名前とすべてのリテラルが適切に引用されます(RM12530)。
カラム名に予約語を使用した場合の不具合を修正しました (RM12530)。
ビュー
vw_differencesの列名の問題を修正しました(RM12529)。ハッシュ比較でテーブルが不必要に分割されていた問題を修正しました。
1.1.0(2019-12-18)¶
BDR 3のテーブルリストを構築するときに、LiveCompareは、Left ConnectionとRight Connectionの両方のBDRノードに関連付けられたレプリケーションセットの共通部分のみを考慮するようになりました。
パーティションテーブルまたはパーティションが検討されているときにテーブルリストを構築する際の問題を修正しました (RT66499)。
接続の検証とテーブルリストの作成の初期ステップのログの詳細度を向上させました。
Oracleのエンコーディングと文字列の処理に関する問題を修正しました。
1.0.0(2019-12-03)¶
LiveCompareはBDRでレプリケーションオリジンを作成して使用できます。 BDRバージョンが3.6.11以降の場合、LiveCompareでは、
bdr_superuser権限を持つユーザーまたはPostgreSQLスーパーユーザーがBDRファンクションbdr.difference_fix_origin_create(text)、bdr.difference_fix_session_setup(text)、bdr.difference_fix_session_reset()、およびbdr.difference_fix_xact_set_avoid_conflict()を使用して複製元管理を実行する必要があります。 BDRバージョンが3.6.10以下の場合、LiveCompareはPostgreSQLの機能を利用した複製起点管理を行うためにPostgreSQLのスーパーユーザーが必要です。それ以外の場合、LiveCompareはレプリケーションオリジンを管理しようとしません。 (RT66192およびRM11000)。LiveCompareは、 BDR/pglogicalの一貫性のない各行から複製元情報を取得できます。 BDRバージョンが3.6.11以降の場合、LiveCompareは各行からレプリケーションオリジン情報を取得するために
bdr_superuser権限を持つユーザーまたはPostgreSQLスーパーユーザーを必要とします。 BDRバージョンが3.6.10以下またはpglogical 3を使用している場合、 LiveCompareには各行からレプリケーション元情報を取得するためのpglogical_superuser権限を持つユーザーまたはPostgreSQLスーパーユーザーが必要です。それ以外の場合、LiveCompareは複製起点情報を取得しようとしません(RM11971)。親テーブルが既にテーブルリストにある場合、テーブルリストからパーティションを削除します(RT65920およびRM10994)。
pglogicalとBDRのテーブルリストを構築するときは、常にレプリケーションセットテーブルを検討します (RT65920)。
空の文字列を処理するときの問題を修正しました (RT65918 および RT65988)。
0.11.0から0.12.0へのアップグレードの問題を修正しました(RT65918およびRT65988)。
最小PKと最大PK値の決定の問題を修正しました。
0.12.0(2019-11-01)¶
自動修正トランザクションで、ロールをテーブルの所有者に変更するように
difference_fix_start_query設定のデフォルト値を変更しました。これは、データベースユーザーが悪意のあるトリガーを作成して、LiveCompareが使用する特権ロールにアクセスするのを防ぐために行われます。その結果、右の接続のユーザーは、ロールをテーブルの所有者に切り替える必要があります(RM11000)。LiveCompareがテーブルリストを構築した後、LiveCompareがテーブルの比較ラウンドを開始する前に、テーブルが削除されるか、重大なスキーマの変更を受け取った場合に処理されました。 LiveCompareは、比較ラウンドの前にテーブルに関するメタデータをチェックおよび更新するようになりました(RT65918)。
pg_replication_origin_session_setup実行時の問題を修正しました (RT65988)。最大PK値の決定の問題を修正しました(RM11340)。
データベースに多数のテーブルがある場合に、テーブルからメタデータを取得するときのパフォーマンスの問題を修正しました。
0.11.0(2019-10-10)¶
各差分チェックはテーブル
difference_logに記録されるようになりました。これは、時間の経過に伴う各差分の分析に役立つ情報を提供します。各違いは、次のいずれかのステータスを通過できます。- 検出(D) :違いが検出されました。difference_mode = live_nofixまたはdifference_mode = live_fixの場合、LiveCompareは、結論に至るまで(以下の他のステータスを参照)、最大N回(max_difference_check_attemptsの設定で構成可能)、各再チェックの間にX秒間待機します(またmin_time_between_difference_checksを設定して構成できます)。difference_mode = offline_nofixまたはdifference_mode = offline_fixの場合、見つかった各違いはすぐに 永続的 と見なされます。 - 永続的(P) :max_difference_check_attempts回の違いを再チェックした後、LiveCompareは再チェックを停止し、違いを 永続的 としてマークします。 Ifdifference_mode = offline_nofixまたはdifference_mode =offline_fix`, then all differences are marked as permanent at the moment they are detected, because there is no re-check. - Absent(A) : If before having reachedmax_difference_check_attempts, LiveCompare finds that the difference does not exist anymore (the row is now consistent between both databases), then LiveCompare stops re-checking and marks the difference as Absent (in previous versions, LiveCompare would remove the register from the difference table). - NotAllowed(N) : The difference was detected, but LiveCompare is forbidden to automatically fix this difference because user has limited the types of differences that can be automatically fixed (via settingsdifference_statementsand/ordifference_allow_null_updates). - Fixed(F) : The difference was automatically fixed by LiveCompare in theRight Connection, by applying the DML from field ` right_difference_differtran19出力接続の自動スキーマ変更:ユーザーが
Output Connectionを以前のLiveCompareバージョンで使用されたデータベースをポイントしている場合、LiveCompareは自動的にスキーマの変更を処理します。 0.11.0の場合、LiveCompareはスキーマを再作成しますが、0.12.0以降、実装はスキーマの変更のみを適用し、ユーザーデータを保持します。.iniファイルからのセッション値を保存するテーブルconnectionsおよびsettingsを作成しました。各違いの行表現の改善:行全体がJSONとして保存されるようになりました。
異なる各行の拡張列に
xminを格納します。各行の拡張列(
ctid、xmin、origin)もJSONとして保存されるようになりました。複数行の値を持つテキスト列、バイナリデータを持つ列、および配列列のDMLを改善しました。
テーブルに PK がなく、複数行の文字列、null 値、または型が
byteaの場合の未処理の例外を修正しました。または、テーブルにPKがあった場合、ただし、PKに上記の状況のいずれかがある場合。
0.10(2019-09-24)¶
新しい設定
difference_modeを追加しました。違いは報告されますが、修正されません。・offline_fix:比較中のテーブルは負荷がかかっていないため、差分は再チェックされません。違いが見つかると、Right Connectionで報告され、修正されます。 -live_nofix(デフォルト) : LiveCompareは比較中のテーブルに負荷がかかっていると想定するため、LiveCompareはそれらを再チェックして、結果一貫性のためにそれらがなくなったかどうかを確認します。永久的な違いが報告されていますが、修正されていません。 -live_fix:LiveCompareは、比較中のテーブルに負荷がかかっていると想定するため、LiveCompareはそれらを再チェックして、結果一貫性のためになくなったかどうかを確認します。違いは、永続的としてマークされると報告され、修正されます。difference_recheckの設定がdifference_modeにマージされました。difference_mode = offline_nofixにマップされたdifference_recheck = offおよびdifference_mode = live_fixにマップされたdifference_recheck = onの動作。新しいグローバル設定
difference_statementsを追加しました。これは、difference_mode = offline_nofixまたはdifference_mode = live_nofixの場合にLiveCompareによってDMLスクリプトで生成されるか、またはdifference_mode = offline_fixまたはdifference_mode = live_fixの場合に自動的に適用されます。difference_statementsの値は次のとおりです。UPDATE SET col = NULLのようなコマンドを差分レポートまたは自動修正で許可するかどうかを決定する、新しいグローバル設定difference_allow_null_updates(デフォルトはon)を追加しました。新しいグローバル設定
difference_fix_replication_originを追加しました。手動で設定されていない場合、pglogical 3および/またはBDR 3比較のデフォルトでbdr_livecompareに設定されます。 LiveCompareは、右の接続が存在しない場合は特定のレプリケーションオリジンを作成し、difference_mode = live_fixまたはdifference_mode = offline_fixの場合はこのレプリケーションオリジンを使用してすべての自動DML修正を適用します。 LiveCompareが作成するレプリケーション起点は、比較後の検証を許可するために削除されないことに注意してくださいが、必要に応じて、SELECT pg_replication_origin_drop('<value of setting difference_fix_replication_origin>');を使用してレプリケーション起点を削除できます。新しいグローバル設定
difference_fix_start_queryを追加しました。これは、各トランザクションの先頭に実行されて、右側の接続の違いを自動的に修正します。 BDR 3.6.7以降では、difference_fix_start_queryが空の場合、LiveCompareは自動的にdifference_fix_start_query = SET LOCAL bdr.xact_replication = off;を設定します。また、LiveCompareはdifference_fix_start_queryを自動的に設定して、差分修正トランザクションがdifference_fix_replication_originで指定された複製起点を使用するようにします。接続が開かれるたびに任意のクエリを実行するために使用できる新しい接続設定
start_queryを追加しました。コンソール出力に進行状況バーを表示するかどうかを決定する新しいグローバル設定
show_progress_bars(デフォルトはon)を追加しました。バッチ実行に役立ちます。Postgresの比較で、見つかった各違いは行の
ctidも保存するようになりました。 BDR 3またはpglogical 3が使用されている場合、検出された各違いには、行のxminのレプリケーション起点も保存されます。生成されたDMLスクリプトは、常にすべてのDMLを単一のトランザクション内に配置します。
difference_fix_start_queryが(手動または自動で)定義されている場合、トランザクションの先頭に追加されます。実行の最後にグローバル進行状況バーが削除されない問題を修正しました。
出力データベースの存在がチェックされていないバグを修正しました。
0.9(2019-08-30)¶
左または右の接続でのOracleデータベースのサポート。 Oracle Instant ClientとPythonモジュールは個別にインストールする必要がありますが、Postgresデータベースには必要ありません。 LiveCompareは、Oracleに接続していなくても機能します。
現在、行ハッシュとテーブル分割ハッシュはPostgreSQLとPostgreSQLの比較でのみ許可されています。いずれかの接続でPostgreSQL以外のテクノロジーが使用されている場合、新しい設定
full_comparison_modeは自動的にonに設定されます。 PostgresとPostgresでもハッシュの使用を無効にしたい場合は、構成ファイルでfull_comparison_mode = onを明示的に定義できます。BDR 1および2のサポート。
logical_replication_mode = bdrの場合、node_nameで接続を定義し、replication_setsでテーブルをフィルター処理できます。Left ConnectionとRight Connectionの両方の接続がPostgreSQLにある場合、行ハッシュはmd5()である必要があります。 11.それ以外の場合、両方の接続でhashtextextended()を使用します。これにより、混合PostgreSQLバージョンの比較が可能になります(たとえば、9.4と12)。logical_replication_modeを設定すると、PostgreSQLのバージョンと拡張機能の存在の検証がInitial ConnectionおよびLeft Connectionに適用されます。テーブルリストはLeft Connectionから構築されていることに注意してください。ただし、Right Connectionでは、接続のみがチェックされます。これにより、混合テクノロジーの比較(PostgreSQLとOracle、 BDRとPostgreSQL、 BDR 2とBDR 3など)が可能になります。ユーザーが差分再チェックを有効または無効にできる新しい設定
difference_recheck(ブール値、デフォルトはon)。テーブルスキーマの違い(列名と列のデータ型)は、後で分析するためにレポートデータベース(テーブル
tables)に記録されます。左右の接続情報は、後で分析するためにレポートデータベース(テーブル
sessions)に記録されています。テーブルに重複する行があるコーナーケースでの差分チェックのバグを修正しました。
テーブルの右側の接続により多くの行がある場合の差分レポートのバグを修正しました。
一時的な差異がある場合の差異報告のバグを修正しました。
0.8(2019-08-07)¶
テーブルに複数のフィールドを持つPKがある場合の単一行のフェッチを修正しました(一貫性をチェックするため)。
0.7(2019-08-06)¶
行のないテーブルの処理を修正しました。
空のセクションの処理を改善しました。
0.6(2019-06-17)¶
ログコンポーネントを変更しました。
0.5(2019-06-17)¶
バグ修正: - 順序付け演算子なしのデータ型の並べ替えのサポート。 -
hashtextextended()が利用できない場合にmd5()をレコードハッシュとして使用する(PG <= 10)。・ 設定ファイルが存在しない場合、適切なメッセージを表示する。
0.4(2019-06-12)¶
2ndQuadrant CIパイプラインに含めるための準備。
0.3(2019-05-29)¶
接続を指定するDSNのサポート。
改善されたテーブルと行のフィルター。
さまざまな種類の論理レプリケーションのサポート: - ネイティブ論理レプリケーション - pglogical - bdr
BDRのサポート - ユーザーが接続のノード名を指定できるようにします。 - ユーザーがレプリケーションセットをテーブルフィルターとして指定できるようにします。
さまざまなテストシナリオを作成しました。
0.2(2019-05-21)¶
ハッシュの改善:
md5()の代わりにhashtext()とhashtextextended()を使用。フェッチはプリペアド ステートメントを使用して実行されます。
0.1(2019-05-17)¶
PostgreSQLの初期サポート。
スタンドアロンモードの初期実装。