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

Файлы можно копировать непосредственно между базами данных через сеть Oracle Net, не используя команд операционной системы или утилит вроде FTP. С помощью пакета DBMS_FILE_TRANSFER выполняется копирование двоичных файлов в пределах одного сервера или передача их между серверами. Процедура COPY_FILE служит для копирования файлов в пределах локальной системы, процедура GET_FILE — для копирования файлов с удаленного сервера на локальный и процедура PUT_FILE — для чтения и копирования локального файла на удаленную файловую систему. Далее приводится краткое описание ключевых процедур нового пакета.

COPY_FILE

Процедура COPY_FILE позволяет копировать двоичные файлы из одного места в другое на одном и том же или на разных серверах. Прежде чем вы можно будет копировать эти файлы, необходимо создать объекты исходного и целевого каталога, как показано ниже:

SQL> CREATE OR REPLACE DIRECTORY source_dir as '/u01/app/oracle/source';
SQL> CREATE OR REPLACE DIRECTORY dest_dir as '/u01/app/oracle/dest'; 

После создания исходного и целевого каталогов можно применять процедуру COPY_FILE для копирования файлов:

SQL> BEGIN
DBMS_FILE_TRANSFER.COPY_FILE(
source_directory_object => 'SOURCE_DIR',
source_file_name => 'test01.dbf',
destination_directory_object => 'DEST_DIR',
destination_file_name => 'test01_copy.dbf');
END;
/
SQL> 

GET_FILE

Процедура GET_FILE используется для копирования двоичных файлов с удаленного сервера на локальный. Для начала подключитесь к удаленному серверу и создайте объект исходного каталога, как показано ниже:

SQL> CONNECT system/system_passwd@remote_db
Connected.
SQL> CREATE OR REPLACE DIRECTORY source_dir as '/u01/app/oracle/source'; 

Затем зайдите на локальный сервер и создайте объект целевого каталога:

SQL> CONNECT system/system_passwd@local_db
Connected.
SQL> CREATE OR REPLACE DIRECTORY dest_dir as /'u01/app/oracle/dest'; 

Создав исходный и целевой каталоги, удостоверьтесь в наличии связи между двумя базами данных и создайте ее в случае отсутствия:

SQL> CREATE DATABASE LINK prod1
CONNECT TO system IDENTIFIED BY system_passwd
USING 'prod1';
SQL> 

Прежде чем создавать связь между базами данных,нужно убедиться, что соединение с базой данных prod1 установлено, например, с использованием файла tnsnames.ora.Теперь можно выполнить процедуру GET_FILE для передачи файла с удаленного сервера на локальный, как показано ниже:

SQL> BEGIN
DBMS_FILE_TRANSFER.GET_FILE(
source_directory_object => 'SOURCE_DIR',
source_file_name => 'test01.dbf',
source_database => 'remote_db',
destination_directory_object => 'DEST_DIR',
destination_file_name => 'test01.dbf');
END;
/
SQL> 

Обратите внимание, что в атрибуте SOURCE_DATABASE указывается имя связи с удаленной базой данных.

PUT_FILE

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

SQL> CONNECT system/system_passwd@remote_db
Connected.
SQL> CREATE OR REPLACE DIRECTORY source_dir as '/u01/app/oracle/source';
SQL> connect system/system_passwd@local_db
Connected.
SQL> CREATE OR REPLACE DIRECTORY dest_dir as /'u01/app/oracle/dest'; 

После этого можно использовать процедуру PUT_FILE для помещения локального файла на удаленный сервер:

SQL> BEGIN
DBMS_FILE_TRANSFER.PUT_FILE(
source_directory_object => 'SOURCE_DIR',
source_file_name => 'test01.dbf',
destination_directory_object => 'DEST_DIR',
destination_file_name => 'test01.dbf',
destination_database => 'remote_db');
END;
/
SQL> 

 

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

Создание базы данных Oracle
Создание базы данных Oracle 18906 просмотров Александров Попков Wed, 14 Nov 2018, 12:44:39
Копирование таблиц с помощью к...
Копирование таблиц с помощью к... 6130 просмотров Antoniy Tue, 21 Nov 2017, 13:18:46
Хронология активных сеансов в ...
Хронология активных сеансов в ... 1847 просмотров Antoniy Tue, 21 Nov 2017, 13:18:46
THREADED_EXECUTION в Oracle 12...
THREADED_EXECUTION в Oracle 12... 2054 просмотров Андрей Васенин Thu, 01 Nov 2018, 12:58:50
Войдите чтобы комментировать