ITPUB??ì3
2010数据库技术大会
ITPUB论坛 » Oracle数据库管理 » 如何快速安全的更改表的owner


您有 1 条公共消息
  • 来自: 公共消息 标题: 3-5月ITPUB数据库 ... 内容: ITPUB与3月和5月分别安排了Oracle 11g DBA和Oracle性能优化培训,以及 ...

    标题: [精华] 如何快速安全的更改表的owner
      本主题由 rollingpig 于 2009-6-29 16:54 加入精华 
    离线 eagle_fan
    高级会员


    精华贴数 4
    个人空间 0
    技术积分 3042 (602)
    社区积分 392 (2016)
    注册日期 2003-10-6
    论坛徽章:11
    现任管理团队成员ITPUB元老会员2007贡献徽章会员2006贡献徽章CTO参与奖授权会员
    2010新春纪念徽章2010年世界杯参赛球队:阿尔及利亚生肖徽章2007版:蛇2008北京奥运纪念徽章:羽毛球ITPUB新首页上线纪念徽章 

    发表于 2009-6-27 11:39 
    如何快速安全的更改表的owner

    前两天有人问我这个问题,我说你先自己去搜索下答案吧。

    后来他说没有找到合适的方法,我搜索了一下,竟然发现没有人提到exchange partition的方法。

    exchange partition的方法是最安全,也是最快速的方法。

    所以这里写出这种方法供大家参考。

    假设有A,B两个用户,我们想把TEST表从A用户移到B用户。

    我们以非分区表作为例子:

        SQL> conn a/a
        Connected.
        SQL> create table test(x int);

        Table created.

        SQL> create index test_idx on test(x);

        Index created.

        SQL> insert into test select rownum from dual connect by level <10000;

        9999 rows created.

        SQL> commit;

        Commit complete.

        SQL> conn b/b
        Connected.

        SQL> create table temp(x int) partition by range (x)
        2 (partition part0 values less than (-1),
        3 partition part1 values less than (maxvalue));

        Table created.

        SQL> create table test(x int);

        Table created.

        SQL> create index temp_idx on temp(x) local;

        Index created.

        SQL> create index test_idx on test(x);

        Index created.

        SQL> alter table temp exchange partition part1 with table a.test including indexes without validation;

        Table altered.

        SQL> alter table temp exchange partition part1 with table test including indexes without validation;

        Table altered.

        SQL> select count(*) from a.test;

        COUNT(*)
        ———-
        0

        SQL> select count(*) from b.test;

        COUNT(*)
        ———-
        9999

    如果是分区表,操作过程如下:

        SQL> conn a/a
        Connected.

        SQL> create table test(x int) partition by range (x)
        2 (partition part0 values less than (100),
        3 partition part1 values less than (maxvalue));

        Table created.

        SQL> create index test_idx on test(x) local;

        Index created.

        SQL> insert into test select rownum from dual connect by level <1000;

        999 rows created.

        SQL> commit;

        Commit complete.

        SQL> conn b/b
        Connected.
        SQL> create table temp(x int);

        Table created.

        SQL> create index temp_idx on temp(x);

        Index created.

        SQL> create table test(x int) partition by range (x)
        2 (partition part0 values less than (100),
        3 partition part1 values less than (maxvalue));

        Table created.

        SQL> create index test_idx on test(x) local;

        Index created.

        SQL> select count(*) from a.test;

        COUNT(*)
        ———-
        999

        SQL> select count(*) from b.test;

        COUNT(*)
        ———-
        0

        SQL> alter table a.test exchange partition part0 with table temp including indexes without validation;

        Table altered.

        SQL> alter table test exchange partition part0 with table temp including indexes without validation;

        Table altered.

        SQL> select count(*) from a.test;

        COUNT(*)
        ———-
        900

        SQL> select count(*) from b.test;

        COUNT(*)
        ———-
        99

        SQL> alter table a.test exchange partition part1 with table temp including indexes without validation;

        Table altered.

        SQL> alter table test exchange partition part1 with table temp including indexes without validation;

        Table altered.

        SQL> select count(*) from a.test;

        COUNT(*)
        ———-
        0

        SQL> select count(*) from b.test;

        COUNT(*)
        ———-
        999

    复合分区表的情况大同小异,大家可以自己试验一下。


    更多文章请看:http://www.dbafan.com :)


    __________________
    只看该作者    顶部
    离线 fengjin821
    小 J
    不够资深


    来自 上海
    精华贴数 0
    个人空间 1241
    技术积分 1954 (1036)
    社区积分 6 (18163)
    注册日期 2008-5-17
    论坛徽章:9
    授权会员祖国60周年纪念徽章2009日食纪念数据库板块每日发贴之星数据库板块每日发贴之星数据库板块每日发贴之星
    数据库板块每日发贴之星数据库板块每日发贴之星数据库板块每日发贴之星   

    发表于 2009-6-27 11:41 
    先顶后看


    __________________
    I believe I can do it

    http://www.eygle.com
    只看该作者    顶部
    离线 fengjin821
    小 J
    不够资深


    来自 上海
    精华贴数 0
    个人空间 1241
    技术积分 1954 (1036)
    社区积分 6 (18163)
    注册日期 2008-5-17
    论坛徽章:9
    授权会员祖国60周年纪念徽章2009日食纪念数据库板块每日发贴之星数据库板块每日发贴之星数据库板块每日发贴之星
    数据库板块每日发贴之星数据库板块每日发贴之星数据库板块每日发贴之星   

    发表于 2009-6-27 11:49 
    有意思,O(∩_∩)O~


    __________________
    I believe I can do it

    http://www.eygle.com
    只看该作者    顶部
    离线 wangkxxe


    来自 BJ
    精华贴数 1
    个人空间 342
    技术积分 2004 (1007)
    社区积分 10669 (196)
    注册日期 2008-1-18
    论坛徽章:174
    红宝石紫水晶祖母绿萤石祖母绿海蓝宝石
    紫水晶蓝锆石海蓝宝石红宝石萤石红宝石

    发表于 2009-6-27 20:44 
    好贴!


    __________________

    机会总是青睐没准备的人,正如Garfield所说,来得快去的也快
    留下的却是一堆堆的遗恨!

    |找紅包|找找徽章|


    只看该作者    顶部
    离线 gvora
    高级会员


    来自 北京
    精华贴数 0
    个人空间 356
    技术积分 3009 (612)
    社区积分 22 (8988)
    注册日期 2008-8-16
    论坛徽章:14
    八级虎吧徽章CTO参与奖2010新春纪念徽章祖国60周年纪念徽章ITPUB8周年纪念徽章2009日食纪念
    数据库板块每日发贴之星数据库板块每日发贴之星数据库板块每日发贴之星2009新春纪念徽章数据库板块每日发贴之星数据库板块每日发贴之星

    发表于 2009-6-27 23:53 
    tom书上分区那一章有讲到


    __________________
    Keep studying.............
    精读Oracle Database Administrator's Guide中~~
    已读:Oracle Concepts
    -----------------------------------------------------------------
    BLOG:http://space.itpub.net/?15203236
    只看该作者    顶部
    离线 〇〇


    精华贴数 4
    个人空间 0
    技术积分 20749 (58)
    社区积分 3289 (549)
    注册日期 2008-1-16
    论坛徽章:66
    现任管理团队成员数据库板块每日发贴之星IT宝贝   
          

    发表于 2009-6-28 08:19 
    分区表不能直接与分区表交换所以
    如果对换分区表,用普通表过渡
    如果对换普通表,用分区表过渡


    只看该作者    顶部
    离线 brucewoo_cu



    精华贴数 0
    个人空间 0
    技术积分 2128 (927)
    社区积分 1651 (877)
    注册日期 2009-2-14
    论坛徽章:19
    NBA季后赛纪念徽章2010年世界杯参赛球队:朝鲜2010新春纪念徽章生肖徽章2007版:马ITPUB8周年纪念徽章祖国60周年纪念徽章
    2009日食纪念生肖徽章2007版:牛生肖徽章2007版:虎丹佛掘金  

    发表于 2009-6-28 12:28 
    学习一下.


    只看该作者    顶部
    离线 ZALBB


    精华贴数 8
    个人空间 0
    技术积分 40658 (23)
    社区积分 18413 (109)
    注册日期 2001-10-15
    论坛徽章:130
          
          

    发表于 2009-6-29 15:57 
    dbms_redefinition 包里带了对象属主,估计用这个包效率也不错.


    __________________
    对内,共匪什么都要,就是不要脸;对外,共匪什么都不要,就是要脸。
    只看该作者    顶部
    离线 yanggq
    版主


    精华贴数 1
    个人空间 126
    技术积分 36850 (28)
    社区积分 20296 (95)
    注册日期 2002-10-29
    论坛徽章:161
    现任管理团队成员参与WIN7挑战赛纪念2010年世界杯参赛球队:斯洛伐克2010新春纪念徽章2010年世界杯参赛球队:德国2010年世界杯参赛球队:南非
    2010新春纪念徽章2010年世界杯参赛球队:加纳生肖徽章2007版:鼠生肖徽章2007版:猴ITPUB8周年纪念徽章祖国60周年纪念徽章

    发表于 2009-6-29 16:01 
    Good


    __________________
    好好学习,天天向上------------------------------我也有itpub邮箱了耶"$我的id"@itpub.nethttp://www.dbanotes.net/EvDBT  ORAPERF ASKTOM TAHITI IXORAEygle
    只看该作者    顶部
    在线/呼叫 fanpig
    高级会员


    精华贴数 0
    个人空间 0
    技术积分 5364 (308)
    社区积分 14097 (143)
    注册日期 2005-8-12
    论坛徽章:275
    指数菠菜纪念章祖母绿海蓝宝石萤石红宝石紫水晶
    蓝锆石紫蜘蛛玉石琵琶九尾狐狸月度论坛发贴之星蓝色妖姬

    发表于 2009-6-29 16:49 
    顶一下


    只看该作者    顶部
    相关内容


    CopyRight 1999-2006 itpub.net All Right Reserved.
    北京皓辰网域网络信息技术有限公司. 版权所有
    E-mail:Webmaster@itpub.net
    网站律师 隐私政策 知识产权声明
    京ICP证:060528号 联系我们