Ist die Übertragung per Datenbankverbindung in Oracle 10g komprimiert?Ist es möglich?
-
08-09-2020 - |
Frage
Ich übertrage Daten von einer Basis zu einer anderen über Datenbankverknüpfungen (mit INSERT INTO SELECT ...
).
Ich möchte wissen, ob die über den Link übertragenen Daten komprimiert sind oder komprimiert werden können, um eine zu starke Netzwerknutzung zu vermeiden.Ich habe sehr wenig Bandbreite, und ich denke, das würde helfen, wenn es nicht schon getan ist.
Lösung
Es gibt einige de-duplication , aber keine ernsthafte Kompression.
Es gibt eine UTL_Compress-Funktion, aber es wäre schwierig, das zum Dekomprimieren des Ziels (vielleicht einen Auslöser oder anstelle der Ansicht -, aber es ist klumpig) zu dekomprimieren.
expdp kann einen Datenbanklink verwenden ( network_link ) und in 11g, komprimieren aber das Erfordert das Erweiterte Komprimierungsoption, um lizenziert zu werden . < / p>
Schließlich gibt es herkömmliche Extrakte, Zip, Transfer, Unzip, Last
In 11GR2 können Sie externe Tabellen mit einem Präprozessor zum Entpacken , so dass Sie diese endgültige Option halb automatisieren können.
Andere Tipps
Wie @Gary sagt, nicht nativ, aber es ist möglich, Komprimierung über einen SSH-Tunnel zu erhalten, vorausgesetzt, Sie haben sowieso Befehlszeilenzugriff.Die SSH-Manpage stellt fest, dass die Komprimierung die Dinge in einem schnellen Netzwerk verlangsamen kann, aber dieser Kompromiss kann sich lohnen, wenn die Bandbreite stark eingeschränkt ist;und Sie müssen möglicherweise experimentieren mit CompressionLevel
in ssh_config
um die besten Ergebnisse für Ihre Situation zu erzielen.
Zum Beispiel, wenn Ihr vorhandener Link für die Verbindung definiert ist 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)))'
Sie können einen SSH-Tunnel über einen freien lokalen Port erstellen, mit etwas wie:
ssh -C -N -L1522:localhost:1521 remote_server
Und dann können Sie eine DB-Verbindung haben, die auf die lokale Seite des Tunnels zeigt:
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)))'
Sie ändern also einfach den Host und den Port.Wenn Ihr bestehender Link eine verwendet tnsnames
eintrag dann können Sie das stattdessen einfach ändern, um darauf zu zeigen localhost:1522
statt remote_server:1521
.
Natürlich müssen Sie sicherstellen, dass die SSH-Verbindung aktiv ist, wenn Sie die DB-Verbindung verwenden.Wenn es unten ist, bekommst du eine ORA-12541: TNS:no listener
fehler, da auf Ihrem lokalen Port 1522 nichts überwacht wird.