我最近从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文件 有没有更好的方法来更快地完成这项工作?
答案 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 */
提示仍然可以使用直接路径插入。