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

在线重定义表 .

 
阅读更多

  

         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生产环在线重定义分区表,不停机,不影响业务

    在线重定义表实验记录

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

    在线重定义

    在线重定义 DBMS_REDEFINITION =================== 通过DBMS_REDEFINITION,可以完成在线重组织表。完成在线重组织、增加本地物化视图的可维持性。快照日志需要被定义在主表上,支持增加物化视图的可维持性。这些...

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

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

    DM8_SQL语言使用手册.pdf

    3.4.1 表空间定义语句 ..............................................................................................66 3.4.2 修改表空间语句 ................................................................

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

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

    Oracle从入门到精通

    2.4 创建和管理表.......................................... 1、表(TABLE)基本的存储单位,由行和列组成。.............. 2、方案:一个用户所有对象的命名集合。..................... 3、CTAS(子查询建表):...

    TianleSoftware Oracle中文学习手册

    1.3.2 普通表转分区表方法.......................................................... 1.3.2.1 插入: Insert with a subquery method ................................ 1.3.2.1.1 Oracle 11g 的 Interval .........

    emWin5用户手册(中文)

    emWin 图形库 图形用户界面 版本 5.12 手册修订版 0 emWin V5.12 用户参考手册 © 1997 - 2011 SEGGER Microcontroller GmbH & Co....9 1 emWin 简介...................................................................

    [Visual.Basic.2010.入门经典(第6版)].Thearon.Willi等.扫描版(1/2)

    5.1.1 定义和使用数组 .................. 105 5.1.2 使用 For Each…Next 循环 .... 108 5.1.3 将数组作为参数传递 .......... 110 5.1.4 数组的排序 .......................... 112 5.1.5 反向检索 .....

    Oracle编程艺术

    勘误表....................................................................................... 29 配置环境....................................................................................... 30 建立...

    oracle学习经典教程

    1.3.2.3 使用在线重定义:DBMS_REDEFINITION .........................50 1.3.2.4 使用导出导入.........54 1.3.2.4.1 迁移分区表的步骤.....................55 1.3.2.4.2 示例1:使用exp/imp ............

    操作系统原理 计算机

    1.1.1 操作系统的定义和目标.....................................................................................................1 1.1.2 操作系统的作用与功能................................................

    WorkFlow Specify

    33. 工作重送(Resend Steps)...........................................................................................9 34. 能临时更改收件人(Ability to Change Recipient ) ................................

    db2数据库入门教程(官方中文版)

    PART I – 概览.........................................................................................................................11 第 1章 – DB2 Express-C是什么?..................................

    《人月神话》布鲁克斯.扫描版.pdf

    形式化定义................................................................................................................................34 直接整合......................................................

    Lua中文教程(pdf版)

    17.3 重述带有默认值的表...............132 第三篇标准库134 第18章数学库................135 第19章 Table库...............136 19.1数组大小................136 19.2 插入/删除..............137 19.3 ...

    db2数据库入门官方教程(中文版)

    资源简介 第 1章 – DB2 Express-C是什么?..........................................................................................13 1.1免费开发、部署和分发… 无限制!....................................

    数据库设计中英文术语表.doc

    Data conversion and loading(数据转换和加载):数据库应用生命周期重的一个阶段,包括转换现有 数据到新数据库中以及酱下耨应用程序转换到新的数据库上运行。 27. Data dictionary(数据字典):参见系统目录...

    DELPHI 表格控件DBGridEh史上最全使用资料(101页)

    5) 获得当前DBGridEh表中单元格的序号.............................................................30 6) 怎样在dbgridEh和Edit中显示金额的千分号...................................................30 7) end...

Global site tag (gtag.js) - Google Analytics