Question

Je suis de transférer des données d'une base à une autre via les liens de base de données (à l'aide de INSERT INTO SELECT ...).

Je veux savoir si les données transférées via le lien est comprimé ou peut être comprimé pour éviter une trop grande utilisation du réseau.J'ai très peu de bande passante, et je pense que ce serait de l'aide si c'est pas déjà fait.

Était-ce utile?

La solution

Il y a quelques de-duplication mais pas grave compression.

Il y a un UTL_COMPRESS fonction, mais il serait difficile à obtenir que pour décompresser à la destination (peut-être un déclencheur, ou plutôt de vue - mais il est maladroit).

EXPDP pouvez utiliser une base de données de liaison (NETWORK_LINK) et, en 11g, la compression mais que ne l'exigent les Avancée de l'option de Compression d'être autorisés.

Enfin, il est classique d'extraire, de zip, de transfert, de décompresser, de la charge

Dans 11gR2 vous pouvez utiliser les tables externes avec un préprocesseur pour décompresser, de sorte que vous pourriez semi-automatiser cette dernière option.

Autres conseils

Comme @Gary dit, non pas en natif, mais il est possible d'obtenir de compression à l'aide d'un tunnel SSH, en supposant que vous avez accès par ligne de commande de toute façon.La page de man de SSH note que la compression peut ralentir les choses sur un réseau rapide, mais que le commerce peut être utile si vous êtes gravement à largeur de bande limitée;et vous pouvez avoir besoin d'expérimenter avec CompressionLevel dans ssh_config pour obtenir les meilleurs résultats pour votre situation.

Par exemple, si votre lien est défini pour se connecter à remote_server port 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)))'

Vous pouvez créer un tunnel SSH utilisant un port local, avec quelque chose comme:

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

Et puis vous pouvez avoir une DB lien qui pointe vers le local à côté du tunnel:

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)))'

Donc, il suffit de changer l'hôte et le port.Si votre lien est à l'aide d'un tnsnames entrée, alors vous pouvez simplement modifier au lieu de cela, du point de localhost:1522 au lieu de remote_server:1521.

Bien sûr, vous devez assurez-vous que la connexion SSH est en place chaque fois que vous utilisez la DB lien.Si c'est vers le bas, vous aurez une ORA-12541: TNS:no listener erreur, car rien de ce qui sera à l'écoute sur le port 1522.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top