Toad:自动在两个 Oracle 表之间进行每日传输?

Posted

技术标签:

【中文标题】Toad:自动在两个 Oracle 表之间进行每日传输?【英文标题】:Toad: Automate daily transfer between two Oracle tables? 【发布时间】:2019-06-17 19:14:14 【问题描述】:

我正在尝试将行从一个 Oracle 表复制到另一个。由于我习惯了微软的 BI 工具,因此我尝试为此创建一个SSIS 项目,但这是一场艰苦的战斗。

我们还有 Toad Data Point,这是我用来查询 Oracle 数据库的工具。

由于源表和目标表之间的唯一区别是表名,是否可以创建一个每天运行的作业,将数据从一个 Oracle 表复制到另一个?

我忘了说这些表不在同一个数据库中。

【问题讨论】:

这两个表在同一个数据库吗?如果是这样,那么它就是一个相当简单的 DBMS_SCHEDULER 作业...一个可以安排每天运行的 INSERT AS SELECT...如果不是同一个数据库,那么 DB_LINK 的数据量和可用性将发挥作用 抱歉耽搁了。他们不在同一个数据库中 【参考方案1】:

有多种方法可以将数据从一个 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 视图来监控作业的执行情况。

【讨论】:

以上是关于Toad:自动在两个 Oracle 表之间进行每日传输?的主要内容,如果未能解决你的问题,请参考以下文章

Oracle Toad SQL 查询导致 id 计数不一致

TOAD for Oracle - 自动完成

Toad 和 Oracle 中 PROCEDURE 和 CREATE OR REPLACE PROCEDURE 之间的区别

toad for oracle 更改表 ddl 导出

无法运行两个单独的选择语句 Oracle / Toad ORA-00933

用Toad for Oracle创建数据库表空间和用户