【问题标题】:Oracle Backup and restore constraints to allow changing a column typeOracle 备份和恢复约束以允许更改列类型
【发布时间】:2012-04-12 07:55:52
【问题描述】:

我需要更改 200 多个表中的列类型,我正在遵循下一个方法:

  1. 如果列被任何 FK 引用,则禁用所有外部约束
  2. 将列存储在 varray 中,如果列是 PK 的一部分,则删除主键
  3. 在表中创建一个具有相同类型的临时新列
  4. 使用原始值更新临时新列
  5. 从原始列中删除值
  6. 更改原始列的列类型
  7. 使用临时列值更新原始列
  8. 如果应用则恢复主键
  9. 启用 FK(如果已应用)

我在以下情况下遇到了一些问题

。当主键是复合时(多列) .我需要存储原始 FK 和 PK 签名,以便在更改后恢复它们

-------我的想法--------

  1. 备份临时表中的 all_constraints 和 all_cons_columns 记录,并在更改列类型后恢复约束信息。

  2. 保持相同的想法,即存储 FK 和 PK 签名以在更改列类型后恢复它们

¿ 有什么建议吗?会很高兴的,谢谢!

【问题讨论】:

  • 正在更改的列的“旧”和“新”数据类型是什么?
  • 旧类型为 NUMBER(10) 新类型为 VARCHAR2(10)
  • 您可能想看看 DBMS_REDEFINITION 包(我相信它自 9i 以来一直是 Oracle 的标准部分),它可能会帮助您解决所有这些问题。

标签: oracle foreign-keys primary-key constraints


【解决方案1】:

您可以尝试旧的 CTAS 然后重命名方法:

基本上:

  1. create new table as select c1,c1,c3 ... from old table (包括数据 这里的类型转换;
  2. 建立任何索引、约束...
  3. 删除旧表(可能需要先禁用 donstraints)
  4. 将新表重命名为旧表

【讨论】:

    猜你喜欢
    • 2011-07-02
    • 2010-11-28
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-10
    • 2012-08-15
    相关资源
    最近更新 更多