Domanda

Sto trasferendo i dati da una base all'altra tramite collegamenti di database (utilizzando INSERT INTO SELECT ...).

Voglio sapere se i dati trasferiti attraverso il collegamento sono compressi o possono essere compressi per evitare troppi utilizzo di rete.Ho una piccola larghezza di banda, e penso che avrebbe aiutato se non è già stato fatto.

È stato utile?

Soluzione

Ci sono alcuni de-duplicazione ma nessuna compressione seria.

C'è una funzione utl_compress ma sarebbe difficile ottenere quello per decomprimere sulla destinazione (forse un trigger, o al posto di vista - ma è goffo).

expdp può utilizzare un link del database ( network_link ) e, in 11g, compressione ma questo Richiede il Opzione di compressione avanzata da concedere in licenza . < / P >.

Infine, c'è estrarre convenzionale, zip, trasferimento, decompressione, caricamento

In 11GR2 è possibile utilizzare tabelle esterne con A Preprocessore per decomprimere , quindi è possibile che semi-automatizza quell'opzione finale.

Altri suggerimenti

Come dice @ @Gary, non in modo nativo, ma è possibile ottenere la compressione utilizzando un tunnel ssh, supponendo di avere comunque l'accesso alla riga di comando. La pagina dell'uomo SSH nota che la compressione può rallentare le cose su una rete veloce, ma quel compromesso potrebbe valare la pena se sei fortemente vincolato dalla larghezza di banda; E potrebbe essere necessario sperimentare CompressionLevel in ssh_config per ottenere i migliori risultati per la tua situazione.

Ad esempio, se il collegamento esistente è definito per connettersi alla porta remote_server 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)))'
.

È possibile creare un tunnel ssh utilizzando una porta locale gratuita, con qualcosa come:

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

E poi puoi avere un link db che punta al lato locale del 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)))'
.

Così basta cambiare l'host e la porta. Se il tuo collegamento esistente utilizza una voce tnsnames, puoi semplicemente modificarlo che invece, puntare a localhost:1522 anziché remote_server:1521.

Naturalmente è necessario assicurarsi che il collegamento SSH sia aggiornato ogni volta che si utilizza il link DB. Se è giù otterrai un errore ORA-12541: TNS:no listener, poiché nulla ascolterà la porta locale 1522.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top