应用场景:对于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: oracle10g 通过在线方式修改表的属性 可以在线重定义表,性能调优方面用处很大
作用:DBMS_STATS.GATHER_TABLE_STATS统计表,列,索引的统计信息. DBMS_STATS.GATHER_TABLE_STATS的语法如下: DBMS_STATS.GATHER_TABLE_STATS ( ownname VARCHAR2, tabname VARCHAR2, partname VARCHAR2, estimate_...
Oracle DOM编程 文档,有要的没 Start from toc.htm DBMS_XMLDOM DBMS_XMLPARSER DBMS_XMLQUERY
oracle dbms_lob
dbms_obfuscation_toolkit加密解密数据
ORACLE数据库使用dbms_stats包手动收集关于表的、索引的统计信息。
支持ArcGIS10.2版本的PostgreSQL_DBMS_for_windows_922,ESRI官方原版资源。
ORA-04063: package body SYS.DBMS_REGISTRY_SYS has errors
oracle中DBMS_SQL的使用,详细讲解oracle DBMS_SQL的使用办法
DBMS_JOB的详细定义,有实例,有详细的解释
亲测有效 通过此版本可以把oracle时区版本调整到为最新版本,一般配合时区补丁使用 可以参考...脚本里有说明 先运行upg_tzv_check.sql再运行upg_tzv_apply.sql
详细介绍DBMS_JOB包的各函数操作,以及各函数对job的使用作用等。
Oracle 18c bug 执行 DBMS_PDB.CHECK_PLUG_COMPATIBILITY报错_ITPUB博客.mhtml
dbms_comp_advisor.getratio 预估压缩比例的存储过程脚本 11gR2以前使用,11gR2后可以使用系统自带的存储。
通过DBMS_REDEFINITION,可以完成在线重组织表。完成在线重组织、增加本地物化视图的可维持性。快照日志需要被定义在主表上,支持增加物化视图的可维持性。这些日志可以对主表的变化进行跟踪,用于物化视图刷新时的...
DBMS_PROFILER使用指南 介绍详细,从安装到使用都一目明了
简单的dbms_stats操作,简单的dbms_stats操作简单的dbms_stats操作
使用C语言实现的数据库管理系统。 支持简单类 SQL语言。
DBMS_AQ 莫名其妙不知道为什么不能出队, 入队正常, 手动出队正常, 不能自动出队