gpt4 book ai didi

sql - ORA删除/截断

转载 作者:行者123 更新时间:2023-12-01 03:57:39 27 4
gpt4 key购买 nike

我正在使用 SQL 加载器将我的数据加载到数据库中。

在插入数据之前,我需要删除表中的现有数据:

options(skip=1,load=250000,errors=0,ROWS=30000,BINDSIZE=10485760)
load data
infile 'G:1.csv' "str '^_^'"
replace
into table IMPORT_ABC
fields terminated by "," OPTIONALLY ENCLOSED BY '"'
trailing nullcols(
.
.
.
.)

但我得到了如下错误:

SQL*LOADER-926:对表 IMPORT_ABC 执行删除/截断时发生 OCI 错误
ORA-30036: 无法在撤消表空间“undo1”中将段扩展 8

如何删除数据,例如 10000 行?
我知道我的数据库有一些限制。

最佳答案

批量删除记录可以在 PL/SQL 循环中完成,但通常被认为是不好的做法,因为整个删除通常应视为单个事务;这不能从 SQL*Loader 控制文件中完成。您的 DBA 的大小应该是 UNDO空间来容纳您需要做的工作。

如果您要删除整个表,那么无论如何截断几乎肯定会更好,要么in the control file :

options(skip=1,load=250000,errors=0,ROWS=30000,BINDSIZE=10485760)
load data
infile 'G:1.csv' "str '^_^'"
truncate
into table IMPORT_ABC
...

或作为单独的 truncate 开始加载之前在 SQL*Plus/SQL Developer/其他客户端中的语句:
truncate table import_abc;

缺点是当加载新行时,您的表对其他用户来说是空的,但如果它是专用的导入区域(从名称中猜测),无论如何都可能无关紧要。

如果您的 UNDO真的那么小,那么您可能必须运行多个负载,在这种情况下-可能很明显-您需要确保只有 truncate在第一个的控制文件中(或使用单独的 truncate 语句),并有 append 而是在您在评论中指出的后续控制文件中。

您可能还想考虑 external tables如果您将此数据用作填充其他内容的基础,因为没有 UNDO替换外部数据源的开销。您可能需要与您的 DBA 讨论设置并授予您必要的目录权限。

关于sql - ORA删除/截断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15878297/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com