Sql 向表中插入行的限制(Oracle)
在OraclePL/sql中,我连接了几个表并插入到另一个表中,这将导致数千个表或数百万个表。可以插入为Sql 向表中插入行的限制(Oracle),sql,oracle,Sql,Oracle,在OraclePL/sql中,我连接了几个表并插入到另一个表中,这将导致数千个表或数百万个表。可以插入为 insert into tableA select * from tableB; 是否会因为行数而有失败的机会? 或者,如果没有更多记录,是否有更好的方法插入值 提前感谢好吧,机器内部的一切都是有限的,因此如果选择返回太多行,它肯定不会工作(尽管必须有任何行,但数量取决于您的存储和内存大小、您的操作系统以及可能的其他因素) 如果您认为您的查询可以超过限制,那么分批执行插入,并在每批之后提交
insert into tableA
select * from tableB;
是否会因为行数而有失败的机会?
或者,如果没有更多记录,是否有更好的方法插入值
提前感谢好吧,机器内部的一切都是有限的,因此如果选择返回太多行,它肯定不会工作(尽管必须有任何行,但数量取决于您的存储和内存大小、您的操作系统以及可能的其他因素)
如果您认为您的查询可以超过限制,那么分批执行插入,并在每批之后提交。当然,您需要意识到,如果在50%的插入中,您决定需要取消该过程,您必须采取一些措施(因为
回滚在这里将不起作用)。好的,机器内部的一切都是有限的,因此如果该选择返回太多行,它肯定不会起作用(尽管必须有任何行,但行数取决于您的存储和内存大小、操作系统以及其他因素)
如果您认为您的查询可以超过限制,则分批插入,并在每批之后提交。当然,您需要注意,如果在50%的插入中您决定需要取消该过程,则必须执行某些操作(因为回滚
在此处将不起作用).好吧,机器内部的所有内容都是有限的,因此如果选择返回太多行,它肯定不会工作(尽管必须有任何行,但行数取决于您的存储和内存大小、操作系统以及其他因素)
如果您认为您的查询可以超过限制,则分批插入,并在每批之后提交。当然,您需要注意,如果在50%的插入中您决定需要取消该过程,则必须执行某些操作(因为回滚
在此处将不起作用).好吧,机器内部的所有内容都是有限的,因此如果选择返回太多行,它肯定不会工作(尽管必须有任何行,但行数取决于您的存储和内存大小、操作系统以及其他因素)
如果您认为您的查询可以超过限制,则分批插入,并在每批之后提交。当然,您需要注意,如果在50%的插入中您决定需要取消该过程,则必须执行某些操作(因为回滚
在此处将不起作用).我建议的步骤不同,因为使用SQL或PL/SQL在一条SQL语句中加载更多数据时,性能通常会提高:
我建议您检查回滚段(RBS段)的大小,并可能为此类交易在线提供一个更大的专用段
对于插入,您可以说“回滚消耗量”=“插入的数据量”。您可以从数据库统计信息中了解典型的行宽(请参阅analyze table table b compute statistics For table For all columns For all index
)
确定每次迭代可以插入多少行
在大插入和提交中插入此数量的数据
重复一遍
insert通常不存在锁定问题,因为无法锁定尚未存在的内容:-)
当在分区表上运行时,您可能需要考虑不同的场景,允许(子)分区将工作分配在一起。通过从文本文件加载来使用SQL*Loader时,您可能也会使用不同的方法,例如直接路径,它在不使用SQL引擎的情况下向数据库中添加预格式化数据块,而不是让RDBMS处理SQL。
我建议的步骤不同,因为使用SQL或PL/SQL在一条SQL语句中加载更多数据时,性能通常会提高:
我建议您检查回滚段(RBS段)的大小,并可能为此类交易在线提供一个更大的专用段李>
对于插入,您可以说类似于“回滚消耗量”=“插入的数据量”。您可以从数据库统计信息中了解典型的行宽(请参阅用户\分析表table后的表b计算所有索引的所有列的表统计信息
)
当在分区表上运行时,您可能需要考虑不同的场景,允许(子)分区将工作分配在一起。通过从文本文件加载来使用SQL*Loader时,您可能也会使用不同的方法,例如直接路径,它在不使用SQL引擎的情况下向数据库中添加预格式化数据块,而不是让RDBMS处理SQL。
我建议的步骤不同,因为使用SQL或PL/SQL在一条SQL语句中加载更多数据时,性能通常会提高:当在分区表上运行时,您可能需要考虑不同的场景,允许(子)分区将工作分配在一起。当通过从文本文件加载来使用SQL*Loader时,您可能也会使用不同的方法,例如
insert into new_table_name select * from old_table_name where row_num<10000;