[英]Oracle SQL Developer combine using "WITH AS", "INSERT INTO", SELECT"
[英]Oracle Bulk Insert Using SQL Developer
我最近从 Oracle 数据库中获取了数据转储。 其中许多都很大(~5GB)。 我正在尝试通过在 SQL Developer 中执行以下 SQL 将转储的数据插入到另一个 Oracle 数据库中
@C:\path\to\table_dump1.sql;
@C:\path\to\table_dump2.sql;
@C:\path\to\table_dump3.sql;
:
但是完成一个 SQL 文件也需要很长时间,比如一天多。
有没有更好的方法可以更快地完成这项工作?
SQL*Loader 是我最喜欢的将大量数据批量加载到 Oracle 的方法。 使用直接路径插入选项以获得最大速度,但了解直接路径加载的影响(例如,所有数据都插入超过高水位线,如果您截断表,这很好)。 它甚至可以容忍坏行,因此如果您的数据有“一些”错误,它仍然可以工作。
SQL*Loader 可以挂起索引并在最后构建它们,这使得批量插入非常快。
SQL*Loader 调用示例:
$SQLDIR/sqlldr /@MyDatabase direct=false silent=feedback \
control=mydata.ctl log=/apps/logs/mydata.log bad=/apps/logs/mydata.bad \
rows=200000
mydata.ctl 看起来像这样:
LOAD DATA
INFILE '/apps/load_files/mytable.dat'
INTO TABLE my_schema.my_able
FIELDS TERMINATED BY "|"
(ORDER_ID,
ORDER_DATE,
PART_NUMBER,
QUANTITY)
或者...如果您只是将一个表的全部内容跨数据库复制到另一个表,那么您可以这样做,前提是您的 DBA 设置了 DBlink(一个 30 秒的过程),前提是您的数据库设置了重做空间以做到这一点。
truncate table my_schema.my_table;
insert into my_schema.my_table
select * from my_schema.my_table@my_remote_db;
使用/* +append */
提示仍然可以利用直接路径插入。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.