知识大全 9i新特性之——在线表格重定义研究4

Posted 语句

篇首语:人生处万类,知识最为贤。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 9i新特性之——在线表格重定义研究4相关的知识,希望对你有一定的参考价值。

   创建我们需要重新定义的中间表 这个是一个分区表 以后我们将把原表的所有数据在线转移到该表上来

  SQL>create table int_test(a int b int)partition by range(a)(partition p values less than( )   partition p values less than( )   partition p values less than( )   partition p values less than( ));Table created

  然后我们检查所有对象 所有对象共 个

  SQL> select object_name object_type status object_id data_object_id from user_objects;AUDIT_TEST            TABLE              VALID                 INT_TEST               TABLE PARTITION    VALID                 INT_TEST               TABLE PARTITION    VALID                 INT_TEST               TABLE PARTITION    VALID                 INT_TEST               TABLE PARTITION    VALID                 INT_TEST               TABLE              VALID       PK_TEST_ID             INDEX              VALID                 TEST                   TABLE              VALID                 TR_TEST                TRIGGER            VALID       rows selected

   执行在线重新定义开始

  SQL> executeDBMS_REDEFINITION START_REDEF_TABLE( MYTEST TEST INT_TEST );

  begin SYS DBMS_REDEFINITION START_REDEF_TABLE( MYTEST TEST INT_TEST ); end;

  ORA : insufficient privilegesORA : at SYS DBMS_REDEFINITION line ORA : at SYS DBMS_REDEFINITION line ORA : at line

  这里存储过程返回一个错误 说没有足够的权限 的确是这样 经查 如果要执行这个存储过程 起码需要如下权限

  * CREATE ANY TABLE* ALTER ANY TABLE* DROP ANY TABLE* LOCK ANY TABLE* SELECT ANY TABLE

  我们可以临时授予DBA权限给用户 完之后取消掉 或转移到其他有权限的用户执行这个操作

  SQL> CONNECT SYSTEM/CHENConnected to Oracle i Enterprise Edition Release Connected as SYSTEMSQL> execute SYS DBMS_REDEFINITION START_REDEF_TABLE( MYTEST TEST INT_TEST );PL/SQL procedure successfully pleted

  这里可以看到 我们用system执行成功 那么这个过程到底两个表执行了那些语句呢?我们可以通过如下的语句来验证一下

  SQL> select sql_text from v$sqlarea where sql_text like %TEST% ;

  SQL_TEXT SELECT CURRENT$ A CURRENT$ B FROM (SELECT TEST A A TEST B B FROMselect * from MYTEST TEST ALTER TRIGGER MYTEST TR_TEST PILE DEBUGSELECT  /*+ NO_MERGE NO_MERGE(LL$) ROWID(MAS$) ORDERED USE_NL(MAS$) NO_INDEX(MASDELETE FROM MYTEST INT_TEST SNAP$ WHERE A = : truncate table MYTEST INT_TEST purge snapshot logdelete from MYTEST MLOG$_TEST where snaptime$$ <= : INSERT INTO MYTEST INT_TEST   ( A B ) VALUES (: : )select sql_text from v$sqlarea where sql_text like %TEST% UPDATE MYTEST INT_TEST SET A = : B = : WHERE A = : SELECT TEST A A TEST B B FROM MYTEST TEST TEST begin dbms_redefinition can_redef_table( MYTEST TEST ); end;select count(*) from snap$ where (vname sowner) in (( TEST MYTEST ))ment on table MYTEST RUPD$_TEST is temporary updatable snapshot log begin DBMS_REDEFINITION START_REDEF_TABLE( MYTEST TEST INT_TEST ); end;ment on table MYTEST MLOG$_TEST is snapshot log for master table MYTEST INSERT INTO MYTEST INT_TEST ( A B ) SELECT TEST A TEST B FROM MYTEINSERT /*+ APPEND */ INTO MYTEST INT_TEST ( A B ) SELECT TEST A TEST update MYTEST MLOG$_TEST set snaptime$$ = :   where snaptime$$ > to_date( SELECT DISTINCT LOG$ A FROM (SELECT MLOG$ A FROM MYTEST MLOG$_TEST MLOG$

   rows selected

  以上的语句我不再解释 整个内部过程我也不再解释 只是需要大家明白 其实这里的主要需要了解的是 就是把原表的数据给中间表复制了一份

  我们再检查所有对象

  SQL> select object_name object_type status object_id data_object_id from user_objects order by ;TEST                 TABLE              VALID                 AUDIT_TEST          TABLE              VALID                 TR_TEST              TRIGGER            VALID       PK_TEST_ID           INDEX              VALID                 INT_TEST             TABLE              VALID       INT_TEST             TABLE PARTITION    VALID                 INT_TEST             TABLE PARTITION    VALID                 INT_TEST             TABLE PARTITION    VALID                 INT_TEST             TABLE PARTITION    VALID                

  MLOG$_TEST          TABLE              VALID                 RUPD$_TEST          TABLE              VALID       rows selected

  发现比以前多了两个表对象

  这个就是该过程在执行后会产生两个表

  一个是永久表MLOG$_EMP 这个是一个TEST快照日志 记录TEST的在此之后 完成之前的DML语句

  另一个就是临时表RUPD$_EMP

  我们检查一下所有的表数据 已便与下面的结果对比

  SQL> select count(*) from test;        SQL> select count(*) from MLOG$_test;          SQL> select count(*) from rupd$_test;          SQL> select count(*) from int_test;              可以看到 表的数据已经转移过来

  SQL> select c from audit_test;              这里可以看到 触发器执行的还是原触发器

  这里给大家介绍两个表的来源

  SQL> select master log_table from user_mview_logs;TEST                           MLOG$_TEST

cha138/Article/program/Oracle/201311/17663

相关参考

知识大全 9i新特性之——在线表格重定义研究5

  所有的工作都准备完成我们执行重构完成的过程这个过程将执行表的交换  SQL>executeDBMS_REDEFINITIONFINISH_REDEF_TABLE(MYTESTTESTINT_

知识大全 Oracle 9i新特性研究系列之四 -- 延续性初始化参数文件

Oracle9i新特性研究系列之四--延续性初始化参数文件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一

知识大全 9i新特性之二安全篇

  这篇文章主要讲解应用程序客户端访问数据库的新特性有些地方理解不好  写得也不是很好请大家帮忙指正谢谢!  I安全认证拥有  解决了阻止未经认证的用户通过其他客户端访问数据的问题  在隐藏密码的实现

知识大全 Oracle9i自动PGA管理的新特性

Oracle9i自动PGA管理的新特性  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在Orac

知识大全 在Oracle10g和9i上一些新的特性的总结

在Oracle10g和9i上一些新的特性的总结  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!内部P

知识大全 oracle9i新特性概要

Oraclei电子商务平台       Oraclei通过提供旨在用于电子商务环境的一系列特定功能和产品束像Oraclei那样继续

知识大全 Oracle9i新特性-索引监视及注意事项[修正版]

Oracle9i新特性-索引监视及注意事项[修正版]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 可与Spreadsheets媲美的在线表格系统:EditGrid

可与Spreadsheets媲美的在线表格系统:EditGrid  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起

知识大全 Struts自定义标签--使用表格显示数据

Struts自定义标签--使用表格显示数据  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  app

什么是随机误差?并说明随机误差新定义和老定义的主要区别。

什么是随机误差?并说明随机误差新定义和老定义的主要区别。参考答案:随机误差是测量结果与在重复性条件下,对同一被测量进行无限多次测量所得结果的平均值之差。随机误差等于误差减去系统误差。因为测量进行有限次