运行 大型 sql 文件的快速方法,其中包含插入 stms - oracle
Quick way to run large sql file containing Insert stms - oracle
我有一个 sql 脚本,其中包含 700,000 个插入语句。我试图通过 Oracle Developer 运行,但它无法加载文件本身。我尝试从 sqlplus 到 运行 但是执行这么大的文件需要很长时间。
为了加快速度,我删除了table上的所有约束,但没有任何改善。
找过资料,请大家多多指教
- 将文件拆分为可管理的大小 - 这是我最后的选择。
- Sql Loader - 据我了解SQL Loader 是以特定格式从数据库导出并使用CTL将它们加载到数据库中。
有没有更好的方法来处理这种情况。
据我所知,选项 2 是正确的。
- 使用sed/awk/perl将文件转换为CSV(或固定宽度)输入文件。
- 禁用约束、索引(可能会删除唯一索引)
- 为您的输入文件创建控制文件
- exec
sqlldr
(打开直接路径加载)
这应该会在几秒钟内完成。
同意上面的先前回答,无论您用它做什么,通过脚本进行 700,000 次插入都会很慢 - 将数据加载为外部 table 或使用 SQL*Loader。
然而
如果您想使用 SQL Developer 执行大型脚本,请不要打开文件 - 我们必须打开并解析并显示该文件的内容。哎哟.
只需在工作表中执行此操作
@script_name
这将执行脚本。
要进一步加快速度,请隐藏或最小化工作表的输出区域。
尽管有 700,000 个插入,它仍然不会超快。
您还必须检查在执行插入操作的 table 中是否有一些触发器。如果在后面编写大量逻辑,它可能会减慢流程。
将文件从许多 SQL 语句转换为较少数量的 PL/SQL 块以减少往返开销。这只需要使用文本编辑器几分钟,并且可以将性能提高几个数量级,尤其是在慢速网络上。
每 10,000 行,向文件添加一个 begin
和一个 end;
。
改变这个:
insert into ...
insert into ...
insert into ...
...
为此:
begin
insert into ...
insert into ...
insert into ...
...
end;
/
不要将整个文件转换成一个大 PL/SQL 块。匿名 PL/SQL 块的大小有限制,您可能会遇到解析器错误。
我有一个 sql 脚本,其中包含 700,000 个插入语句。我试图通过 Oracle Developer 运行,但它无法加载文件本身。我尝试从 sqlplus 到 运行 但是执行这么大的文件需要很长时间。
为了加快速度,我删除了table上的所有约束,但没有任何改善。
找过资料,请大家多多指教
- 将文件拆分为可管理的大小 - 这是我最后的选择。
- Sql Loader - 据我了解SQL Loader 是以特定格式从数据库导出并使用CTL将它们加载到数据库中。
有没有更好的方法来处理这种情况。
据我所知,选项 2 是正确的。
- 使用sed/awk/perl将文件转换为CSV(或固定宽度)输入文件。
- 禁用约束、索引(可能会删除唯一索引)
- 为您的输入文件创建控制文件
- exec
sqlldr
(打开直接路径加载)
这应该会在几秒钟内完成。
同意上面的先前回答,无论您用它做什么,通过脚本进行 700,000 次插入都会很慢 - 将数据加载为外部 table 或使用 SQL*Loader。
然而
如果您想使用 SQL Developer 执行大型脚本,请不要打开文件 - 我们必须打开并解析并显示该文件的内容。哎哟.
只需在工作表中执行此操作 @script_name
这将执行脚本。
要进一步加快速度,请隐藏或最小化工作表的输出区域。
尽管有 700,000 个插入,它仍然不会超快。
您还必须检查在执行插入操作的 table 中是否有一些触发器。如果在后面编写大量逻辑,它可能会减慢流程。
将文件从许多 SQL 语句转换为较少数量的 PL/SQL 块以减少往返开销。这只需要使用文本编辑器几分钟,并且可以将性能提高几个数量级,尤其是在慢速网络上。
每 10,000 行,向文件添加一个 begin
和一个 end;
。
改变这个:
insert into ...
insert into ...
insert into ...
...
为此:
begin
insert into ...
insert into ...
insert into ...
...
end;
/
不要将整个文件转换成一个大 PL/SQL 块。匿名 PL/SQL 块的大小有限制,您可能会遇到解析器错误。