Oracle Support

LiveCompareを使用して、 オラクルデータベースのデータを任意の数のPostgreSQLまたはBDRデータベースと比較できます。

例、データ接続でtechnology = oracleを定義できます。他の設定を使用して、 オラクルへの接続を定義できます。

  • host

  • port

  • service

  • user

  • password

他のすべてのデータ接続はPostgreSQLである必要があります。

オラクルデータベースとPostgreSQLデータベースのシンプル比較例を次に示します。

[General Settings]
logical_replication_mode = off
max_parallel_workers = 4
oracle_user_tables_only = on
oracle_ignore_unsortable = on
column_intersection = on
force_collate = C
difference_tie_breakers = oracle

[Oracle Connection]
technology = oracle
host = 127.0.0.1
port = 1521
service = XE
user = LIVE
password = live

[Postgres Connection]
technology = postgresql
dsn = dbname=liveoracle user=william

[Output Connection]
dsn = dbname=liveoutput user=william

[Table Filter]
schemas = schema_name = live

ここで、 オラクルのschema_nameはユーザテーブルサンドボックスです。すべてのテーブル名はデフォルトでスキーマ修飾されています:

Postgres:<schema_name> . <table_name> オラクル:<user> . <table_name

schema_qualified_table_names = offを設定することにより、スキーマで修飾されたテーブル名を無効にすることができます。これは、oracle_user_tables_only = onの場合にのみ実行できます。つまり、LiveCompareは、接続されているオラクルユーザに属するテーブルのみを検索します。スキーマ修飾テーブル名が無効になっている場合、 Postgresでは、ロールまたは設定でデフォルトのsearch_pathを設定する必要があります。または、接続start_queryパラメータを使用して、適切な例を設定できます。

[General Settings]
logical_replication_mode = off
max_parallel_workers = 4
oracle_user_tables_only = on
oracle_ignore_unsortable = on
column_intersection = on
force_collate = C
difference_tie_breakers = oracle
schema_qualified_table_names = off

[Oracle Connection]
technology = oracle
host = 127.0.0.1
port = 1521
service = XE
user = LIVE
password = live

[Postgres Connection]
technology = postgresql
dsn = dbname=liveoracle user=william
start_query = SET search_path = myschema1, myschema2, public

[Output Connection]
dsn = dbname=liveoutput user=william

[Table Filter]
tables = table_name in (mytable1, mytable2)

schema_qualified_table_names = offの場合、Table Filter、Row Filter、およびColumn Filterでも非修飾テーブル名を使用できます。

また、LiveCompareから進行状況とレポート情報を書き込むには、Output Connectionが必要であることにノートしてください。

BDRデータベースをオラクルと比較する必要があり、Initial Connection、node_nameおよびreplication_sets機能(前述)を利用したい場合は、次のようにオラクルへの最後のデータ接続を指定できます。

[General Settings]
logical_replication_mode = bdr
max_parallel_workers = 4
oracle_user_tables_only = on
oracle_ignore_unsortable = on
column_intersection = on
force_collate = C
difference_tie_breakers = oracle

[Initial Connection]
dsn = port=5432 dbname=live user=postgres

[BDR Connection]
node_name = node1

[Oracle Connection]
technology = oracle
host = 127.0.0.1
port = 1521
service = XE
user = LIVE
password = live

[Output Connection]
dsn = port=5432 dbname=liveoutput user=postgres

[Table Filter]
replication_sets = set_name = bdrgroup

例、 BDRクラスター全体を単一のオラクルデータベースと比較することもできます。

[General Settings]
logical_replication_mode = bdr
max_parallel_workers = 4
oracle_user_tables_only = on
oracle_ignore_unsortable = on
column_intersection = on
force_collate = C
difference_tie_breakers = oracle
all_bdr_nodes = on

[Initial Connection]
dsn = port=5432 dbname=live user=postgres

[Oracle Connection]
technology = oracle
host = 127.0.0.1
port = 1521
service = XE
user = LIVE
password = live

[Output Connection]
dsn = port=5432 dbname=liveoutput user=postgres

[Table Filter]
replication_sets = set_name = bdrgroup

要件

LiveCompareは、追加のソフトウェアをインストールする必要なく、すぐに使用できるPostgreSQLデータベースで動作することにノートしてください。

ただし、 オラクルに接続できるオーダーにするには、LiveCompareに追加のソフトウェアが必要です。

オラクル Instant Client

オラクル Instant Clientをダウンロードしてインストールする必要があります(または、使用するオペレーティングシステムに応じて特定のフォルダに抽出します)。

  • MacOSX : オラクル Instant Clientのダウンロード 64-bit ) ~/libで抽出します。

  • Linux : オラクル Instant Clientのダウンロード 32-bit )

    64-bit )

    それをシステムにインストールしてから、LD_LIBRARY_PATHを設定します。

  • Windows : オラクル Instant Clientのダウンロード 32-bit )

    64-bit ) それをLiveCompareフォルダーに抽出します。

cx_Oracle Pythonモジュール

Pythonモジュール cx_Oracle は、LiveCompareがオラクルデータベースに接続できるように、システムにインストールして使用可能にする必要があります。

現在、cx_OracleはLinuxディストリビューションリポジトリからインストールできないため、 the instructions in cx_Oracle website に従ってシステムにインストールしてください。

LiveCompareはpostgresオペレーティングシステムユーザで実行することが推奨されているため、次のコマンドを使用して、postgresユーザに対してのみPIPを介してcx_Oracleモジュールをインストールできます。

pip3 install --user cx_Oracle --upgrade

違い

LiveCompareで違いが見つかった場合、 PostgreSQL接続にのみ適用されるDMLスクリプトが生成されます。 オラクル接続に適用されるDMLスクリプトは生成されません。

BLOBおよびCLOBデータ型

LiveCompareは、 PostgreSQLの同等のフィールドがtext型である場合、 オラクルのCLOBフィールドを比較できます。同じことがオラクルのBLOBフィールドにも当てはまります。PostgreSQLの同等のフィールドはPostgreSQL型でなければなりません。

ただし、デフォルトでは、LiveCompareはBLOB / CLOBフィールドがプライマリキーにある場合、またはテーブルにプライマリキーがない場合、BLOB / CLOBフィールドをハンドルしません。その場合、テーブルは無視され、LiveCompareログに次のようなメッセージが表示されます。

ORA-00932: inconsistent datatypes: expected - got BLOB

テーブルにプライマリキーがない場合、General Settingsセクションで次の2つの設定を有効にすることで、BLOB / CLOBフィールドを無視するようLiveCompareに指示することで、この動作を回避できます。

oracle_ignore_unsortable = on
column_intersection = on

互換性のない照合

オラクルでは、通常、次の初期化パラメーターが設定されています。

NLS_COMP = BINARY
NLS_SORT = BINARY

つまり、NLS_LANGおよびその他の言語設定に関係なく、 オラクルのすべてのORDER BY操作は文字バイナリコードを使用して実行されます。

Postgresでは、同じ動作を示す同等の照合順序はC照合順序です。 Postgresデータベースが別の照合順序で初期化された場合、デフォルトでLiveCompareはPK値を並べ替えときに問題を検出する可能性があり、誤検出につながる可能性があります。

これを回避するには、 Postgresで照合順序(たとえば、C照合順序)を強制することができます。これにより、 オラクルの同じソート動作と一致します。

force_collate = C

LiveCompareは、比較セッションにオラクルとPostgreSQLが関係していることを検出した場合、ユーザが他の値を設定していない限り、LiveCompareはすでにforce_collate = Cを設定します。

共通ハッシュ

デフォルトでは、 PostgreSQLとオラクルを比較する場合でも、LiveCompareにはcomparison_algorithm = block_hashがあります。ただし、これらのルールに従って「共通ハッシュ」が構築されます。

  • すべての列の値を連結することにより、行はテキストとして完全に表されます。 Postgres側では、タイムスタンプ、数値、およびbyteaデータ型が処理されてオラクルを模倣します。

  • この方法では、完全な行表現形式が両側でMD5を使用してハッシュされます。

  • これにより、comparison_algorithmをblock_hashおよびrow_hashに設定して使用できます。

  • block_hashの使用時に不一致がある場合、LiveCompareは自動的に Postedの場合と同様に、 Postgresに、次にfull_rowにフォールバックします。 Postgresの比較。

  • OracleのBLOB、CLOB、NCLOBフィールドは、最初の2000文字に制限されていオラクル のみ(comparison_algorithm = full_rowはBLOBとCLOB全体の比較を許可します); オラクルでは、行全体の表現形式が4000文字を超えてはなりません。

行全体の表現形式が4000文字を超える場合、LiveCompareはその特定のテーブルの比較をアボートし、ログに次のエラーメッセージが表示されます。

ORA-01489: result of string concatenation is too long

それ以降のLiveCompareバージョンは、これらの特定のテーブルのfull_row比較にフォールバックします。今のところ、回避策は、comparison_algorithm = full_rowを使用して、これらのテーブルのみで個別の比較セッションを構成することです。

Common Hashは、 オラクル 12c以降でstandard_hashファンクションを使用します。 オラクル 11gでは、standard_hashファンクションは使用できないため、LiveCompareは代わりにdbms_crypto.hashファンクションを使用しようとしますが、 オラクル側のユーザに追加の権限が必要になる場合が例ます。

GRANT EXECUTE ON sys.dbms_crypto TO testuser;