教程中国
PHOTOSHOP CS9.0中文版 MAYA 8.5 FOR WINDOWS Corel Painter v9.0 Flash MX2004 中文版 Illustrator cs2 中文版
VC++6.0含sp6 中英文版 VB6.0 +sp6 简体中文版 Borland Delphi 7汉化版 MSDN for vb6.0中文版 Visual Studio 2005简体
教程中国下属 文件存储共享专家BIBIDU.COM 提供大型软件,教材,源码,电影,音乐,图书等下载 更多精品请点此进入
  您目前所在位置: 教程中国 >> Oracle >> 开发技术 >> 用Oracle9i在线表格重定义来重新组织表格 RSS订阅
用Oracle9i在线表格重定义来重新组织表格
教程(视频,书籍)下载:  ASP.NET AutoCAD 数据库 C# ASP java photoshop 网页设计 delphi 3dmax Flash C++ VB 张孝祥 实例   更多请进入BIBIDU搜索
IT搜索引擎   

  在Oracle9i出现之前,你只能通过导出和导入的方式来进行表格重定义,因此表格重定义的过程是一个离线过程。甚至在线变化(“ALTER TABLE ADD NEW_COL NUMBER(3)”)也会导致独占性死锁(exclusive locks),这就需要在DDL完成之前防止所有DML(插入、更新)的运行。
  
  为了解决这个问题,Oracle9i在其DBMS_REDEFINITION软件包中引入了在线表格重定义功能。有了DBMS_REDEFINITION软件包,你就可以:
  
  1.拷贝表格(用CTAS)
  
  2.创建表格的快照(snapshot)
  
  3.把重定义表格的过程中所发生的变化进行排队
  
  4.并用变化队列来同步重定义后的表格。
  
  这个特性对24/7Oracle数据库来说非常重要,这是由于DBA现在可以在保持表格的可更新性的同时重新组织表格的结构。
  
  我们以下面的脚本为例来说明重新组织表格结构的完整过程。
  
  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;
  
  如果重组织失败,那么你就必须采取特殊的步骤来让它重新开始。由于重定义过程需要创建表格的快照,因此为了重新开始这一过程,你必须调用DBMS_REDEFINITION.ABORT_REDEF_TABLE来释放快照。
  
  DBMS_REDEFINITION.ABORT_REDEF_TABLE过程有三个参数,即大纲(schema)、原始表格(original table name)名称以及持有表格名称(holding table name)。它“出栈”并允许你开始重组织表格。
  
  dbms_redefinition.abort_redef_table('PUBS','TITLES','TITLES2');
  
  然而,在线表格重定义也不是完美无缺的。下面列出了Oracle9i重定义过程的部分限制。
  
  你必须有足以维护两份表格拷贝的空间。
  你不能更改主键栏。
  表格必须有主键。
  必须在同一个大纲中进行表格重定义。
  在重定义操作完成之前,你不能对新加栏加以NOT NULL约束。
  表格不能包含LONG、BFILE以及用户类型(UDT)。
  不能重定义链表(clustered tables)。
  不能在SYS和SYSTEM大纲中重定义表格。
  不能用具体化视图日志(materialized view logs)来重定义表格;不能重定义含有具体化视图的表格。
  不能在重定义过程中进行横向分集(horizontal subsetting)。

来源:upschool.com.cn
作者:
关键字:用Oracle9i
发表日期:2007-1-6 1:06:33

网页显示有限 阅读全文请下载本文完整版WORD文档

上一篇:教会你掌握oracle外表   下一篇:在Oracle9i中计算时间差


2008-12-2 21:15:58
本文的相类似文章
  • 使用Oracle9i JDeveloper构建应用程序
  • 使用Oracle9i全索引扫描快速访问数据
  • 用Oracle9i保护你的电子商务
  • 用Oracle9i确定数据存储大小
  • CERN应用Oracle9iAS提高网络应用性能
  • 使用Oracle9i的blockrecover新特性修复数据库中的坏块
  • 使用Oracle9i的新特性Flashback Query恢复误删除数据
  • 关于使用Oracle9i时,无法找到客户端的解决办法
  • 学会使用Oracle9i带有tablespace的空间管理管理工具
  • 用Oracle9ias开发无线应用程序
  • 在学习中进步 在进步中成长 教程中国相随您的成长之路
    华腾联合科技股份有限公司版权所有
    广告联系:Rosibo@163.com