sql >> Databasteknik >  >> RDS >> Oracle

Oracle:exportera en tabell med blobs till en .sql-fil som kan importeras igen

Jag tror inte att detta är möjligt med SQL Developer (men då använder jag det inte så ofta).

SQL-klienten jag använder - SQL Workbench/J - kan göra detta.

Det finns flera sätt att exportera denna data.

Generera ett proprietärt skript

Det kan skapa ett SQL-skript som använder en speciell (verktygsspecifik) notation för att referera till en extern fil, något som:

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

Ovanstående sats kan endast köras med SQL Workbench igen. Den är inte kompatibel med någon annan SQL-klient.

Använd utl_raw

Ett annat alternativ är att använda en "blob literal", men på grund av Oracles gräns på 4000 byte för en teckenliteral, fungerar detta bara för egentligen små blobvärden:

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

där tecknet är bokstavligt för cast_to_raw anropet skulle innehålla hex-värdena för BLOB. Eftersom detta kräver 2 tecken per "blob byte", kan du inte hantera BLOBs större än 2000 byte med det. Men den syntaxen skulle fungera för nästan alla Oracle SQL-verktyg (om de kan hantera skript med mycket långa rader).

SQL*Loader-indatafil

Det tredje alternativet är att exportera data till en textfil som kan importeras med SQL*Loader:

Textfilen skulle innehålla något sånt här:

NAME DATAfoobar blob_r1_c2.data

Tillsammans med följande SQL*Loader-kontrollfil:

ALTERNATIV (hoppa över=1)LADDA DATATECKENSTÄLLNING 'WE8ISO8859P15'INFILE 'images.txt'BILAGA TILL TABELLBILDFÄLT AVSLUTADE AV '\t' TRAILING NULLCOLS( NAME, lob_file_data FILLER, Elob_file_data FILLER, Elob_file_of_data) elob_file_of_data()> 

Detta kan laddas med SQL*Loader och behöver därför inte SQL Workbench för att importera data.

Mer information finns i manualen

Redigera

Som Alex har påpekat i sin kommentar kan du även använda en DataPump-export – men det kräver att du har tillgång till filsystemet på servern. Ovanstående lösningar lagrar alla data på klienten.



  1. Kan inte få igång Postgres

  2. Kör Vitess och MySQL med ClusterControl

  3. Varför cast/konvertera från int returnerar en asterisk

  4. Hur avkodar man PostgreSQL bytea kolumn hex till int16/uint16 i r?