应用场景:对于7*24系统,不能直接修改表的定义,需要在保证正常使用的前提下修改表的定义、结构
相关包:DBMS_REDEFINITION
执行在线重定义所需要权限:
角色:EXECUTE_CATALOG_ROLE
权限:CREATEANYTABLE、ALTERANYTABLE、DROPANYTABLE、LOCKANYTABLE、SELECTANYTABLE
例子:
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 包提供了多个函数和过程,可以用于在线重定义表,包括判断某个表能否进行在线重定义、启动重定义表的任务、执行一次同步、中间执行几次同步、减少需要同步的数据、减少 FINISH 操作时系统的压力、...
本文将详细介绍如何通过在线重定义(DBMS_REDEFINITION)将普通表转换为分区表,这是官方给出的四种方法之一,且对系统的影响最小。 在线重定义是一种在不影响用户访问的情况下,改变表结构的方法。以下是将普通表...
在线重定义(Online Redefinition)是Oracle数据库提供的一种功能,允许用户在不影响应用程序正常运行的情况下,对数据库表进行重构。这一过程主要依赖于DBMS_REDEFINITION包,它包含了一系列的PL/SQL过程,使得...
16. **DBMS_REDEFINITION**: 在线重定义表,允许在不中断应用的情况下更改表结构。 17. **DBMS_CRYPTO**: 提供加密和哈希函数,用于数据安全。 18. **DBMS_STATS.GATHER_SCHEMA_STATS**: 收集整个模式的统计信息,...
11. **DBMS_REDEFINITION**: 用于在线重定义表,即在不中断应用的情况下改变表的结构。`DBMS_REDEFINITION.START_REDEF_TABLE`开始重定义过程,`DBMS_REDEFINITION.COMPLETE_REDEF_TABLE`完成重定义。 12. **DBMS_...
Oracle 提供的 `dbms_redefinition` 包可以实现在线重定义表,即在不中断应用程序的情况下改变表的结构。这包括转换非分区表为分区表,或者更改现有的分区策略。例如,如果需要将一个非分区表转换为范围分区表,可以...
DBA可以使用DBMS_REDEFINITION套件来执行在线表重定义,该套件提供了一系列的程序,如CAN_REDEF_TABLE、START_REDEF_TABLE、FINISH_REDEF_TABLE、SYNC_INTERIM_TABLE等。 在线表重定义的优点包括:不需要锁定表,...
2. **判断是否可重定义**:使用`DBMS_REDEFINITION.CAN_REDEF_TABLE`函数检查目标表是否支持重定义。 3. **启动重定义过程**:调用`DBMS_REDEFINITION.START_REDEF_TABLE`函数启动重定义流程。 4. **同步数据**:...
通过DBMS_REDEFINITION包中的步骤和函数,可以实现分区表的在线重定义,这种方式对系统影响最小,但需要数据库版本支持。 除了上述的转换方法,本文还涉及了在线重定义的使用、ctas(CREATE TABLE AS SELECT)和...
9. **DBMS_REDEFINITION**:用于在线重定义表,即在不中断应用的情况下改变表的结构,这对于大型生产环境来说是非常宝贵的特性。 10. **DBMS_STATS**:管理和收集表和索引的统计信息,为Oracle的CBO(成本基础优化...
9. **DBMS_REDEFINITION** 包:用于在线重定义表,可以在不中断应用的情况下改变表的结构。 10. **UTL_FILE** 包:允许PL/SQL程序读写操作系统文件,实现数据库与文件系统的交互。 11. **DBMS_STATS** 包:用于...
- 执行DBMS_REDEFINITION:对于大型表,可以使用DBMS_REDEFINITION进行在线重定义,创建新表并迁移数据,同时整理碎片。 - 定期运行DBMS_SPACE.SPACE_USAGE:这个过程可以分析空间使用情况,帮助识别需要整理的段。 ...
可以使用DBMS_REDEFINITION或其他方法进行表重定义,或者直接删除不再需要的记录。 通过以上介绍,我们可以了解到Oracle的大对象处理涉及数据存储、读取、更新、删除以及性能优化等多个方面。在实际开发中,根据...
3. **DBMS_REDEFINITION**: 如果表非常大,`DBMS_REDEFINITION`包可以在线重定义表,以减少停机时间,同时进行碎片整理。 需要注意的是,碎片整理虽然可以提高性能,但也需要考虑操作的代价,如锁定、资源消耗和...
为了优化空间利用,建议定期执行数据库维护任务,如重建索引以消除索引碎片,使用DBMS_REDEFINITION进行在线表重定义以合并碎片,以及使用DBMS_SPACE.ALLOCATE_UPDATE统计表空间的使用情况。对于大型数据段,考虑...
使用`DBMS_REDEFINITION.START_TABLE_REDEF`函数启动在线重定义过程。 4. 监控重定义进度。 5. 使用`DBMS_REDEFINITION.FINISH_TABLE_REDEF`函数完成重定义过程。 - **优点**: - 在线重定义支持数据的一致性...
11. **使用DBMS_REDEFINITION**:此包允许在线重定义表,可以在不中断服务的情况下完成空间优化。 12. **数据库维护计划**:定期执行数据库维护任务,如分析、统计收集和空间审计,可以帮助识别和解决空间问题。 ...
2. DBMS_REDEFINITION:在线重定义表,可以在不影响应用的情况下完成碎片整理。 3. PCTUSED和PCTFREE参数调整:设置合适的值,避免过度碎片化。 4. 手动或自动段空间管理(ASSM):ASSM自动处理块碎片,但可能不适合...
4. **使用DBMS_REDEFINITION**:如果数据库较大,可以使用`DBMS_REDEFINITION`包来在线重定义表空间的字符集,减少停机时间。 5. **文档更新**:记录下整个过程和修改后的配置,以便将来参考或排查问题。 总之,...
5. **使用DBMS_REDEFINITION包**:在不影响业务的情况下在线重定义表,可以有效地整理碎片,但这需要额外的权限和计划。 6. **自动段空间管理(ASSM)**:Oracle从10g版本开始引入ASSM,它使用Bitmap Bitmap Free ...