`
mengxiangfeiyan
  • 浏览: 15962 次
社区版块
存档分类
最新评论

在线重定义表 .

 
阅读更多

  

         7*24的业务运营系统中,对一个表进行在线重定义将是很棘手的事,因为业务实时的在对这个表进行进行插入,删除修改等操作;Oracle9i开始引入在线重定义表(Redefine Tables Online)的功能,通过调用dbms_redefinition包,可以在修改表结构的同时允许DML操作。

在线重定义表的主要功能:

²  修改表的存储参数

²  在同一个schema下将表移动到不同的tablespace

²  增加并行查询支持

²  添加或删除分区支持

²  重建表以减少碎片

²  将堆表变为索引组织表或相反

²  添加或删除列

在线重定义表需要的权限:

execute_catalog_role

create any table

alter any table

drop any table

lock any table

select any table

在线重定义后的结果:

u  原表已经根据中间表的结构重新定义

u  start_redef_table()finish_redef_table()之间定义在中间表上的触发器、索引、约束和授权,现在定义在原始重定义表上。中间表上disabled的约束在原始表上处于enabled状态。

u  原始表上定义的触发器、索引、约束和授权建立在中间表上,并会在删除中间表时删除。原始表上原来enabled状态的索引,建立在中间表上,并处于disabled状态。

u  任何定义在原始表上的存储过程和游标都会变为INVALID,当下次调用时后自动进行编译。

u  如果执行过程中出现错误或者人为选择退出的话,可以执行DBMS_REDEFINITION.ABORT_REDEF_TABLE()过程。

在线重定义的一些限制:

Ø  如果使用基于主键的方式,则原表后重定义后的表必须有相同的主键

Ø  如果使用基于ROWID的方式,则不能是索引组织表

Ø  如果原表上有物化视图或者物化视图日志,则不能在线重定义

Ø  物化视图容器表或者高级队列表不能在线重定义

Ø  索引组织表的溢出表不能在线重定义

Ø  拥有BFILELOGN列的表不能在线重定义

Ø  Cluster中的表不能在线重定义

Ø  syssystem下的表不能在线重定义

Ø  临时表不能在线重定义

Ø  不支持水平数据子集

Ø  在列映射时只能使用有确定结果的表达式,如子查询就不行

Ø  如果中间表有新增列,则不能有NOT NULL约束

Ø  原表和中间表之间不能有引用完整性

Ø  在线重定义无法采用nologging

在线重定义的一般步骤:

1、   检查是否满足条件

EXEC DBMS_REDEFINITION.CAN_REDEF_TABLE('EDW', 'CTL_LOG', DBMS_REDEFINITION.CONS_USE_PK);

--检查原表是否满足在线重定义的条件

2、   生成中间表

CREATE TABLE CTL_LOG_TMP

(ID       INTEGER PRIMARY KEY,

PROC_NAME VARCHAR2(32),

CTL_DEMO  VARCHAR2(36),

CTL_TIME  VARCHAR2(19),

MARK      VARCHAR2(1000));

--中间表的表结构要与原表一致,可以新加列

3、   开始重定义

EXEC DBMS_REDEFINITION.START_REDEF_TABLE('EDW', 'CTL_LOG','CTL_LOG_TMP','ID ID,PROC_NAME PROC_NAME,CTL_TIME CTL_TIME,CTL_DEMO CTL_DEMO');

--首先将临时表转换成一个以原表为基础的物化视图;表结构不完全一致也没关系,只要能映射正确即可

4、   更新重定义过程中的DML

EXEC DBMS_REDEFINITION.SYNC_INTERIM_TABLE('EDW','CTL_LOG','CTL_LOG_TMP');

--可以选择执行一次或多次,同步中间表与原表的数据(为防止在表的重定义过程中,对源表进行的DML操作),缩短执行DBMS_REDEFINITION.FINISH_REDEF_TABLE时的锁表时间

5、   完成重定义

EXEC DBMS_REDEFINITION.FINISH_REDEF_TABLE('EDW','CTL_LOG','CTL_LOG_TMP');

--将原表变成与手工新建的中间临时表表结构相同,并将中间临时表从物化视图再转换成表(与当初的原表结构相同)

6、   删除中间表

DROP TABLE CTL_LOG_TMP;

7、   异常处理

EXEC DBMS_REDEFINITION.ABORT_REDEF_TABLE('EDW','CTL_LOG','CTL_LOG_TMP');  

--如果在线重定义失败,那么就必须必须调用DBMS_REDEFINITION.ABORT_REDEF_TABLE来释放快照。

说明:

一般会有这个需求,需要将在线大表(5G以上)更改为分区表,Dbms_Redefinition在线重定义非常慢,可能需要好几个小时,大表又是实时的业务操作,这就存在很大的失败风险。有人就曾经在线重定义过程中失败导致业务瘫痪,建议还是少用,或是不用,知道有这么回事就可以了。

个人觉得如下步骤比较保险,但是需要停机

a) export the table

b) create a new empty table that has the partition definition on it

c) import the table with IGNORE=Y

 

 

转:http://blog.csdn.net/nsj820/article/details/5752114

分享到:
评论

相关推荐

    在线重定义分区表

    ORACLE生产环在线重定义分区表,不停机,不影响业务

    在线重定义

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

    在线重定义表实验记录

    在线重定义表实验记录(普通表在线重定义为分区表)

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

    原始表是指需要执行在线表重定义的表,临时表是指用于在线表重定义的临时表,目的表是指执行在线表重定义后的新表。 在线表重定义的权限控制是通过EXECUTE_CATALOG_ROLE角色的权限来控制的。只有拥有EXECUTE_...

    VBA二维数组重定义

    本教程主要聚焦于如何在VBA中对已声明或已初始化的二维数组进行重定义,以适应不同的数据需求。 首先,我们需要了解二维数组的基本结构。一个二维数组可以用`(行数, 列数)`来定义,例如`Dim arr(1 To 3, 1 To 2)`...

    delphi动态虚拟覆盖重载重定义的区别

    DELPHI中方法的类型及其覆盖、重载 1、静态方法是方法的缺省类型,对它就像对通常的过程和函数那样调用,编译器知道这些方法的地址,所以... delphi动态虚拟覆盖重载重定义的区别 (www.ip8000.com www.sql8.net)

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

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

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

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

    Me分析提取表定义.pdf

    文档“Me分析提取表定义.pdf”提供了一个详细的框架,用于评价和分析医学研究,特别是针对随机对照试验(RCTs)的文献。以下是对这个框架中关键知识点的详细解释: 1. **文献信息**:包括文献编号、基本信息表、...

    公制与英制换算表定义.pdf

    这份“公制与英制换算表定义.pdf”提供了一个详细的转换指南,主要关注阀门尺寸以及长度、质量、温度、面积、体积和压力等常见物理量的单位换算。 1. **阀门尺寸**:表格列出了阀门的公称通径(DN)在公制和英制...

    SQL单表查询[定义].pdf

    - 使用别名可以重命名列标题,如`SELECT Sno AS '学号', Sname AS '姓名', Home_addr AS '家庭地址' FROM Student_20103266;` 3. **条件查询**: - `WHERE`子句用于指定查询条件。例如: - `WHERE Grade > 80` ...

    VB 指令、函数 索引表.VB 指令、函数 索引表.

    `VB 指令、函数 索引表.chm`是一个 Compiled Help Manual(CHM)文件,是Microsoft的帮助文件格式,其中包含HTML文档和索引。这种文件格式允许快速访问和离线浏览,对于经常需要查询VB指令和函数的开发者来说非常...

    PE结构中重定位表的分析.rar

    通过它,我们可以看到DLL中的重定位表是如何定义和配置的,并能观察到重定位过程对二进制代码的影响。 文档说明应该详细解释了如何使用PElord来查看重定位表,以及如何分析和解析DLL中的重定位信息。通过学习这份...

    DBMS_REDEFINITION

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

    输出表重定表重建工具.rar

    重定表操作可能涉及设计新的表结构,定义字段映射,并执行数据转换。在操作过程中,工具会自动处理数据的迁移,尽量减少对正常业务的影响。 此外,重建工具还可能具备一些高级特性,例如错误处理机制,当遇到无效...

    小学数学毕业考试命题双向细目表.pdf

    小学数学毕业考试命题双向细目表.pdf 本文将对小学数学毕业考试命题双向细目表.pdf中的知识点进行详细的解释和阐述。 小学数学毕业考试命题设计 小学数学毕业考试命题设计是小学数学教学的重要组成部分。其目的是...

    浮脉[定义].pdf

    这种脉象可以随着患者呼吸的起伏而明显变化,常见于表证的初期,即人体表面受邪,邪气尚未深入。浮脉通常被视为外感风邪的标志,或者表示体表有病邪。 浮脉的出现,可能与其他一些脉象相伴随,如浮紧、浮数等,每一...

    Dreamweaver课件:第8章 样式表.pptx

    2. **样式的定义**:包括自定义样式、HTML标签样式重定义和CSS选择器样式。自定义样式可以应用于文本和文本块;HTML标签样式重定义允许赋予HTML元素新的样式;CSS选择器样式则能针对特定的HTML组合或ID属性进行定义...

    职位评价要素定义、分等明细表.doc

    【职位评价要素定义、分等明细表】 职位评价是企业人力资源管理中的一项重要工作,用于确定员工职位的价值,为薪酬设定、晋升决策、绩效评估等提供依据。此文档详细列出了评价职位时需要考虑的关键要素及其定义、...

    基于Greenplum Hadoop- 分布式平台的大数据解决方案19.定义数据库对象(9)-维护分区表.zip

    定义数据库对象(9)-维护分区表.ppt”可能是详细阐述这些概念的幻灯片,可能包括: 1. **分区表的优势**:详细解释分区如何改善查询性能,减少I/O,提高并发性和可扩展性。 2. **分区策略**:深入讨论不同类型的...

Global site tag (gtag.js) - Google Analytics