繁体   English   中英

使用 SQL Developer 进行 Oracle 批量插入

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM