教程中国
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 >> 备份恢复 >> 9i新特性之——在线表格重定义研究5 RSS订阅
9i新特性之——在线表格重定义研究5
教程(视频,书籍)下载:  ASP.NET AutoCAD 数据库 C# ASP java photoshop 网页设计 delphi 3dmax Flash C++ VB 张孝祥 实例   更多请进入BIBIDU搜索
IT搜索引擎   

    9、所有的工作都准备完成,我们执行重构完成的过程,这个过程将执行表的交换。

SQL> execute DBMS_REDEFINITION.FINISH_REDEF_TABLE('MYTEST','TEST', 'INT_TEST');
PL/SQL procedure successfully completed

    我们还是往test表中插入数据,将有什么结果呢?

SQL> insert into test values(103,1);
1 row inserted

SQL> select count(*) from test;
        103

SQL> select count(*) from int_test;
        102

SQL> select * from mlog$_test;
select * from mlog$_test
ORA-00942: table or view does not exist

SQL> select * from rupd$_test;
select * from rupd$_test
ORA-00942: table or view does not exist

SQL> select c from audit_test;
104

    可以看到,这里的触发器执行的是以前在ini_test(中间表)上的触发器。上一次是102,这次是104

    这里发生了一个很有趣的转换,其实整个核心就是这里,ORACLE这里完成了表testint_test的表换名的工作,只是所有的约束、索引或触发器名称还是保持了原来的名称

SQL> select t.index_name,t.table_name from user_indexes t;
INT_TEST_PK                    TEST
PK_TEST_ID                     INT_TEST

SQL> select t.trigger_name,t.table_name from user_triggers t;
TR_INT_TEST                    TEST
TR_TEST                        INT_TEST

    我们检查对象权限

SQL> select * from USER_TAB_PRIVS_MADE;
SYSTEM  INT_TEST   MYTEST  SELECT   NO        NO
SYSTEM  INT_TEST   MYTEST  DELETE
SYSTEM  TEST       MYTEST     SELECT    NO        NO
SYSTEM  TEST       MYTEST     UPDATE

    这里可以看到,对于所有数据字典中的这两个名称,其实是完成了一个表的名字对换的过程,所以对于原表的特性,我们必须在新表中给予相同的特性,这样才能真正的转换到新的表。

    10、大功告成,我们可以删除中间表,并且有可能的话,修改约束,索引,触发器的名称与原来一致,如果你认为不重要,可以不予修改。

SQL> drop table int_test;
Table dropped

    如果是92以上版本,我们可以对索引,约束换名,但是以下版本,最好就是删除重新建立了

    如果运行了START_REDEF_TABLE 过程开始,我们就必须运行

    dbms_redefinition.abort_redef_table('MYTEST','TEST','INT_TEST');来终止整个重构过程,到这里,就算是完了。

SQL> select object_name, object_type, status, object_id, data_object_id from user_objects order by 4;

OBJECT_NAME                                                                      OBJECT_TYPE        STATUS  OBJECT_ID DATA_OBJECT_ID
-------------------------------------------------------------------------------- ------------------ ------- --------- --------------
AUDIT_TEST   TABLE               VALID       33579        33579
TEST          TABLE               VALID       33582
TEST          TABLE PARTITION    VALID       33583          33589
TEST          TABLE PARTITION    VALID       33584          33590
TEST          TABLE PARTITION    VALID       33585          33591
TEST          TABLE PARTITION    VALID       33586          33592

    6 rows selected

    看到这里,你也应该相信转换已经完成了吧,现在是分区表了。

    总结:

    本文不想从大的框架上来说明问题,而是用一些例子来说明问题

    这样可能会更让大家明白其中发生的一切。

    这里尽量的模拟了实际可能会遇到的情况。

    如约束,索引,触发器,对象权限,这个在重新定义的时候需要注意什么,需要我们手工完成什么

    外键约束这里没有举例说明,其实与普通约束一样,只是在中间表上建立外键约束的时候,最好先禁止掉(DISABLE),等完成之后再打开。

    其实主要过程就是完成了一个表的记录的拷贝(通过快照),最后在数据字典中换名的工作。

来源:upschool.com.cn
作者:
关键字:9i新特性之——,线表格重定义研究5
发表日期:2007-1-6 0:48:52

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

上一篇:9i新特性之——在线表格重定义研究4   下一篇:Oracle数据库备份技巧


2008-11-20 18:49:41
本文的相类似文章
  • 9i新特性之——在线表格重定义研究5
  • 9i新特性之——在线表格重定义研究4
  • 9i新特性之——在线表格重定义研究3
  • 9i新特性之——在线表格重定义研究2
  • 9i新特性之——在线表格重定义研究1
  • 在学习中进步 在进步中成长 教程中国相随您的成长之路
    华腾联合科技股份有限公司版权所有
    广告联系:Rosibo@163.com