Oracle 表结构更新后更新表所需的时间较长

Oracle 表结构更新后更新表所需的时间较长,oracle,performance,sql-update,bulkupdate,Oracle,Performance,Sql Update,Bulkupdate,我需要将列(col_1)的数据类型从数字(38,0)更新为Varchar2(64)。此列也是复合主键的一部分 我正在通过以下方式实现这一目标: 1) 添加数据类型为varchar2(64)的新列col_2 2) 用现有列col_1填充col_2的数据[更新表col_1 SET col_2=col_1] 3) 删除主键(这会删除pkey上创建的索引) 4) 下降柱柱1 5) 将新列重命名为col_1[将TABLE TABLE_1 column_2更改为col_1] 6) 创建主键(这将在pkey上

我需要将列(col_1)的数据类型从数字(38,0)更新为Varchar2(64)。此列也是复合主键的一部分

我正在通过以下方式实现这一目标:

1) 添加数据类型为varchar2(64)的新列col_2

2) 用现有列col_1填充col_2的数据[更新表col_1 SET col_2=col_1]

3) 删除主键(这会删除pkey上创建的索引)

4) 下降柱柱1

5) 将新列重命名为col_1[将TABLE TABLE_1 column_2更改为col_1]

6) 创建主键(这将在pkey上创建索引)

7) 在桌子上收集统计数据

成功执行上述步骤后,我正在运行定期Informatica作业,该作业对表执行更新/插入。这项工作需要更长的时间,而且无法完成。插入/更新是informatica工作流的一部分,我可以看到会话属性下的目标统计数据中的行数正在增加,但它每小时更新大约500行

作为我的步骤的一部分,我是否遗漏了什么。我是否需要显式重建索引或收集索引。我已经检查了索引和表的上次分析日期,并且都已更新。 查询计划看起来也和以前一样

Oracle版本- Oracle数据库12c企业版12.1.0.2.0版-64位生产

请帮忙提出你的建议

非常感谢


Keerti

欢迎来到Stackoverflow,Keerti!你能提供一些你的代码(到目前为止你有什么)或一个吗?请在问题中显示你的更新栏。可能是此更新包含
WHERE col_1=number
子句,请尝试改用
WHERE col_1=to_char(number)
。是否可以显示您的代码?如何使用现有列col_1来填充col_2的数据?表中有多少行?有多少列?请记住,查询优化都是关于特定SQL语句的细节。因此,请阅读,然后编辑你的问题,以包括必要的信息。有几种方法,一个简单的改变可以使一个表效率较低。如果新列使用更多空间,则可能会导致行迁移(行不能放入同一块)。您可以通过运行
analyze table TBLDM_EQ_PUB_TXN compute statistics来检查这一点
然后
从dba_表中选择chain_cnt,其中表名='TBLDM_EQ_PUB_TXN'。或者可能表要大得多,请检查DBA_段。或者可能发生了其他奇怪的事情,你能发布
select dbms\u metadata的内容吗?您可能需要移动表来优化它。欢迎使用Stackoverflow,Keerti!你能提供一些你的代码(到目前为止你有什么)或一个吗?请在问题中显示你的更新栏。可能是此更新包含
WHERE col_1=number
子句,请尝试改用
WHERE col_1=to_char(number)
。是否可以显示您的代码?如何使用现有列col_1来填充col_2的数据?表中有多少行?有多少列?请记住,查询优化都是关于特定SQL语句的细节。因此,请阅读,然后编辑你的问题,以包括必要的信息。有几种方法,一个简单的改变可以使一个表效率较低。如果新列使用更多空间,则可能会导致行迁移(行不能放入同一块)。您可以通过运行
analyze table TBLDM_EQ_PUB_TXN compute statistics来检查这一点
然后
从dba_表中选择chain_cnt,其中表名='TBLDM_EQ_PUB_TXN'。或者可能表要大得多,请检查DBA_段。或者可能发生了其他奇怪的事情,你能发布
select dbms\u metadata的内容吗?您可能需要移动表以优化它。