Както някои от коментарите вече изясниха, COPY е команда на sqlplus и е отхвърлена за известно време. Не можете да я използвате в JAVA, защото тази команда не е част от SQL двигателя, тя е просто вид допълнителна функция, достъпна само в sqlplus. Все още е наличен, но само за обратна съвместимост.
Ако искате да копирате таблица с помощта на Java, първо трябва да разберете някои неща:
- Java или който и да е външен двигател за този въпрос не може да се свърже едновременно с двете бази данни. Или се свързва с едното, или с другото.
- Трябва да имате нещо като мост между двете бази данни, така че вашата Java програма да действа само като тригер.
- Копирането на таблици между базите данни е нещо, свързано с базата данни, така че трябва да помислите за използването на инструменти, предоставени от двигателя на вашата база данни. Имате някои опции, като Datapump или RMAN, въпреки че считам Datapump за най-подходящия за вашия сценарий.
Ако обаче настоявате да използвате Java, първо трябва да имате връзка между двете бази данни. След това можете да използвате Java, за да извикате вмъкване от една база данни в друга.
https://docs.oracle.com/database/121/SQLRF/statements_5006.htm#SQLRF01205
Ако не искате да зависи от thnames записи в сървъра, ето пример за връзки към бази данни:
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 разработчик - свързването е неуспешно
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