网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 
中国网管联盟
Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道
 当前位置: > bitsCN.com > 数据库技术 > Oracle > 入门基础 > Oracle数据库在线表格重定义功能简介-入门基础  

Oracle数据库在线表格重定义功能简介-入门基础

2008-05-23  作者:bitsCN整理  来源:中国网管联盟  点评 投稿 收藏

在Oracle9i出现之前,你只能通过导出和导入的方式来进行表格重定义,因此表格重定义的过程是一个离线过程。甚至在线变化(“ALTER TABLE ADD NEW_COL NUMBER(3)”)也会导致独占性死锁(exclusive locks),这就需要在DDL完成之前防止所有DML(插入、更新)的运行。

网管bitscn_com

为了解决这个问题,Oracle9i在其DBMS_REDEFINITION软件包中引入了在线表格重定义功能。有了DBMS_REDEFINITION软件包,你就可以: 网管下载dl.bitscn.com

1.拷贝表格(用CTAS)。 网管u家u.bitscn@com

2.创建表格的快照(snapshot)。

网管u家u.bitsCN.com

3.把重定义表格的过程中所发生的变化进行排队。 网管u家u.bitsCN.com

4.并用变化队列来同步重定义后的表格。
这个特性对24/7Oracle数据库来说非常重要,这是由于DBA现在可以在保持表格的可更新性的同时重新组织表格的结构。 网管下载dl.bitscn.com

我们以下面的脚本为例来说明重新组织表格结构的完整过程。

网管网www.bitscn.com


  
  exec dbms_redefinition.abort_redef_table('PUBS','TITLES','TITLES2');
  alter table titles add constraint pk_titles primary key (title_id);
  
  exec dbms_redefinition.can_redef_table('PUBS','TITLES');
  
  create table titles2
  as
  select * from titles;
  
  exec dbms_redefinition.start_redef_table('PUBS','TITLES','TITLES2','
title_id title_id,title title,type type,
pub_id pub_id,price price,advance advance,
royalty*1.1 royalty,ytd_sales ytd_sales,notes notes,pubdate pubdate');
  
  exec dbms_redefinition.sync_interim_table('PUBS','TITLES','TITLES2');
  exec dbms_redefinition.finish_redef_table('PUBS','TITLES','TITLES2');
  
  drop table titles2; 网管网www_bitscn_com


如果重组织失败,那么你就必须采取特殊的步骤来让它重新开始。由于重定义过程需要创建表格的快照,因此为了重组织新开始这一过程,你必须调用DBMS_REDEFINITION.ABORT_REDEF_TABLE来释放快照。

网管联盟bitsCN_com


DBMS_REDEFINITION.ABORT_REDEF_TABLE过程有三个参数,即大 纲(sch ema)、原始表格(origin al table name)名称以及持有表格名称(hol ding table name)。它“出栈”并允许你开始重表格。

网管u家u.bitscn@com


dbms_redefinition.abort_redef_table('PUBS','TITLES','TITLES2');

网管网www.bitscn.com

   中国网管联盟bitsCN.com

然而,在线表格重定义也不是完美无缺的。下面列出了Oracle9i重定义过程的部分限制。 网管下载dl.bitscn.com

你必须有足以维护两份表格拷贝的空间。 网管联盟bitsCN@com

你不能更改主键栏。 网管联盟bitsCN_com

表格必须有主键。

中国网管联盟bitsCN.com

必须在同一个大纲中进行表格重定义。 中国网管联盟bitsCN.com

在重定义操作完成之前,你不能对新加栏加以NOT NULL约束。

网管联盟bitsCN_com

表格不能包含LONG、BFILE以及用户类型(UDT)。

网管u家u.bitsCN.com

不能重定义链表(clustered tables)。 中国网管联盟bitsCN.com

不能在SYS和SYSTEM大纲中重定义表格。 中国网管论坛bbs.bitsCN.com

不能用具体化视图日志(materialized view logs)来重定义表格;不能重定义含有具体化视图的表格。 网管u家u.bitsCN.com

不能在重定义过程中进行横向分集(horizontal subsetting)。

网管下载dl.bitscn.com


TAGs   简介   入门   基础   功能   定义   数据库   在线   表格   过程   不能      
 上一篇:Oracle中并行处理技术原理深入分析1-入门基础   下一篇:快速转移数据的方法-入门基础
Oracle数据库在线表格重定义功能简介-入门基础 评论:
loading.. 评论加载中…
评论:请自觉遵守互联网相关政策法规,评论不得超过250字。

验证码: 注册用户
本类热门排行:
最新推荐文章:
网管论坛交流: