`
vvnet
  • 浏览: 117266 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

在线重定义表(DBMS_REDEFINITION)

 
阅读更多
         在系统正在运行,外部有程序正在访问表的同时修改表的定义

         应用场景:对于7*24系统,不能直接修改表的定义,需要在保证正常使用的前提下修改表的定义、结构

         相关包:DBMS_REDEFINITION

执行在线重定义所需要权限:

         角色:EXECUTE_CATALOG_ROLE

         权限:CREATEANYTABLEALTERANYTABLEDROPANYTABLELOCKANYTABLESELECTANYTABLE

     例子:

1.ALTER INDEX PK_TAB1 RENAME TO PK_T_TAB1;

2.ALTERT TABLE TAB1 RENMAE PK_TAB1 TO PK_T_TAB1;

3.创建分区表T_TAB1

4.

BEGIN
 DBMS_REDEFINITION.CAN_REDEF_TABLE(UNAME=>'TEST',TNAME=>'TAB1',OPTIONS_FLAG=>DBMS_REDEFINITION.CONS_USE_PK);
    DBMS_REDEFINITION.START_REDEF_TABLE (uname=>'TEST',orig_table=>'TAB1',int_table=>'T_TAB1',options_flag=>dbms_redefinition.cons_use_pk);
    DBMS_REDEFINITION.FINISH_REDEF_TABLE(uname=>'TEST',orig_table=>'TAB1',int_table=>'T_TAB1');
END;

*******************************************************

在线重定义的功能:

         修改表的存储参数

可以将表转移到其他表空间

增加并行查询选项

增加或删除分区

重建表以减少碎片

将堆表改为索引组织表或相反的操作

增加或删除一个列

在线重定义的原理:

         物化视图

在线重定义表的步骤:

1、选择一种重定义方法:一种是基于主键、另一种是基于ROWID

2、调用DBMS_REDEFINITION.CAN_REDEF_TABLE过程,如果表不满足重定义的条件,将会报错并给出原因

3、在同一个方案中建立一个空的中间表,根据重定义后你期望得到的结构建立中间表

4、调用DBMS_REDEFINITION.START_REDEF_TABLE过程,并提供下列参数:被重定义的表的名称、中间表的名称、列的映射规则、重定义方法

如果映射方法没有提供,则认为所有包括在中间表中的列用于表的重定义。如果给出了映射方法,则只考虑映射方法中给出的列。如果没有给出重定义方法,则认为使用主键方式

5、在中间表上建立触发器、索引和约束,并进行相应的授权。任何包含中间表的完整性约束应将状态置为DISABLE

当重定义完成时,中间表上建立的触发器、索引、约束和授权将替换重定义表上的触发器、索引、约束和授权。中间表上DISABLE的约束将在重定义表上ENABLE

6、如果在执行完成DBMS_REDEFINITION.START_REDEF_TABLE过程后,立即执行DBMS_REDEFINITION.FINISH_REDEF_TABLE过程,这会导致在重定义表上执行了大量的DML操作,那么可以选择执行一次或多次的DBMS_REDEFINITION.SYNC_INTERIM_TABLE过程,以减少最后一步执行FINISH_REDEF_TABLE过程时的锁定时间

7、执行DBMS_REDEFINITION.FINISH_REDEF_TABLE过程完成表的重定义。这个过程中,原始表会被独占模式锁定一小段时间,具体时间和表的数据量有关

执行完FINISH_REDEF_TABLE过程后,原始表重定义后具有了中间表的属性、索引、约束、授权和触发器。中间表上DISABLE的约束在原始表上处于ENABLE状态

*******************************************************

依赖对象的状态:

         依赖对象:约束、触发器、索引、授权

         中间表:定义中间表,在该中间表建立的触发器、约束应该将其置为DISABLE状态

         目的表:在重定义过程完毕以后,中间表的这些依赖对象将会自动转移到目标表上,并且为ENABLE状态

分享到:
评论

相关推荐

    DBMS_REDEFINITION

    DBMS_REDEFINITION 包提供了多个函数和过程,可以用于在线重定义表,包括判断某个表能否进行在线重定义、启动重定义表的任务、执行一次同步、中间执行几次同步、减少需要同步的数据、减少 FINISH 操作时系统的压力、...

    oracle普通表转化为分区表的方法

    本文将详细介绍如何通过在线重定义(DBMS_REDEFINITION)将普通表转换为分区表,这是官方给出的四种方法之一,且对系统的影响最小。 在线重定义是一种在不影响用户访问的情况下,改变表结构的方法。以下是将普通表...

    在线重定义

    在线重定义(Online Redefinition)是Oracle数据库提供的一种功能,允许用户在不影响应用程序正常运行的情况下,对数据库表进行重构。这一过程主要依赖于DBMS_REDEFINITION包,它包含了一系列的PL/SQL过程,使得...

    Oracle PL/SQL常用47个工具包

    16. **DBMS_REDEFINITION**: 在线重定义表,允许在不中断应用的情况下更改表结构。 17. **DBMS_CRYPTO**: 提供加密和哈希函数,用于数据安全。 18. **DBMS_STATS.GATHER_SCHEMA_STATS**: 收集整个模式的统计信息,...

    Oracle内置包的使用方法.rar

    11. **DBMS_REDEFINITION**: 用于在线重定义表,即在不中断应用的情况下改变表的结构。`DBMS_REDEFINITION.START_REDEF_TABLE`开始重定义过程,`DBMS_REDEFINITION.COMPLETE_REDEF_TABLE`完成重定义。 12. **DBMS_...

    oracle partition 深入讨论

    Oracle 提供的 `dbms_redefinition` 包可以实现在线重定义表,即在不中断应用程序的情况下改变表的结构。这包括转换非分区表为分区表,或者更改现有的分区策略。例如,如果需要将一个非分区表转换为范围分区表,可以...

    在线表重定义——Oracle 10g系列专栏(二).pdf

    DBA可以使用DBMS_REDEFINITION套件来执行在线表重定义,该套件提供了一系列的程序,如CAN_REDEF_TABLE、START_REDEF_TABLE、FINISH_REDEF_TABLE、SYNC_INTERIM_TABLE等。 在线表重定义的优点包括:不需要锁定表,...

    Oracle堆表转换成分区表方案

    2. **判断是否可重定义**:使用`DBMS_REDEFINITION.CAN_REDEF_TABLE`函数检查目标表是否支持重定义。 3. **启动重定义过程**:调用`DBMS_REDEFINITION.START_REDEF_TABLE`函数启动重定义流程。 4. **同步数据**:...

    BLOG_如何将一个普通表转换为分区表.pdf

    通过DBMS_REDEFINITION包中的步骤和函数,可以实现分区表的在线重定义,这种方式对系统影响最小,但需要数据库版本支持。 除了上述的转换方法,本文还涉及了在线重定义的使用、ctas(CREATE TABLE AS SELECT)和...

    ORACLE常用包参考手册

    9. **DBMS_REDEFINITION**:用于在线重定义表,即在不中断应用的情况下改变表的结构,这对于大型生产环境来说是非常宝贵的特性。 10. **DBMS_STATS**:管理和收集表和索引的统计信息,为Oracle的CBO(成本基础优化...

    oracle FAQ

    9. **DBMS_REDEFINITION** 包:用于在线重定义表,可以在不中断应用的情况下改变表的结构。 10. **UTL_FILE** 包:允许PL/SQL程序读写操作系统文件,实现数据库与文件系统的交互。 11. **DBMS_STATS** 包:用于...

    Oracle碎片整理

    - 执行DBMS_REDEFINITION:对于大型表,可以使用DBMS_REDEFINITION进行在线重定义,创建新表并迁移数据,同时整理碎片。 - 定期运行DBMS_SPACE.SPACE_USAGE:这个过程可以分析空间使用情况,帮助识别需要整理的段。 ...

    Oracle的大对象处理(代码加注释)

    可以使用DBMS_REDEFINITION或其他方法进行表重定义,或者直接删除不再需要的记录。 通过以上介绍,我们可以了解到Oracle的大对象处理涉及数据存储、读取、更新、删除以及性能优化等多个方面。在实际开发中,根据...

    oracle碎片整理详解!

    3. **DBMS_REDEFINITION**: 如果表非常大,`DBMS_REDEFINITION`包可以在线重定义表,以减少停机时间,同时进行碎片整理。 需要注意的是,碎片整理虽然可以提高性能,但也需要考虑操作的代价,如锁定、资源消耗和...

    Oracle数据库空间的使用和管理

    为了优化空间利用,建议定期执行数据库维护任务,如重建索引以消除索引碎片,使用DBMS_REDEFINITION进行在线表重定义以合并碎片,以及使用DBMS_SPACE.ALLOCATE_UPDATE统计表空间的使用情况。对于大型数据段,考虑...

    ORACLE TABLE PARTITION

    使用`DBMS_REDEFINITION.START_TABLE_REDEF`函数启动在线重定义过程。 4. 监控重定义进度。 5. 使用`DBMS_REDEFINITION.FINISH_TABLE_REDEF`函数完成重定义过程。 - **优点**: - 在线重定义支持数据的一致性...

    oracle删除哪些内容可以减少USERS01.DBF数据文件的大小

    11. **使用DBMS_REDEFINITION**:此包允许在线重定义表,可以在不中断服务的情况下完成空间优化。 12. **数据库维护计划**:定期执行数据库维护任务,如分析、统计收集和空间审计,可以帮助识别和解决空间问题。 ...

    消除oracle块碎片监控、清理以提高性能大全

    2. DBMS_REDEFINITION:在线重定义表,可以在不影响应用的情况下完成碎片整理。 3. PCTUSED和PCTFREE参数调整:设置合适的值,避免过度碎片化。 4. 手动或自动段空间管理(ASSM):ASSM自动处理块碎片,但可能不适合...

    Oracle RAC环境修改字符集遇到ORA-00205解决方法.rar

    4. **使用DBMS_REDEFINITION**:如果数据库较大,可以使用`DBMS_REDEFINITION`包来在线重定义表空间的字符集,减少停机时间。 5. **文档更新**:记录下整个过程和修改后的配置,以便将来参考或排查问题。 总之,...

    ORACLE 段的碎片整理

    5. **使用DBMS_REDEFINITION包**:在不影响业务的情况下在线重定义表,可以有效地整理碎片,但这需要额外的权限和计划。 6. **自动段空间管理(ASSM)**:Oracle从10g版本开始引入ASSM,它使用Bitmap Bitmap Free ...

Global site tag (gtag.js) - Google Analytics