【问题标题】:Oracle sql - Redefined table using DBMS_REDEFINITION package to enable ROWDEPENDENCIES for a tableOracle sql - 使用 DBMS_REDEFINITION 包重新定义表以启用表的 ROWDEPENDENCIES
【发布时间】:2021-01-31 16:56:52
【问题描述】:

我们有使用“NOROWDEPENDENCIES”(默认)创建的表。 我在 oracle 文档中读到,这样做的唯一两种方法是:

使用 DBMS_REDEFINITION 包重新定义表或重新创建表。

我无法重新创建表,所以我唯一的解决方案是重新定义它,但我在任何地方都找不到示例或指南。

你能给我看一个例子或参考任何指南吗? 谢谢

【问题讨论】:

    标签: oracle oracle19c dbms-redefinition


    【解决方案1】:

    首先,您必须检查您的表是否允许重新定义。 如果以下过程返回异常,则不允许:

    BEGIN
         DBMS_REDEFINITION.CAN_REDEF_TABLE(
                      uname => '<USER NAME>',
                      orig_table => '<TABLE NAME>'
         );
    END;
    /
    

    如果可以重新定义表,则必须在具有所需属性的相同模式上创建临时表。执行(表中没有映射列):

    BEGIN
         DBMS_REDEFINITION.start_redef_table (
                      uname => '<USER NAME>',
                      orig_table => '<TABLE NAME>',
                      int_table => 'INTERIM'
         );
    END;
    /
    

    如果一切正常,您可以完成执行该过程的过程:

    BEGIN
         DBMS_REDEFINITION.finish_redef_table (
                      uname => '<USER NAME>',
                      orig_table => '<TABLE NAME>',
                      int_table => 'INTERIM');
    END;
    /
    

    在使用上一个过程完成重新定义之前,您可以在临时表上创建索引、约束等。

    如果您希望临时表与原始表保持同步,您可能还需要:

    BEGIN
         DBMS_REDEFINITION.sync_interim_table (
                      uname => '<USER NAME>',
                      orig_table => '<TABLE NAME>',
                      int_table => 'INTERIM');
    END;
    /
    

    在 FINISH_REDEF_TABLE 过程之前调用。 dbms_redefinition.copy_table_dependents(..);对完成工作很有用。 要中止重新定义过程,您可能需要:

    BEGIN
         DBMS_REDEFINITION.abort_redef_table (
                      uname => '<USER NAME>',
                      orig_table => '<TABLE NAME>',
                      int_table => 'INTERIM');
    END;
    /
    

    注意,如果原始表很大,您可能需要很多空间。 如果系统在线,则应监控重新定义。可能很重。

    【讨论】:

    • 对于整个过程,我必须使用原始表的确切子句、约束、触发器等创建 INTERIM 表吗?原始表正在生产中,我不能丢失与这些表相关的任何数据。
    • 当然,您将为临时表及其附带的所有内容使用不同的名称。最后,您可以重命名原始表和临时表,然后就完成了。
    猜你喜欢
    • 2014-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多