Sql 使用大容量插入在oracle中的表之间移动大数据
我想将100万行数据移动到另一个表中。Im使用查询:Sql 使用大容量插入在oracle中的表之间移动大数据,sql,oracle,plsql,oracle11g,bulkinsert,Sql,Oracle,Plsql,Oracle11g,Bulkinsert,我想将100万行数据移动到另一个表中。Im使用查询: insert into Table1 select * from Table2; 在我的PL/SQL函数中。但是这条路太慢了 如何使用批量插入方法执行此操作 源表和目标表具有相同的结构 表具有哈希分区和1个索引 忘记批量插入。因为insert into select是您可以加载的最佳批量。 最快的方法是禁用索引(将其标记为不可用),并在一次操作中执行此操作 插入: 并使用不可恢复(甚至可能是并行)重建索引 PS:如果表已分区(源和目标,甚
insert into Table1
select * from Table2;
在我的PL/SQL函数中。但是这条路太慢了
如何使用批量插入方法执行此操作
- 源表和目标表具有相同的结构
- 表具有哈希分区和1个索引
- 忘记批量插入。因为insert into select是您可以加载的最佳批量。
最快的方法是禁用索引(将其标记为不可用),并在一次操作中执行此操作
插入:
并使用不可恢复(甚至可能是并行)重建索引
PS:如果表已分区(源和目标,甚至可以使用并行插入)
跟进:
检查以下选项的性能
SELECT /*+ PARALLEL(A 4)
USE_HASH(A) ORDERED */
YOUR_COLS
FROM
YOUR_TABLE A
WHERE
ALL_CONDITIONS;
如果更快的话
INSERT /*+ APPEND */
INTO
TARGET
SELECT /*+ PARALLEL(A 4)
USE_HASH(A) ORDERED */
YOUR_COLS
FROM
YOUR_TABLE A
WHERE
ALL_CONDITIONS;
忘记批量插入。因为insert into select是您可以加载的最佳批量。 最快的方法是禁用索引(将其标记为不可用),并在一次操作中执行此操作 插入: 并使用不可恢复(甚至可能是并行)重建索引 PS:如果表已分区(源和目标,甚至可以使用并行插入) 跟进: 检查以下选项的性能
SELECT /*+ PARALLEL(A 4)
USE_HASH(A) ORDERED */
YOUR_COLS
FROM
YOUR_TABLE A
WHERE
ALL_CONDITIONS;
如果更快的话
INSERT /*+ APPEND */
INTO
TARGET
SELECT /*+ PARALLEL(A 4)
USE_HASH(A) ORDERED */
YOUR_COLS
FROM
YOUR_TABLE A
WHERE
ALL_CONDITIONS;
在插入过程中是否禁用了目标表上的约束和索引?没有。我需要吗?逐行更新索引要比以后重建索引慢得多。@Klas谢谢。禁用和启用索引时,Im出现错误。ORA-14086:分区索引不能重建为一个完整的替换索引PK_SUBS_FREE不可用;然后,改变索引PK_SUBS_自由重建;在插入过程中是否禁用了目标表上的约束和索引?没有。我需要吗?逐行更新索引要比以后重建索引慢得多。@Klas谢谢。禁用和启用索引时,Im出现错误。ORA-14086:分区索引不能重建为一个完整的替换索引PK_SUBS_FREE不可用;然后,改变索引PK_SUBS_自由重建;表具有哈希分区和1个索引。如何执行并行插入。请记住,如果将新表写入新创建的表空间,则不会有很大的改进。因为在APPEND中没有使用新的TBS。我同意单次插入是可行的。而且,使用可能会显著提高性能(但请记住,在下次备份之前,您的数据是无法恢复的!)。应该使用NOLOGGING,而不是不推荐使用的不可恢复的,并行性不需要分区,并且使用散列和有序提示不会起任何作用。@jonearles我同意NOLOGGING。但为了使用散列,我尝试在所有并行选择上传播等量的数据。你确定它不起作用吗?用于强制哈希连接。如果SELECT实际上只有一个表,那么就没有join方法。Oracle将自动尝试通过块范围颗粒均匀分布数据。表具有哈希分区和1个索引。如何执行并行插入。请记住,如果将新表写入新创建的表空间,则不会有很大的改进。因为在APPEND中没有使用新的TBS。我同意单次插入是可行的。而且,使用可能会显著提高性能(但请记住,在下次备份之前,您的数据是无法恢复的!)。应该使用NOLOGGING,而不是不推荐使用的不可恢复的,并行性不需要分区,并且使用散列和有序提示不会起任何作用。@jonearles我同意NOLOGGING。但为了使用散列,我尝试在所有并行选择上传播等量的数据。你确定它不起作用吗?用于强制哈希连接。如果SELECT实际上只有一个表,那么就没有join方法。Oracle将自动尝试通过块范围颗粒均匀分布数据。