Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Oracle:wyeksportuj tabelę z blobami do pliku .sql, który można ponownie zaimportować

Nie sądzę, że jest to możliwe w przypadku SQL Developer (ale wtedy nie używam go zbyt często).

Klient SQL, którego używam — SQL Workbench/J — może to zrobić.

Istnieje kilka sposobów na wyeksportowanie tych danych.

Wygeneruj zastrzeżony skrypt

Może utworzyć skrypt SQL, który używa specjalnej (specyficznej dla narzędzia) notacji do odwoływania się do pliku zewnętrznego, na przykład:

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

Powyższą instrukcję można ponownie wykonać tylko w programie SQL Workbench. Nie jest kompatybilny z żadnym innym klientem SQL.

Użyj utl_raw

Inną alternatywą jest użycie „dosłownego kropelka”, ale ze względu na ograniczenie Oracle do 4000 bajtów na literał znakowy, działa to tylko w przypadku naprawdę małe wartości blobów:

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

gdzie literał znakowy dla cast_to_raw wywołanie zawierałoby wartości szesnastkowe obiektu BLOB. Ponieważ wymaga to 2 znaków na "bajt obiektu BLOB", nie można za jego pomocą obsługiwać obiektów BLOB większych niż 2000 bajtów. Ale ta składnia zadziałałaby dla prawie wszystkich narzędzi Oracle SQL (jeśli potrafią obsługiwać skrypty z bardzo długimi liniami).

Plik wejściowy programu ładującego SQL*

Trzecią alternatywą jest wyeksportowanie danych do pliku tekstowego, który można zaimportować za pomocą SQL*Loader:

Plik tekstowy zawierałby coś takiego:

NAME DATAfoobar blob_r1_c2.data

Razem z następującym plikiem kontrolnym SQL*Loader:

OPCJE (skip=1)ZAŁADUJ ZESTAW ZNAKÓW DANYCH 'WE8ISO8859P15'PRZEPISY 'images.txt'DOŁĄCZ DO TABELI IMAGEFIELDS ZAKOŃCZONE PRZEZ '\t' KOŃCOWE LICZBÓW NULL(NAZWA, WYPEŁNIACZ lob_file_data, DATA LOBFILE(lob_file_Dpre )> 

Można go załadować za pomocą SQL*Loader i dlatego nie wymaga SQL Workbench do importowania danych.

Więcej szczegółów znajduje się w instrukcji

Edytuj

Jak zauważył Alex w swoim komentarzu, możesz również użyć eksportu DataPump - ale to wymaga dostępu do systemu plików na serwerze. Wszystkie powyższe rozwiązania przechowują dane na kliencie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Problem z budowaniem cx_Oracle - libclntsh.so.11.1 => nie znaleziono

  2. Tworzenie wykresu zależności tabeli za pomocą zapytania rekurencyjnego

  3. Klient Oracle ORA-12541:TNS:no listener

  4. ORDER BY z zapytaniem wewnętrznym, z brakiem prawego nawiasu ORA-00907

  5. Dlaczego SQL*Plus zatwierdza przy wyjściu?