4

最近、私はTungsten Replicatorを使用して異種データベース間のレプリケーションに取り組んでいます。mysql マスターと oracle スレーブがあります。ドキュメントによると、そのようなセットアップは機能するはずです。私はタングステン レプリケーター 2.0.5 を使用しています。電話する

$TUNGSTEN_HOME/tools/configure \
    --verbose \
    --home-directory=$INSTALL_HOME \
    --cluster-hosts=$MA_HOST,$SL_HOST \

マスター ノードで、両方のノードで基本的なインストールを作成します。注: インストーラーの使用 (推奨) は、異機種セットアップが原因で失敗します。これは、インストーラーがスレーブ ノードで mysql インスタンスを見つけられないためです。レプリケータ インスタンスは、static-$SERVICENAME.properties を conf ディレクトリに追加し、conf/services.properties (replicator.host=$HOSTNAME、replicator.masterListenPortStart=12112、replicator.rmi_port=20000) を変更することによって構成されます。

レプリケータを起動すると、タングステン スキーマの trep_commit_seqno に対して更新ステートメントを発行すると、SQL ステートメントに「timestamp」キーワードがないため、ORA-01850 が発生しました。このエラーを回避するために、update_timestamp と extract_timestamp のデータ型を varchar に変更しました。レプリケータが起動し、いくつかの単純な挿入がレプリケートされますが、テスト スクリプトが

DROP TABLE IF EXISTS table1;

「IF EXISTS」句が原因で、ORA-00933 が原因でレプリケーションが失敗します。これが私の構成のエラーなのか、それとも一般にタングステンにこれら 2 つの製品の DDL ステートメントの違いによる問題があるのか​​はわかりません。誰かがタングステンを使用して同様のレプリケーションを成功させましたか?

4

2 に答える 2

2

Tungsten のドキュメントには、役立つガイダンスがいくつかあります。特に、「Advanced Principles of Operation」のこの点は関連しています。「また、最も単純な CREATE TABLE 式を超える DDL ステートメントはほとんど移植できません。」. あなたの場合、DROP TABLE IF EXISTS table1;有効なOracle DDLではありません。

ここでそれを読んでください

于 2011-11-14T11:16:08.273 に答える
2

興味のある方へ: これまでのところ、Tungsten は異種環境で ddl ステートメントの変換を実行しません (MithunSasidharan が書いたように)。ここで、正規表現を使用して ddl ステートメントをスキップするカスタム フィルターを作成しました。スキーマ定義を同期するために、Apache DdlUtilsを使用します。これは、mysql と oracle の間でスキーマ定義を変換するのに非常に役立ちます。他のベンダーでも同様に機能すると思います。ありがとう。

于 2011-11-15T16:55:00.523 に答える