我最近从Oracle数据库中获取了数据转储。其中许多文件都很大(约5 5GB)。我正在尝试通过在SQL Developer中执行以下SQL将转储的数据插入到另一个Oracle数据库中
@C:\path\to\table_dump1.sql;
@C:\path\to\table_dump2.sql;
@C:\path\to\table_dump3.sql;
:但是完成一个SQL文件也需要很长的时间,比如一天以上。
有没有更好的方法来更快地完成这项工作?
发布于 2016-10-06 10:09:06
SQL*Loader是我最喜欢的将大量数据加载到Oracle中的方法。使用direct path insert选项以获得最大速度,但要了解直接路径加载的影响(例如,所有数据都会插入超过高水位线,如果您截断您的表,这是很好的)。它甚至可以容忍不好的行,所以如果你的数据有“一些”错误,它仍然可以工作。
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=200000mydata.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)或者..。如果您只是跨数据库将一个表的全部内容复制到另一个表,那么您可以这样做,前提是您的数据库管理员设置了一个DBlink (一个30秒的过程),前提是您的数据库设置了重做空间来完成此操作。
truncate table my_schema.my_table;
insert into my_schema.my_table
select * from my_schema.my_table@my_remote_db;/* +append */提示的使用仍然可以使用直接路径插入。
https://stackoverflow.com/questions/39886379
复制相似问题