首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 冲浪宝典 > 网络资源 > 用Oracle9i在线表格重定义来重新组织表格
【标  题】:用Oracle9i在线表格重定义来重新组织表格
【关键字】:c,在线,表格,Oracle,Oracle9i,9i,Oracle9i
【来  源】:网络

用Oracle9i在线表格重定义来重新组织表格

在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)。


在Oracle9i中计算时间差:【上一篇】
用GET_DDL函数来拷贝DLL句法:【下一篇】
【相关文章】
  • 在Oracle9i中计算时间差
  • 在Oracle9i中定义视图约束
  • 跟踪Oracle9i 的CPU和I/O使用代价
  • 从Oracle迁移到SQL Server的陷阱
  • 使用代码刷新ODBC链接SQL SEVER表
  • SQL语言入门教程:第五课 删除数据库表格
  • SQL循序渐进(19)DISTINCT和排除复制
  • SQL循序渐进(9)SELECT语句
  • CorelDraw 10实例教程(二) 绘图大师
  • CorelDraw 10实例教程(一) 举重若轻
  • 【随机文章】
  • vs2005控件演示之 列表框 《ListBox》
  • 安全的log纪录服务器
  • Solaris 8 创建代码表以使用新的输入法
  • 架设防病毒、垃圾邮件邮件网关
  • Beautiful lady
  • CCNA 640-801考试IOS命令大全(二)
  • 经典C程序100例==51--60
  • C语言编程---性能优化
  • 生产报表数据库出现了活动事务的回滚段损坏(二)
  • resin configuration 2
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.