Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle:Exportieren Sie eine Tabelle mit Blobs in eine .sql-Datei, die erneut importiert werden kann

Ich glaube nicht, dass dies mit SQL Developer möglich ist (aber dann verwende ich es nicht sehr oft).

Der von mir verwendete SQL-Client - SQL Workbench/J - kann dies tun.

Es gibt mehrere Möglichkeiten, diese Daten zu exportieren.

Generieren Sie ein proprietäres Skript

Es kann ein SQL-Skript erstellen, das eine spezielle (werkzeugspezifische) Notation verwendet, um auf eine externe Datei zu verweisen, etwa so:

INSERT INTO images
  (name, data)
VALUES
  ('foobar', {$blobfile='blob_r1_c2.data'});

Die obige Anweisung kann nur mit SQL Workbench erneut ausgeführt werden. Es ist mit keinem anderen SQL-Client kompatibel.

Verwenden Sie utl_raw

Eine andere Alternative ist die Verwendung eines "Blob-Literals", aber aufgrund der Begrenzung von Oracle auf 4000 Bytes für ein Zeichenliteral funktioniert dies nur für wirklich kleine Blob-Werte:

INSERT INTO images
  (name, data)
VALUES
  ('foobar', to_blob(utl_raw.cast_to_raw('......')));

wobei das Zeichenliteral für cast_to_raw ist Aufruf würde die Hex-Werte des BLOB enthalten. Da dies 2 Zeichen pro "Blob-Byte" erfordert, können Sie damit keine BLOBs größer als 2000 Bytes verarbeiten. Aber diese Syntax würde für fast alle Oracle SQL-Tools funktionieren (wenn sie mit Skripten mit sehr langen Zeilen umgehen können).

SQL*Loader-Eingabedatei

Die dritte Alternative besteht darin, die Daten in eine Textdatei zu exportieren, die mit SQL*Loader importiert werden kann:

Die Textdatei würde etwa Folgendes enthalten:

NAME    DATA
foobar  blob_r1_c2.data

Zusammen mit der folgenden SQL*Loader-Steuerdatei:

OPTIONS (skip=1)
LOAD DATA CHARACTERSET 'WE8ISO8859P15'
INFILE 'images.txt'
APPEND
INTO TABLE IMAGES
FIELDS TERMINATED BY '\t' TRAILING NULLCOLS
(
  NAME,
  lob_file_data FILLER,
  DATA LOBFILE(lob_file_data) TERMINATED BY EOF
)

Diese kann mit SQL*Loader geladen werden und benötigt somit keine SQL Workbench zum Importieren der Daten.

Weitere Einzelheiten finden Sie im Handbuch

Bearbeiten

Wie Alex in seinem Kommentar betont hat, können Sie auch einen DataPump-Export verwenden - aber das erfordert, dass Sie Zugriff auf das Dateisystem auf dem Server haben. Die oben genannten Lösungen speichern alle die Daten auf dem Client.