Как уже пояснялось в некоторых комментариях, COPY - это команда sqlplus, и она уже давно устарела. Вы не можете использовать ее внутри JAVA, потому что эта команда не является частью механизма SQL, это просто дополнительная функция, доступная только в sqlplus. Он по-прежнему доступен, но только для обратной совместимости.
Если вы хотите скопировать таблицу с помощью Java, вам нужно сначала понять некоторые вещи:
- Java или любой внешний движок, если на то пошло, не могут одновременно подключаться к обеим базам данных. Либо он подключается к одному, либо к другому.
- Вам необходимо установить своего рода мост между обеими базами данных, чтобы ваша программа на Java действовала только как триггер.
- Копирование таблиц между базами данных связано с базой данных, поэтому вам следует подумать об использовании инструментов, предоставляемых ядром вашей базы данных. У вас есть несколько вариантов, например Datapump или RMAN, хотя я считаю, что Datapump лучше всего подходит для вашего сценария.
Однако, если вы настаиваете на использовании Java, сначала вам необходимо установить связь с базой данных между обеими базами данных. Затем вы можете использовать Java для вызова вставки из одной базы данных в другую.
https://docs.oracle.com/database/121/SQLRF/statements_5006.htm#SQLRF01205
Если вы не хотите зависеть от записей thsnames на сервере, вот пример ссылок на базу данных:
CREATE DATABASE LINK to_my_remote_user
CONNECT TO remote_user IDENTIFIED BY password
USING '(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=remote_server)(PORT=remote_port))
(CONNECT_DATA=(SERVICE_NAME=remote_service_name))
)';
После того, как вы создали dblink, вы можете подключиться из java к базе данных, где доступна ссылка, и скопировать данные в удаленную базу данных.
INSERT INTO remote_user.remote_table@to_my_remote_user
select * from local_user.local_table ;
Важно: обычно dblinks не разрешены в производственных системах, поскольку они повышают риски безопасности. Также помните, что операции DDL по ссылке на базу данных требуют дополнительного шага, например использования процедуры DBMS_UTILITY.EXEC_DDL_STATEMENT@dblink('create table ...);
Другой вариант за пределами Java - использовать функцию копирования SQL Developer. Хотя рекомендую только для маленьких столиков. Если вы хотите использовать его с большими таблицами, он, вероятно, зависнет. Вы можете прочитать здесь хороший пример:
копировать из одной базы данных в другую с помощью Oracle sql developer - сбой подключения
person
Roberto Hernandez
schedule
19.07.2020
COPY
< / a>, он устарел примерно с 2001 года и не поддерживает никаких новых функций, добавленных с 1998 года. Чтобы использовать его, нужно как-то вызвать SQL * Plus - он не является частью Oracle SQL. - person William Robertson   schedule 18.07.2020expdp
илиexp
) для создания резервной копии таблицы, а затем восстановления из резервной копии на другой машине? - person MT0   schedule 19.07.2020