我在 oracle 中有一个插入脚本文件,其中包含大约 250 万条插入语句。需要插入 Oracle 表的想法。
我尝试通过直接执行文件来使用 SQL Developer 插入@path\script.sql
。但它超时了。
我在 oracle 中有一个插入脚本文件,其中包含大约 250 万条插入语句。需要插入 Oracle 表的想法。
我尝试通过直接执行文件来使用 SQL Developer 插入@path\script.sql
。但它超时了。
250 万条单独的 INSERT 语句总是很糟糕:您需要使用更适合批量数据量的东西
“它是一个出口,我正试图将这些记录插入另一个表”
最好的方法是以不同的格式重做导出,比如使用 datadump。
或者,正如@thatjeffsmith 建议的那样,您可以以 CSV 格式导出记录并使用 SQL*Loader 导入它们;
SQL Developer 有一些选项可以帮助解决这个问题。
如果这是一次性脚本,请花几分钟时间手动将语句分组到匿名 PL/SQL 块中,方法是在文件中添加多个BEGIN
和。END; /
除非您要不断地重新生成此文件,否则无需使用其他格式或工具。
由于网络滞后,具有大量语句的脚本通常很慢。每个语句都被发送到服务器,执行并返回一个状态。即使在同一台主机上运行,通信开销仍然可能超过用于执行实际工作的时间量。
PL/SQL 块作为一个单元发送到服务器。如果一次发送 100 个语句块,网络开销将减少 99%。通过使用 1000、10000 等块,您不会看到太大的改进,但是块越大,您需要做的手动编辑就越少。但请注意,如果块太大,则会超出编译限制并引发错误。
作为最后的手段,删除每个脚本的 INSERT
部分语句,只保留csv
格式中的值。
定义一个EXTERNAL TABLE
或加载它SQL*Loader
假设这些记录是干净的,您可以禁用对要插入的表的日志记录和索引。此外,我会在 1000 条记录后或根据您的要求进行提交。