Копирование файлов на сервере базы данных Oracle

Илья Дергунов

Илья Дергунов

Автор статьи. ИТ-специалист с 20 летним стажем, автор большого количества публикаций на профильную тематику (разработка ПО, администрирование, новостные заметки). Подробнее.

Копирование файлов на сервере OracleКопировать двоичные файлы можно с использованием сервера баз данных, полностью минуя операционную систему. Пакет DBMS_FILE_TRANSFER позволяет копировать двоичные файлы на одном и том же сервере или передавать их между разными базами данных Oracle.

 

Требования к копированию файлов

Существуют некоторые условия, которые должны быть удовлетворены при использовании пакета DBMS_FILE_TRANSFER для копирования файлов.

  • Исходные файл должны быть того же типа, что и целевые файлы. То есть файлы в двух системах должны быть либо файлами операционной системы, либо файлами ASM.
  • Файлы не могут быть размером больше 2 Тбайт, и размер каждого должен быть кратен 512 байт.
  • Нельзя выполнять преобразование наборов символов при копировании файлов.
  • Потребуется выдать явные привилегии всем непривилегированным пользователям базы данных, прежде чем они смогут использовать файлы, переданные пакетом DBMS_FILE_TRANSFER.

 

Копирование файлов в локальной системе

Копирование файлов между каталогами одного и того же сервера выполняется с помощью процедуры COPY_FILE из пакета DBMS_FILE_TRANSFER. Предположим, что необходимо скопировать файл по имени example.txt из каталога /u01/app/oracle в каталог /u01/app/Oracle/dba. Для этого потребуется выполнить следующие шаги.

  1. Создайте объект исходного каталога, указывающий на исходный каталог (source_dir):
    SQL> CREATE DIRECTORY source_dir AS '/u01/app/oracle';
    Directory created. 
    
  2. Создайте объект целевого каталога, указывающий на целевой каталог (dest_dir):
    SQL> CREATE DIRECTORY dest_dir AS '/u01/app/oracle/test';
    Directory created.
    SQL> 
    
  3. Воспользуйтесь процедурой COPY_FILE для копирования файла example.txt (DESTINATION_FILE_NAME) из исходного каталога в целевой (при желании, изменив его имя в процессе копирования):
    SQL> BEGIN
    DBMS_FILE_TRANSFER.COPY_FILE(
    SOURCE_DIRECTORY_OBJECT => 'source_dir',
    SOURCE_FILE_NAME => 'example.txt',
    DESTINATION_DIRECTORY_OBJECT => 'dest_dir',
    DESTINATION_FILE_NAME => 'example.txt');
    END;
    SQL> /
    PL/SQL procedure successfully completed.
    SQL>
    

Если теперь заглянуть в целевой каталог (/u01/app/oracle/test), там будет находиться копия исходного файла из исходного каталога (/u01/app/oracle).


Совет. Чтобы выполнить процедуру DBMS_FILE_TRANSFER.COPY_FILE, необходимо иметь привилегию READ в исходном каталоге и привилегию WRITE — в целевом.


Как скопировать файлы базы данных Oracle к себе или в другую базу

Новый мастер OEM Database Control Load Data Wizard автоматизирует процесс создания управляющих файлов SQL*Loader. Вы специфицируете файлы данных и предоставляете информацию о их структуре, в Load Data Wizard использует ее для автоматической генерации контрольного файла SQL*Loader, а также создания задания SQL*Loader для загрузки файла данных в базу.

 

Передача файла в другую базу

Пакет DBMS_FILE_TRANSFER позволяет пересылать копии файлов с сервера на удаленный сервер посредством процедуры PUT_FILE. Вы выполняете те же шаги, что описаны в предыдущем разделе, но используете дополнительный параметр DESTINATION_DATABASE, чтобы указать удаленный сервер: 

SQL> BEGIN
DBMS_FILE_TRANSFER.PUT_FILE(
SOURCE_DIRECTORY_OBJECT => 'source_dir',
SOURCE_FILE_NAME => 'example.txt',
DESTINATION_DIRECTORY_OBJECT => 'dest_dir',
DESTINATION_FILE_NAME => 'e.txt',
DESTINATION_DATABASE => 'finance');
END;
SQL> /
PL/SQL procedure successfully completed.
SQL>

Совет. Прежде чем использовать процедуру PUT_FILE для пересылки файлов на удаленный сервер, следует удостовериться в существовании в локальной базе связи удаленной базы данных.


Процедура PUT_FILE сначала читает указанный файл на локальном сервере, а затем создает копию этого файла на удаленном сервере, который указывается в параметре DESTINATION_DATABASE. Таким образом, исходный каталог находится на локальном сервере, а удаленный каталог — на удаленном сервере.

Процедура GET_FILE является аналогом процедуры PUT_FILE и позволяет копировать файлы с удаленного сервера на локальный сервер. В этой процедуре целевой каталог и целевой файл находятся на локальном сервере, а исходный файл и каталог — на удаленном сервере. Вот структура GET_FILE:

 

DBMS_FILE_TRANSFER.GET_FILE(
SOURCE_DIRECTORY_OBJECT         IN VARCHAR2,
SOURCE_FILE_NAME                IN VARCHAR2,
SOURCE_DATABASE                 IN VARCHAR2,
DESTINATION_DIRECTORY_OBJECT    IN VARCHAR2,
DESTINATION_FILE_NAME           IN VARCHAR2);

 

Вас заинтересует / Intresting for you:

Базы данных Oracle: что нужно ...
Базы данных Oracle: что нужно ... 64943 просмотров Ирина Светлова Thu, 24 Jun 2021, 20:01:45
Oracle изменения изменений!
Oracle изменения изменений! 3112 просмотров Stas Belkov Tue, 21 Nov 2017, 13:18:46
Oracle Personal Edition
Oracle Personal Edition 5969 просмотров Надин Tue, 21 Nov 2017, 13:32:12
Разница между базой данных и э...
Разница между базой данных и э... 3264 просмотров Александров Попков Tue, 21 Nov 2017, 13:18:46
Войдите чтобы комментировать