Oracle11g 批量更新整个表的列值

Oracle11g 批量更新整个表的列值,oracle11g,Oracle11g,我们有一个Oracle 11g数据库表,大约有3500万行。我们所处的情况是必须更新一列的所有值。此列已编入索引 我有一个脚本,可以生成更新的值,并可以将其填充到文本文件中 我正在寻找一个好的策略来对这个表进行批量更新。我们可以承受大约10小时的停机时间 这是个好主意吗 将整个表转储到平面文件中 使用任何脚本语言更新值 重新加载整个表 重建索引 你会遇到哪些陷阱 我不能胜任PL/SQL。有没有一种方法可以在PL/SQL或数据库本身的任何“内部”解决这个问题 谢谢, Prabhu最快的方法可能

我们有一个Oracle 11g数据库表,大约有3500万行。我们所处的情况是必须更新一列的所有值。此列已编入索引

我有一个脚本,可以生成更新的值,并可以将其填充到文本文件中

我正在寻找一个好的策略来对这个表进行批量更新。我们可以承受大约10小时的停机时间

这是个好主意吗

  • 将整个表转储到平面文件中
  • 使用任何脚本语言更新值
  • 重新加载整个表
  • 重建索引
你会遇到哪些陷阱

我不能胜任PL/SQL。有没有一种方法可以在PL/SQL或数据库本身的任何“内部”解决这个问题

谢谢,
Prabhu

最快的方法可能是基于您的平面文件创建一个更新值,然后:

create table new_table as
  select o.col1, o.col2, o.col3, ..., x.value as colN
  from old_table o
  join extern_table x on ...;
(请确保join返回旧_表中的所有行。该联接可能需要是外部联接。)


编辑:列被索引。在问题中更正了。托尼,谢谢你的回答。我无法在查询本身中提供更新的值,因为我需要运行外部脚本来生成更新的值。我已经更新了我的答案:您可以使用外部表将平面文件连接到查询中,以创建新表。
-- drop foreign key constraints that reference old_table
alter table child1 drop constraint fk_to_old_table1;
...

drop table old_table;

rename new_table to old_table;

-- Re-create indexes and constraints on old_table
alter table old_table add constraint oldpk primary key (col1);
...

-- Re-create the dropped foreign key constraints to old_table
alter table child1 add constraint fk_to_old_table1 ...;
...