【发布时间】:2018-11-22 20:56:06
【问题描述】:
我有两个数据库,分别称为 LOCAL 和 REMOTE。我了解并已确认从 LOCAL 运行以下命令不会导致直接路径插入:
INSERT /*+ APPEND */ INTO REMOTE_TABLE@REMOTEDB
SELECT * FROM LOCAL_TABLE;
但从 REMOTE 运行以下命令会导致直接路径插入:
INSERT /*+ APPEND */ INTO REMOTE_TABLE
SELECT * FROM LOCAL_TABLE@LOCALDB;
我的问题是我需要从我的本地数据库运行该进程。所以我在远程数据库上创建了一个过程如下:
CREATE OR REPLACE PROCEDURE MY_LOAD AS
BEGIN
INSERT /*+ APPEND */ INTO REMOTE_TABLE
SELECT * FROM LOCAL_TABLE@LOCALDB;
END;
我从 LOCAL 数据库运行程序:
BEGIN
MY_LOAD@REMOTEDB;
END;
但它不做直接路径插入。
任何人都可以确认是的,这不会进行直接路径插入吗?任何人都可以提供另一种方法来进行直接路径插入吗?
全局要求是将所有行或部分行从 LOCAL 数据库中的分区复制到 REMOTE 数据库中的分区。目标表处于 LOGGING 模式,因此计划是将 INSERT 直接加载到 REMOTE 数据库上的 NOLOGGING 暂存表中,然后将该表与目标分区交换。
【问题讨论】:
-
你所说的直接加载是什么意思,你写来调用过程的查询本身就是直接加载,除了它在内部处理从(从表中选择*)到作为追加操作插入的事实。跨度>
-
@HimanshuAhuja,直接加载我的意思是:docs.oracle.com/cd/A58617_01/server.804/a58227/ch_dlins.htm 当它不执行直接加载时,它会执行“常规加载”。
-
实际上,您可以将视图创建为 (select * from table ) 以在先前的情况下直接加载 insert 是追加模式加载。只有从选择中创建才能作为直接加载
-
我不明白你在这篇文章中有这么多,为什么不首先从这篇文章中了解并行插入加载在你的情况下可能很方便,因为你想要直接加载,你也可以尝试 nologging删除日志
标签: sql oracle insert append dblink