Жаба: автоматизировать ежедневный перевод между двумя таблицами Oracle? - PullRequest
1 голос
/ 17 июня 2019

Я пытаюсь скопировать строки из одной таблицы Oracle в другую. Поскольку я привык к инструментам Microsoft BI, я попытался создать для этого проект SSIS, но это была тяжелая битва.

У нас также есть Toad Data Point, который я использую для запросов к базам данных Oracle.

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

Я забыл упомянуть, что таблицы не находятся в одной базе данных.

1 Ответ

1 голос
/ 18 июня 2019

Существует несколько способов скопировать данные из одной базы данных Oracle в другую - ссылки на базы данных, DataPump, exp / imp (обычно не поддерживается, но все еще работает), SQL * Загрузка загрузчика экспорта CSV и т. Д.

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

-- Source database: srcdb
-- Source user    : srcuser
-- Source table   : srctbl (owned by srcuser)

-- Destination database: destdb
-- Destination user    : destuser
-- Destination table   : desttbl (owned by destuser)

-- On destdb: grant destuser privilege to create database link and job
-- (Execute as SYS, or ask your DBA to do this)
SQL> GRANT CREATE DATABASE LINK TO destuser;

Grant succeeded.

SQL> GRANT CREATE JOB to destuser;

Grant succeeded.

-- On destdb, login as destuser and create database link that points to srcdb.
-- Link connects to srcdb as srcuser.  Substitute your HOST, PORT, and SERVICE_NAME
SQL> CREATE DATABASE LINK srcdb CONNECT TO srcuser IDENTIFIED BY srcuserpass USING '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=srcdb)))';

Database link created.

-- On destdb: Log in as destuser and create daily job to
-- copy all rows from the source to the destination
SQL> EXECUTE DBMS_SCHEDULER.CREATE_JOB (
   job_name             => 'destuser.copyjob',
   job_type             => 'PLSQL_BLOCK',
   job_action           => 'BEGIN INSERT INTO desttbl SELECT * FROM srctbl@srcdb; END;',
   start_date           => TO_DATE('06/17/2019 05:45 PM', 'MM/DD/YYYY HH:MI PM'),
   repeat_interval      => 'FREQ=DAILY',
   end_date             => NULL,
   enabled              =>  TRUE,
   comments             => 'Daily copy of data to dest from source');
END;

PL/SQL procedure successfully completed.

Для просмотра выполнения задания можно использовать представление USER_SCHEDULER_JOBS.

...