0

我在 oracle 中有一个插入脚本文件,其中包含大约 250 万条插入语句。需要插入 Oracle 表的想法。

我尝试通过直接执行文件来使用 SQL Developer 插入@path\script.sql。但它超时了。

4

4 回答 4

2

250 万条单独的 INSERT 语句总是很糟糕:您需要使用更适合批量数据量的东西

“它是一个出口,我正试图将这些记录插入另一个表”

最好的方法是以不同的格式重做导出,比如使用 datadump。

或者,正如@thatjeffsmith 建议的那样,您可以以 CSV 格式导出记录并使用 SQL*Loader 导入它们;

SQL Developer 有一些选项可以帮助解决这个问题。

于 2017-03-06T10:26:33.080 回答
0

如果这是一次性脚本,请花几分钟时间手动将语句分组到匿名 PL/SQL 块中,方法是在文件中添加多个BEGIN和。END; /除非您要不断地重新生成此文件,否则无需使用其他格式或工具。

由于网络滞后,具有大量语句的脚本通常很慢。每个语句都被发送到服务器,执行并返回一个状态。即使在同一台主机上运行,​​通信开销仍然可能超过用于执行实际工作的时间量。

PL/SQL 块作为一个单元发送到服务器。如果一次发送 100 个语句块,网络开销将减少 99%。通过使用 1000、10000 等块,您不会看到太大的改进,但是块越大,您需要做的手动编辑就越少。但请注意,如果块太大,则会超出编译限制并引发错误。

于 2017-03-07T02:06:05.340 回答
0

作为最后的手段,删除每个脚本的 INSERT部分语句,只保留csv格式中的值。

定义一个EXTERNAL TABLE或加载它SQL*Loader

于 2017-03-06T17:25:50.583 回答
-1

假设这些记录是干净的,您可以禁用对要插入的表的日志记录和索引。此外,我会在 1000 条记录后或根据您的要求进行提交。

于 2017-03-06T13:53:06.297 回答