4

データベースリンクを介して(を使用して)ある拠点から別の拠点にデータを転送していますINSERT INTO SELECT ...

リンクを介して転送されるデータが圧縮されているかどうか、またはネットワークの過度の使用を避けるために圧縮できるかどうかを知りたい. 私は帯域幅がほとんどありません。まだ行われていない場合は、それが役立つと思います。

4

2 に答える 2

3

ある程度の重複除外がありますが、深刻な圧縮はありません。

UTL_COMPRESS 関数がありますが、それを宛先で解凍するのは難しいでしょう (おそらくトリガー、またはビューの代わりですが、扱いにくいです)。

EXPDP はデータベース リンク ( NETWORK_LINK ) を使用でき、11g では圧縮を使用できますが、高度な圧縮オプションのライセンスが必要です。

最後に、従来の抽出、zip、転送、解凍、ロードがあります

11gR2 では、プリプロセッサを備えた外部テーブルを使用して unzipできるため、その最終オプションを半自動化できます。

于 2011-05-21T21:41:24.850 に答える
2

@Garyが言うように、ネイティブではありませんが、とにかくコマンドラインアクセスがあると仮定すると、SSHトンネルを使用して圧縮を取得することは可能です. SSH のマニュアル ページには、高速なネットワークでは圧縮によって速度が低下する可能性があると記載されていますが、帯域幅の制約が厳しい場合は、その代償を払う価値があるかもしれません。状況に応じて最適な結果を得るには、CompressionLevelを試してみる必要がある場合があります。ssh_config

たとえば、既存のリンクがremote_serverportに接続するように定義されている場合1521:

create database link direct connect to usr identified by pwd
using 'DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=remote_server)(PORT=1521))
(CONNECT_DATA=(SERVICE_NAME=remote_service)))'

次のように、空きローカル ポートを使用して SSH トンネルを作成できます。

ssh -C -N -L1522:localhost:1521 remote_server

そして、トンネルのローカル側を指す DB リンクを作成できます。

create database link direct connect to usr identified by pwd
using 'DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1522))
(CONNECT_DATA=(SERVICE_NAME=remote_service)))'

したがって、ホストとポートを変更するだけです。既存のリンクがtnsnamesエントリを使用している場合は、代わりにそれを変更して、localhost:1522代わりにremote_server:1521.

もちろん、DB リンクを使用するときはいつでも SSH リンクがアップしていることを確認する必要があります。ダウンしている場合はORA-12541: TNS:no listener、ローカル ポート 1522 でリッスンしているものがないため、エラーが発生します。

于 2011-05-23T17:42:50.643 に答える