网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.学好Oracle的六条总结.
.PL/SQL单行函数和组函数详解.
.如何释放过度占用的Shrink Undo表.
.怎样在Oracle 10g存储过程中log错.
.技术专题总结:standby Database.
.使用Index提示 强制使用索引.
.linux下安装oracle9i.
.关于连接池.
.使用Oracle9i数据库的九大注意事.
.Blockdump.
.Oracle回滚表空间丢失或损坏处理.
.用GRUB来引导软盘映象——节约软.
.Linux Shadow-Password-HOWTO.
.Oracle中安全可靠的复制问题的说.
.[Oracle] How to Use DBMS_SUPPO.
.如何在Oracle 中实现类似自动增加.
.linux下的应用开发起步--简化蚂蚁.
.数据库系统紧急故障处理方法.
.用ALTER VIEW来改变视图.
.GRUB引导管理器下,如何恢复red h.

Oracle数据库在线表格重定义功能简介

发表日期:2008-2-9


在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过程有三个参数,即大 纲(sch ema)、原始表格(origin al table name)名称以及持有表格名称(hol ding 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)。

上一篇:Oracle和MySQL的一些简单命令对比 人气:819
下一篇:把应用程序和Oracle客户端一起打包 人气:619
浏览全部Oracle教程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐