Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1119625
  • 博文数量: 231
  • 博客积分: 2500
  • 博客等级: 少校
  • 技术积分: 2662
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-03 16:35
个人简介

学无止境

文章分类

全部博文(231)

文章存档

2014年(7)

2013年(103)

2011年(11)

2010年(53)

2009年(57)

分类: Oracle

2010-09-06 16:09:17

DBMS_REDEFINITION
===================
通过DBMS_REDEFINITION,可以完成在线重组织表。完成在线重组织、增加本地物化视图的可维持性。快照日志需要被定义在主表上,支持增加物化视图的可维持性。这些日志可以对主表的变化进行跟踪,用于物化视图刷新时的同步。


限制
===================
具有下列特征的表不适合在线重定义

-[9.0.1]表未包含主键
-表上定义了物化视图日志
-[9i]表是物化视图包含表,AQ表
-[10g]在n-way master配置的复制表可以被重定义,但是水平子集(表中行的子集),垂直子集(表中列的子集),列不允许被转换。
-IOT表的溢出表
-表上有细粒控制(行级别安全)
-表中有BFILE字段
-表上有LONG字段可以被重定义,但该列必须转换成CLOB字段。同样LONG RAW字段必须转换成BLOB字段。可以接受表上有LOB字段。
-SYS和SYSTEM用户下的表
-临时表


其他约束:
-表中行的子集
-只有简单的,确定的公式、序列和SYSDATE在原始表映射到过度表时可以被使用。例如不允许子查询
-如果增加了新列,但没有被映射,在重定义完成之前,不能指定NOT NULL。
-表上不能有外键约束
-表的重定义不能NOLOGGING
-[10g]对于物化视图日志和队列表,在线重定义受限于转换物理属性。
-不能转换嵌套表到VARRAY。

 

权限要求
===============================
运行该package需要拥有以下权限:
- Execute privilege to DBMS_REDEFINITION
- Create any table
- Alter any table
- Drop any table
- Lock any table
- Select any table


DBMS_REDEFINITION子程序概要
===============================

CAN_REDEF_TABLE 程序
-----------------------
该程序用于决定将要重新组织的表。这为在线重组织的第一步。如果不指定在线重定义的表,将会有错误产生。

语法
DBMS_REDEFINITION.can_redef_table (
uname IN VARCHAR2,
tname IN VARCHAR2);

CAN_REDEF_TABLE 程序参数:
参数               描述
---------          ------------
uname              表的schema名称
tname              准备重组的表名

 

START_REDEF_TABLE 程序:
------------------------
该程序完成重组织的初始化。在验证了表是否可以在线重组织之后,需要创建一张空的转换表(在同一个schema下)将名称传入其中的属性描述定义表名。

语法
DBMS_REDEFINITION.start_redef_table (
uname IN VARCHAR2,
orig_table IN VARCHAR2,
int_table IN VARCHAR2,
col_mapping IN VARCHAR2 := NULL);

START_REDEF_TABLE 程序参数:
参数               描述
---------          ------------
uname              表的schema名称
orig_table         准备重组的表名
int_table          过度表的名称。
col_mapping        从过度表到原始表,列的映射信息。
                   (类似SELECT查询语句中字段的列表)
                   如果为NULL,原始表中所有的字段都
                   被按原来的名称选择到过度表中
                  

FINISH_REDEF_TABLE 程序:
------------------------
该程序用于完成重组织处理。在这步之前,可能需要在过度表上创建新的索引、触发器、权限分配以及约束。如果有外键约束包含在过度表上,必须disabled。在进行这步时,原始表将被暂时锁住,直到完成。

语法
DBMS_REDEFINITION.finish_redef_table (
uname IN VARCHAR2,
orig_table IN VARCHAR2,
int_table IN VARCHAR2);

FINISH_REDEF_TABLE 程序参数:
参数               描述
---------          ------------
uname               表的schema名称
orig_table          准备重组的表名
int_table           过度表的名称。


SYNC_INTERIM_TABLE 程序:
-------------------------
此程序可以将原始表同步到过度表。此步骤可以在完成重组织之前,最小化地成本不断将数据同步到过度表上。此步骤通常在开始重定义之后,完成之前(如创建索引)调用,用来从原始表上快速地同步新增数据。

语法
DBMS_REDEFINITION.sync_interim_table (
uname IN VARCHAR2,
orig_table IN VARCHAR2,
int_table IN VARCHAR2);

SYNC_INTERIM_TABLE 程序参数:
参数               描述
---------          ------------
uname               表的schema名称
orig_table          准备重组的表名
int_table           过度表的名称。


ABORT_REDEF_TABLE 程序:
-------------------------
该程序用于清除在重组织过程中发生的错误。该程序也可以用于在重组织过程中(start_reorg_table之后,finish_reorg_table之前),随时中断重组织操作。

语法
DBMS_REDEFINITION.abort_redef_table (
uname IN VARCHAR2,
orig_table IN VARCHAR2,
int_table IN VARCHAR2);

ABORT_REDEF_TABLE 程序参数:
参数               描述
---------          ------------
uname               表的schema名称
orig_table          准备重组的表名
int_table           过度表的名称。

如果主键包含的列是一个加密列,可能需要参看下面这个BUG:
参考:Bug 6034260 DBMS_REDEFINITION.START_REDEF_TABLE FAILS ORA-32412 BECAUSE
OF ENCRYPTED COLUMN


相关文档
---------------
Oracle9i Database Administrator's Guide Part Number A90117-01
Oracle9i Supplied PL/SQL Packages and Types Reference Part Number A89852-02

阅读(3615) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~