我正在尝试将行从一个 Oracle 表复制到另一个。由于我习惯了微软的 BI 工具,因此我尝试为此创建一个SSIS
项目,但这是一场艰苦的战斗。
我们还有 Toad Data Point,这是我用来查询 Oracle 数据库的工具。
由于源表和目标表之间的唯一区别是表名,是否可以创建一个每天运行的作业,将数据从一个 Oracle 表复制到另一个?
我忘了提到这些表不在同一个数据库中。
我正在尝试将行从一个 Oracle 表复制到另一个。由于我习惯了微软的 BI 工具,因此我尝试为此创建一个SSIS
项目,但这是一场艰苦的战斗。
我们还有 Toad Data Point,这是我用来查询 Oracle 数据库的工具。
由于源表和目标表之间的唯一区别是表名,是否可以创建一个每天运行的作业,将数据从一个 Oracle 表复制到另一个?
我忘了提到这些表不在同一个数据库中。
有许多方法可以将数据从一个 Oracle 数据库复制到另一个 - 数据库链接、DataPump、exp/imp(通常不支持,但仍然有效)、CSV 导出的 SQL*Loader 加载等。
下面的示例创建了一个日常作业,该作业通过数据库链接将源数据库中的数据拉入目标。
-- 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
视图来监视作业的执行。