使用SQL Developer进行Oracle批量插入

时间:2016-10-06 02:03:37

标签: sql oracle oracle-sqldeveloper

我最近从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文件 有没有更好的方法来更快地完成这项工作?

1 个答案:

答案 0 :(得分:1)

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 */提示仍然​​可以使用直接路径插入。