知方号

知方号

oracle 11g 在线重定义(online redefinition)介绍

oracle 11g 在线重定义(online redefinition)介绍

   在Oracle9i出现之前,你只能通过MOVE或导出和导入的方式来进行表的重定义,因此表重定义的过程可能相当漫长或者说是一个离线过程,在此期间应用程序对该表的操作将失败。除了这个,如果用exp,我们也不能保证exp的时候该表的数据没有改变(除非单用户),而imp更是一个漫长的过程。为了解决这个问题,Oracle9i在其DBMS_REDEFINITION软件包中引入了在线重定义功能。这个特性对24*7的数据库系统来说非常重要,使用这个技术DBA可以在保持表允许DML语句的情况下修改结构,比如添加列、移动表到其他表空间、处理表的碎片等,当然了对于表的碎片处理,在10g以后,可以考虑使用shrink操作来实现,关于shrink在这里不做讨论。

在线重定义具有以下功能:

(1)修改表的存储参数;(2)可以将表转移到其他表空间;(3)在表上增加、修改或删除一列或是多列;(4)增加并行查询选项;(5)增加分区支持;(6)修改分区结构;(7)重建表以减少碎片;(8)将堆表改为索引组织表或相反的操作;

在线重定义的方法

1.基于主键2.基于ROWID。ROWID的方式不能用于索引组织表,而且重定义后会存在隐藏列M_ROW$$。默认采用主键的方式。

在线重定义的一些限制

1.要求原始表和中间表在同一个方案下;2.要求有2倍甚至是多于2倍的表空间空间;3.如果使用主键重定义的方式,原始表上要有主键;

对于在线重定义的步骤,这里不再具体说明,我们通过一个实验来演示一下,下面是一个把普通表转换成分区表在线重定义的例子

一、首先创建用户tj,并授予能够完成在线重定义的权限和角色SQL> create user tj identified by tj  2  default tablespaceusers  3  temporary tablespacetemp  4  quota unlimited onusers;User created.

SQL> GRANT CREATE SESSION, CREATE ANY TABLE,ALTER ANYTABLE, 2       DROP ANY TABLE, LOCK ANY TABLE  ,SELECT ANYTABLE, 3       CREATE ANY INDEX,CREATE ANY TRIGGER  4  TO TJ;Grant succeeded.

SQL> GRANT EXECUTE_CATALOG_ROLE TO TJ;Grant succeeded.

二、使用TJ用户登录,创建表DEMO,作为在线重定义的原始表,在表上添加主键和一个索引SQL> conn tj/tjConnected.

SQL> create table demo as select empno,ename,sal,deptno fromscott.emp;Table created.

SQL> set linesize 120SQL> set pagesize 60

SQL> select * from demo;

    EMPNOENAME            SAL    DEPTNO---------- ---------- ---------- ----------     7369SMITH           6000        20     7499ALLEN           1600        30     7521WARD            1250        30     7566JONES           2975        20     7654MARTIN          1250        30     7698BLAKE           2850        30     7782CLARK           2450        10     7788SCOTT           1000        20     7839KING            5000        10     7844TURNER     

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至lizi9903@foxmail.com举报,一经查实,本站将立刻删除。