oracle 10g online rededination--dbms_redefinition使用小记_part1

个人简介:
    8年oracle从业经验,具备丰富的oracle技能,目前在国内北京某专业oracle服务公司从事高级技术顾问。
   
   服务过的客户:
          中国电信
          中国移动
          中国联通
          中国电通
          国家电网
          四川达州商业银行
          湖南老百姓大药房
          山西省公安厅
          中国邮政
          北京302医院     
          河北廊坊新奥集团公司
  
 项目经验:
           中国电信3G项目AAA系统数据库部署及优化
           中国联通CRM数据库性能优化
           中国移动10086电商平台数据库部署及优化
           湖南老百姓大药房ERR数据库sql优化项目
           四川达州商业银行TCBS核心业务系统数据库模型设计和RAC部署及优化
           四川达州商业银行TCBS核心业务系统后端批处理存储过程功能模块编写及优化
           北京高铁信号监控系统RAC数据库部署及优化
           河南宇通客车数据库性能优化
           中国电信电商平台核心采购模块表模型设计及优化
           中国邮政储蓄系统数据库性能优化及sql优化
           北京302医院数据库迁移实施
           河北廊坊新奥data guard部署及优化
           山西公安厅身份证审计数据库系统故障评估
           
  
 联系方式:
           手机:18201115468
           qq   :   305076427
           qq微博: wisdomone1
           
           新浪微博:wisdomone9
          
           qq群:275813900    
          
           itpub博客名称:wisdomone1     http://blog.itpub.net/9240380/




测试目标:
本文主要测试如果某个分区指定表空间大小,导致在线重定义失败,后续如何处理的情况


测试环境:
SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bi
PL/SQL Release 10.2.0.5.0 - Production
CORE    10.2.0.5.0      Production
TNS for Linux: Version 10.2.0.5.0 - Production
NLSRTL Version 10.2.0.5.0 - Production


测试步骤:

  • 创建测试表
SQL> create table t_non_partition(card_id int,prov_code int,card_name int);

Table created.

  • 插入数据
SQL> insert into t_non_partition select level,mod(level,12),level from dual connect by level<=2000000;

2000000 rows created.

SQL> commit;

Commit complete.

SQL> insert into t_non_partition select level,mod(level,12),level from dual connect by level<=2000000;

2000000 rows created.

SQL> commit;

Commit complete.

  • 查看测试表的大小
SQL> col owner for a15
SQL> col segment_name for a30
SQL> set linesize 300
SQL> select owner,segment_name,bytes/1024/1024 from dba_segments where lower(segment_name)='t_non_partition';

OWNER           SEGMENT_NAME                   BYTES/1024/1024
--------------- ------------------------------ ---------------
TBS_11204       T_NON_PARTITION                             88

SQL> 


  • 查看基于列prov_code的数据分布情况
SQL> select prov_code,count(*) from tbs_11204.t_non_partition group by prov_code order by 1;

 PROV_CODE   COUNT(*)
---------- ----------
         0     333332
         1     333334
         2     333334
         3     333334
         4     333334
         5     333334
         6     333334
         7     333334
         8     333334
         9     333332
        10     333332

 PROV_CODE   COUNT(*)
---------- ----------
        11     333332

12 rows selected.

  • 测试表经在线重定义为分区表每个分区的大小(这里表的数据分布很均匀)
SQL> select prov_code,count(*)/4000000*88 as partition_mb from tbs_11204.t_non_partition group by prov_code order by 1;

 PROV_CODE PARTITION_MB
---------- ------------
         0     7.333304
         1     7.333348
         2     7.333348
         3     7.333348
         4     7.333348
         5     7.333348
         6     7.333348
         7     7.333348
         8     7.333348
         9     7.333304
        10     7.333304

 PROV_CODE PARTITION_MB
---------- ------------
        11     7.333304

12 rows selected.


  • 创建在线重定义所需的12个表空间,仅其中一个表空间要小于上述值
create tablespace tbs_p0  datafile '/home/ora10g/tbs_p0.dbf' size 6m autoextend off;
create tablespace tbs_p1  datafile '/home/ora10g/tbs_p1.dbf' size 8m autoextend off;
create tablespace tbs_p2  datafile '/home/ora10g/tbs_p2.dbf' size 8m autoextend off;
create tablespace tbs_p3  datafile '/home/ora10g/tbs_p3.dbf' size 8m autoextend off;
create tablespace tbs_p4  datafile '/home/ora10g/tbs_p4.dbf' size 8m autoextend off;
create tablespace tbs_p5  datafile '/home/ora10g/tbs_p5.dbf' size 8m autoextend off;
create tablespace tbs_p6  datafile '/home/ora10g/tbs_p6.dbf' size 8m autoextend off;
create tablespace tbs_p7  datafile '/home/ora10g/tbs_p7.dbf' size 8m autoextend off;
create tablespace tbs_p8  datafile '/home/ora10g/tbs_p8.dbf' size 8m autoextend off;
create tablespace tbs_p9  datafile '/home/ora10g/tbs_p9.dbf' size 8m autoextend off;
create tablespace tbs_p10  datafile '/home/ora10g/tbs_p10.dbf' size 8m autoextend off;
create tablespace tbs_p11  datafile '/home/ora10g/tbs_p11.dbf' size 8m autoextend off;


  • 确认上述12个表空间创建成功

SQL>  select tablespace_name,file_name,bytes/1024/1024 mb,autoextensible from dba_data_files where lower(tablespace_name) like 'tbs_p%';

TABLESPACE_NAME      FILE_NAME                                                            MB AUT
-------------------- ------------------------------------------------------------ ---------- ---
TBS_P0               /home/ora10g/tbs_p0.dbf                                               6 NO
TBS_P1               /home/ora10g/tbs_p1.dbf                                               8 NO
TBS_P2               /home/ora10g/tbs_p2.dbf                                               8 NO
TBS_P3               /home/ora10g/tbs_p3.dbf                                               8 NO
TBS_P4               /home/ora10g/tbs_p4.dbf                                               8 NO
TBS_P5               /home/ora10g/tbs_p5.dbf                                               8 NO
TBS_P6               /home/ora10g/tbs_p6.dbf                                               8 NO
TBS_P7               /home/ora10g/tbs_p7.dbf                                               8 NO
TBS_P8               /home/ora10g/tbs_p8.dbf                                               8 NO
TBS_P9               /home/ora10g/tbs_p9.dbf                                               8 NO
TBS_P10              /home/ora10g/tbs_p10.dbf                                              8 NO

TABLESPACE_NAME      FILE_NAME                                                            MB AUT
-------------------- ------------------------------------------------------------ ---------- ---
TBS_P11              /home/ora10g/tbs_p11.dbf                                              8 NO

12 rows selected.

  • 验证测试是否具备在线重定义条件
SQL> show user
USER is "SYS"
SQL> set serveroutput on
begin
dbms_redefinition.can_redef_table('tbs_11204','t_non_partition',dbms_redefinition.cons_use_rowid);
end;
SQL>   2    3    4  /

PL/SQL procedure successfully completed.

  • 创建和测试相同结构的临时表
SQL> create table t_non_partition_temp(card_id int,prov_code int,card_name int)
partition by list(prov_code)
  3  (
  4  partition p0   values(0)   tablespace tbs_p0,
  5  partition p1   values(1)   tablespace tbs_p1,
partition p2   values(2)   tablespace tbs_p2,
  7  partition p3   values(3)   tablespace tbs_p3,
  8  partition p4   values(4)   tablespace tbs_p4,
partition p5   values(5)   tablespace tbs_p5,
 10  partition p6   values(6)   tablespace tbs_p6,
 11  partition p7   values(7)   tablespace tbs_p7,
partition p8   values(8)   tablespace tbs_p8,
 13  partition p9   values(9)   tablespace tbs_p9,
 14  partition p10  values(10)  tablespace tbs_p10,
partition p11  values(11)   tablespace tbs_p11
 16  );

Table created.

  • 实施在线重定义
手工中断在线重定义
SQL> conn /as sysdba
Connected.
SQL> begin
  2  dbms_redefinition.start_redef_table('tbs_11204','t_non_partition','t_non_partition_temp','card_id card_id,prov_code prov_code,card_name card_name',dbms_redefinition.cons_use_rowid);
  3  end;
  4  /

begin
*
ERROR at line 1:
ORA-01013: user requested cancel of current operation
ORA-06512: at "SYS.DBMS_REDEFINITION", line 50
ORA-06512: at "SYS.DBMS_REDEFINITION", line 1343
ORA-06512: at line 2

  • 中止在线重定义
注:这个用时要比正常在线重定义报错,然后中断在线重定义时间要消耗更多一些
SQL> exec dbms_redefinition.abort_redef_table('tbs_11204','t_non_partition','t_non_partition_temp');

PL/SQL procedure successfully completed.


重施在线重定义
SQL> conn /as sysdba
Connected.
SQL> begin
dbms_redefinition.start_redef_table('tbs_11204','t_non_partition','t_non_partition_temp','card_id card_id,prov_code prov_code,card_name card_name',dbms_redefinition.cons_use_rowid);
  3  end;
  4  /
begin
*
ERROR at line 1:
ORA-12008: error in materialized view refresh path
ORA-01688: unable to extend table TBS_11204.T_NON_PARTITION_TEMP partition P0 by 128 in tablespace TBS_P0
ORA-06512: at "SYS.DBMS_REDEFINITION", line 50
ORA-06512: at "SYS.DBMS_REDEFINITION", line 1343
ORA-06512: at line 2


  • 中断在线重定义
SQL> exec dbms_redefinition.abort_redef_table('tbs_11204','t_non_partition','t_non_partition_temp');

PL/SQL procedure successfully completed.

  • 增加上述表空间tbs_p0的大小
SQL> alter database datafile 9 resize 8m;

Database altered.

SQL> select tablespace_name,file_name,file_id,bytes/1024/1024 mb,autoextensible from dba_data_files where lower(tablespace_name) like 'tbs_p%' and tablespace_name='TBS_P0';

TABLESPACE_NAME      FILE_NAME                                                       FILE_ID         MB AUT
-------------------- ------------------------------------------------------------ ---------- ---------- ---
TBS_P0               /home/ora10g/tbs_p0.dbf                                               9          8 NO

  • 重新开始在线重定义
SQL> begin
dbms_redefinition.start_redef_table('tbs_11204','t_non_partition','t_non_partition_temp','card_id card_id,prov_code prov_code,card_name card_name',dbms_redefinition.cons_use_rowid);
  3  end;
  4  /
begin
*
ERROR at line 1:
ORA-12008: error in materialized view refresh path
ORA-01688: unable to extend table TBS_11204.T_NON_PARTITION_TEMP partition P9 by 128 in tablespace TBS_P9
ORA-06512: at "SYS.DBMS_REDEFINITION", line 50
ORA-06512: at "SYS.DBMS_REDEFINITION", line 1343
ORA-06512: at line 2


  • tbs_p9表空间也报空间不能扩展错误
查询表空间tbs_p9的大小
SQL> select tablespace_name,file_name,file_id,bytes/1024/1024 mb,autoextensible from dba_data_files where lower(tablespace_name) like 'tbs_p%' and tablespace_name='TBS_P9';

TABLESPACE_NAME      FILE_NAME                                                       FILE_ID         MB AUT
-------------------- ------------------------------------------------------------ ---------- ---------- ---
TBS_P9               /home/ora10g/tbs_p9.dbf                                               18           8 NO

扩展表空间tbs_p9到10m
SQL> alter database datafile 18 resize 10m;

Database altered.

SQL> select tablespace_name,file_name,file_id,bytes/1024/1024 mb,autoextensible from dba_data_files where lower(tablespace_name) like 'tbs_p%' and tablespace_name='TBS_P9';

TABLESPACE_NAME      FILE_NAME                                                       FILE_ID         MB AUT
-------------------- ------------------------------------------------------------ ---------- ---------- ---
TBS_P9               /home/ora10g/tbs_p9.dbf                                              18         10 NO


  • 中断在线重定义
SQL> exec dbms_redefinition.abort_redef_table('tbs_11204','t_non_partition','t_non_partition_temp');

PL/SQL procedure successfully completed.


第3次开始在线重定义
SQL> begin
dbms_redefinition.start_redef_table('tbs_11204','t_non_partition','t_non_partition_temp','card_id card_id,prov_code prov_code,card_name card_name',dbms_redefinition.cons_use_rowid);
3  end;
4  /
begin
*
ERROR at line 1:
ORA-12008: error in materialized view refresh path
ORA-01688: unable to extend table TBS_11204.T_NON_PARTITION_TEMP partition P10 by 128 in tablespace TBS_P10
ORA-06512: at "SYS.DBMS_REDEFINITION", line 50
ORA-06512: at "SYS.DBMS_REDEFINITION", line 1343
ORA-06512: at line 2

悲催,又报错了

  • 中断在线重定义
SQL> exec dbms_redefinition.abort_redef_table('tbs_11204','t_non_partition','t_non_partition_temp');

PL/SQL procedure successfully completed.


  • 扩展表空间tbs_p10
SQL> select tablespace_name,file_name,file_id,bytes/1024/1024 mb,autoextensible from dba_data_files where lower(tablespace_name) like 'tbs_p%' and tablespace_name='TBS_P10';

TABLESPACE_NAME      FILE_NAME                                                       FILE_ID         MB AUT
-------------------- ------------------------------------------------------------ ---------- ---------- ---
TBS_P10              /home/ora10g/tbs_p10.dbf                                             19          8 NO

SQL> alter database datafile 19 resize 10m;

Database altered.

SQL> select tablespace_name,file_name,file_id,bytes/1024/1024 mb,autoextensible from dba_data_files where lower(tablespace_name) like 'tbs_p%' and tablespace_name='TBS_P10';

TABLESPACE_NAME      FILE_NAME                                                       FILE_ID         MB AUT
-------------------- ------------------------------------------------------------ ---------- ---------- ---
TBS_P10              /home/ora10g/tbs_p10.dbf                                             19         10 NO

SQL> 

  • 第4次开始在线重定义
SQL> begin
dbms_redefinition.start_redef_table('tbs_11204','t_non_partition','t_non_partition_temp','card_id card_id,prov_code prov_code,card_name card_name',dbms_redefinition.cons_use_rowid);
  3  end;
  4  /
begin
*
ERROR at line 1:
ORA-12008: error in materialized view refresh path
ORA-01688: unable to extend table TBS_11204.T_NON_PARTITION_TEMP partition P11 by 128 in tablespace TBS_P11
ORA-06512: at "SYS.DBMS_REDEFINITION", line 50
ORA-06512: at "SYS.DBMS_REDEFINITION", line 1343
ORA-06512: at line 2

哈哈,tbs_p11表空间亦报错了


  • 中断在线重定义
SQL>  exec dbms_redefinition.abort_redef_table('tbs_11204','t_non_partition','t_non_partition_temp');

PL/SQL procedure successfully completed.

  • 扩展表空间tbs_p11
SQL> select tablespace_name,file_name,file_id,bytes/1024/1024 mb,autoextensible from dba_data_files where lower(tablespace_name) like 'tbs_p%' and tablespace_name='TBS_P11';

TABLESPACE_NAME      FILE_NAME                                                       FILE_ID         MB AUT
-------------------- ------------------------------------------------------------ ---------- ---------- ---
TBS_P11              /home/ora10g/tbs_p11.dbf                                             20          8 NO

SQL> alter database datafile 20 resize 10m;

Database altered.

SQL> select tablespace_name,file_name,file_id,bytes/1024/1024 mb,autoextensible from dba_data_files where lower(tablespace_name) like 'tbs_p%' and tablespace_name='TBS_P11';

TABLESPACE_NAME      FILE_NAME                                                       FILE_ID         MB AUT
-------------------- ------------------------------------------------------------ ---------- ---------- ---
TBS_P11              /home/ora10g/tbs_p11.dbf                                             20         10 NO

  • 不知次数开始在线重义
SQL> begin
dbms_redefinition.start_redef_table('tbs_11204','t_non_partition','t_non_partition_temp','card_id card_id,prov_code prov_code,card_name card_name',dbms_redefinition.cons_use_rowid);
  3  end;
  4  /
begin
*
ERROR at line 1:
ORA-12008: error in materialized view refresh path
ORA-01688: unable to extend table TBS_11204.T_NON_PARTITION_TEMP partition P7 by 128 in tablespace TBS_P7
ORA-06512: at "SYS.DBMS_REDEFINITION", line 50
ORA-06512: at "SYS.DBMS_REDEFINITION", line 1343
ORA-06512: at line 2

恶梦来袭,tbs_p7报错

  • 中断在线重定义
SQL> exec dbms_redefinition.abort_redef_table('tbs_11204','t_non_partition','t_non_partition_temp');

PL/SQL procedure successfully completed.


扩展表空间tbs_p7
SQL> alter database datafile 16 resize 10m;

Database altered.

  • 烦烦开始在线重定义
SQL> begin
dbms_redefinition.start_redef_table('tbs_11204','t_non_partition','t_non_partition_temp','card_id card_id,prov_code prov_code,card_name card_name',dbms_redefinition.cons_use_rowid);
  3  end;
  4  /
begin
*
ERROR at line 1:
ORA-12008: error in materialized view refresh path
ORA-01688: unable to extend table TBS_11204.T_NON_PARTITION_TEMP partition P1 by 128 in tablespace TBS_P1
ORA-06512: at "SYS.DBMS_REDEFINITION", line 50
ORA-06512: at "SYS.DBMS_REDEFINITION", line 1343
ORA-06512: at line 2

吼吼,tbs_p1报错

  • 中断在线重定义
SQL> exec dbms_redefinition.abort_redef_table('tbs_11204','t_non_partition','t_non_partition_temp');

PL/SQL procedure successfully completed.

  • 扩展表空间tbs_p1
SQL> alter database datafile 10 resize 10m;

Database altered.


  • 与妖魔一战,开始在线重定义
SQL> begin
dbms_redefinition.start_redef_table('tbs_11204','t_non_partition','t_non_partition_temp','card_id card_id,prov_code prov_code,card_name card_name',dbms_redefinition.cons_use_rowid);
  3  end;
  4  /
begin
*
ERROR at line 1:
ORA-12008: error in materialized view refresh path
ORA-01688: unable to extend table TBS_11204.T_NON_PARTITION_TEMP partition P2 by 128 in tablespace TBS_P2
ORA-06512: at "SYS.DBMS_REDEFINITION", line 50
ORA-06512: at "SYS.DBMS_REDEFINITION", line 1343
ORA-06512: at line 2

小日本的哟,太可憎了,表空间tbs_p2报错

  • 一劳永逸,把上述未报过错的表空间全部加大
SQL> select tablespace_name,file_name,file_id,bytes/1024/1024 mb,autoextensible from dba_data_files where lower(tablespace_name) like 'tbs_p%' and lower(tablespace_name) in ('tbs_p2','tbs_p3','tbs_p4','tbs_p5','tbs_p6','tbs_p8');

TABLESPACE_NAME      FILE_NAME                                                       FILE_ID         MB AUT
-------------------- ------------------------------------------------------------ ---------- ---------- ---
TBS_P2               /home/ora10g/tbs_p2.dbf                                              11          8 NO
TBS_P3               /home/ora10g/tbs_p3.dbf                                              12          8 NO
TBS_P4               /home/ora10g/tbs_p4.dbf                                              13          8 NO
TBS_P5               /home/ora10g/tbs_p5.dbf                                              14          8 NO
TBS_P6               /home/ora10g/tbs_p6.dbf                                              15          8 NO
TBS_P8               /home/ora10g/tbs_p8.dbf                                              17          8 NO
SQL> alter database datafile 11 resize 10m;

Database altered.

SQL> alter database datafile 12 resize 10m;

Database altered.

SQL> alter database datafile 13 resize 10m;

Database altered.

SQL> alter database datafile 14 resize 10m;

Database altered.

SQL> alter database datafile 15 resize 10m;

Database altered.


SQL> alter database datafile 17 resize 10m;

Database altered.



  • 中断在线重定义
SQL> exec dbms_redefinition.abort_redef_table('tbs_11204','t_non_partition','t_non_partition_temp');

PL/SQL procedure successfully completed.


  • 一线希望开始重线重定义
SQL> begin
dbms_redefinition.start_redef_table('tbs_11204','t_non_partition','t_non_partition_temp','card_id card_id,prov_code prov_code,card_name card_name',dbms_redefinition.cons_use_rowid);
  3  end;
  4  /
begin
*
ERROR at line 1:
ORA-12008: error in materialized view refresh path
ORA-01688: unable to extend table TBS_11204.T_NON_PARTITION_TEMP partition P2 by 128 in tablespace TBS_P2
ORA-06512: at "SYS.DBMS_REDEFINITION", line 50
ORA-06512: at "SYS.DBMS_REDEFINITION", line 1343
ORA-06512: at line 2

  • 星点的希望也破灭了,tbs_p2报错,杀一儆百,所有表空间加大1倍空间

SQL> alter database datafile 11 resize 20m;

Database altered.



SQL> alter database datafile 12 resize 20m;

Database altered.

SQL> alter database datafile 13 resize 20m;

Database altered.

SQL> alter database datafile 14 resize 20m;

Database altered.

SQL> alter database datafile 15 resize 20m;

Database altered.

SQL> alter database datafile 17 resize 20m;

Database altered.


SQL> alter database datafile 9 resize 20m;

Database altered.

SQL> alter database datafile 10 resize 24m;

Database altered.

SQL> alter database datafile 16 resize 24m;

Database altered.

SQL> alter database datafile 18 resize 24m;

Database altered.

SQL> alter database datafile 19 resize 24m;

Database altered.

SQL> alter database datafile 20 resize 24m;

Database altered. 

查询所有表空间的现在大小,全是在线重定义表各个分区数据量的2倍
SQL> select tablespace_name,file_name,file_id,bytes/1024/1024 mb,autoextensible from dba_data_files where lower(tablespace_name) like 'tbs_p%';

TABLESPACE_NAME      FILE_NAME                                                       FILE_ID         MB AUT
-------------------- ------------------------------------------------------------ ---------- ---------- ---
TBS_P0               /home/ora10g/tbs_p0.dbf                                               9         20 NO
TBS_P1               /home/ora10g/tbs_p1.dbf                                              10         24 NO
TBS_P2               /home/ora10g/tbs_p2.dbf                                              11         20 NO
TBS_P3               /home/ora10g/tbs_p3.dbf                                              12         20 NO
TBS_P4               /home/ora10g/tbs_p4.dbf                                              13         20 NO
TBS_P5               /home/ora10g/tbs_p5.dbf                                              14         20 NO
TBS_P6               /home/ora10g/tbs_p6.dbf                                              15         20 NO
TBS_P7               /home/ora10g/tbs_p7.dbf                                              16         24 NO
TBS_P8               /home/ora10g/tbs_p8.dbf                                              17         20 NO
TBS_P9               /home/ora10g/tbs_p9.dbf                                              18         24 NO
TBS_P10              /home/ora10g/tbs_p10.dbf                                             19         24 NO

TABLESPACE_NAME      FILE_NAME                                                       FILE_ID         MB AUT
-------------------- ------------------------------------------------------------ ---------- ---------- ---
TBS_P11              /home/ora10g/tbs_p11.dbf                                             20         24 NO

12 rows selected.
  • 中断在线重定义
SQL> exec dbms_redefinition.abort_redef_table('tbs_11204','t_non_partition','t_non_partition_temp');

PL/SQL procedure successfully completed.

破斧沉舟开始在线重定义
SQL> begin
dbms_redefinition.start_redef_table('tbs_11204','t_non_partition','t_non_partition_temp','card_id card_id,prov_code prov_code,card_name card_name',dbms_redefinition.cons_use_rowid);
  3  end;
  4 
  5  /

PL/SQL procedure successfully completed.
哈哈,终于拔云见日了


  • 同步在线重定义表,可选项
SQL> begin
dbms_redefinition.sync_interim_table('tbs_11204','t_non_partition','t_non_partition_temp');
  3  end;
  4  /

PL/SQL procedure successfully completed.

  • 完成在线重定义
SQL> begin
dbms_redefinition.finish_redef_table('tbs_11204','t_non_partition','t_non_partition_temp');
  3  end;
  4  /

PL/SQL procedure successfully completed.

  • 确认在线重定义表转化成功
SQL> select object_name,base_table_name,ddl_txt from dba_redefinition_errors;

no rows selected

验证转化后表各分区存储到对应的表空间
SQL> select table_owner,table_name,partition_name,tablespace_name,num_rows,to_char(last_analyzed,'yyyy-mm-dd hh24:mi:ss') from dba_tab_partitions where lower(table_name)='t_non_partition' order by 3;

TABLE_OWNER                    TABLE_NAME                     PARTITION_NAME                 TABLESPACE_NAME        NUM_ROWS TO_CHAR(LAST_ANALYZ
------------------------------ ------------------------------ ------------------------------ -------------------- ---------- -------------------
TBS_11204                      T_NON_PARTITION                P0                             TBS_P0
TBS_11204                      T_NON_PARTITION                P1                             TBS_P1
TBS_11204                      T_NON_PARTITION                P10                            TBS_P10
TBS_11204                      T_NON_PARTITION                P11                            TBS_P11
TBS_11204                      T_NON_PARTITION                P2                             TBS_P2
TBS_11204                      T_NON_PARTITION                P3                             TBS_P3
TBS_11204                      T_NON_PARTITION                P4                             TBS_P4
TBS_11204                      T_NON_PARTITION                P5                             TBS_P5
TBS_11204                      T_NON_PARTITION                P6                             TBS_P6
TBS_11204                      T_NON_PARTITION                P7                             TBS_P7
TBS_11204                      T_NON_PARTITION                P8                             TBS_P8

TABLE_OWNER                    TABLE_NAME                     PARTITION_NAME                 TABLESPACE_NAME        NUM_ROWS TO_CHAR(LAST_ANALYZ
------------------------------ ------------------------------ ------------------------------ -------------------- ---------- -------------------
TBS_11204                      T_NON_PARTITION                P9                             TBS_P9

12 rows selected.

各分区大小为14M,而在之前未进行在线重定义前,列prov_code对应的数据大小为7m,可见增加了1倍左右
SQL> select owner,segment_name,partition_name,segment_type,tablespace_name,bytes/1024/1024 from dba_segments where lower(segment_name)='t_non_partition' order by 3;

OWNER           SEGMENT_NAME                   PARTITION_NAME                 SEGMENT_TYPE       TABLESPACE_NAME      BYTES/1024/1024
--------------- ------------------------------ ------------------------------ ------------------ -------------------- ---------------
TBS_11204       T_NON_PARTITION                P0                             TABLE PARTITION    TBS_P0                            14
TBS_11204       T_NON_PARTITION                P1                             TABLE PARTITION    TBS_P1                            14
TBS_11204       T_NON_PARTITION                P10                            TABLE PARTITION    TBS_P10                           14
TBS_11204       T_NON_PARTITION                P11                            TABLE PARTITION    TBS_P11                           14
TBS_11204       T_NON_PARTITION                P2                             TABLE PARTITION    TBS_P2                            14
TBS_11204       T_NON_PARTITION                P3                             TABLE PARTITION    TBS_P3                            14
TBS_11204       T_NON_PARTITION                P4                             TABLE PARTITION    TBS_P4                            14
TBS_11204       T_NON_PARTITION                P5                             TABLE PARTITION    TBS_P5                            14
TBS_11204       T_NON_PARTITION                P6                             TABLE PARTITION    TBS_P6                            14
TBS_11204       T_NON_PARTITION                P7                             TABLE PARTITION    TBS_P7                            14
TBS_11204       T_NON_PARTITION                P8                             TABLE PARTITION    TBS_P8                            14

OWNER           SEGMENT_NAME                   PARTITION_NAME                 SEGMENT_TYPE       TABLESPACE_NAME      BYTES/1024/1024
--------------- ------------------------------ ------------------------------ ------------------ -------------------- ---------------
TBS_11204       T_NON_PARTITION                P9                             TABLE PARTITION    TBS_P9                            14

12 rows selected.

各分区累计大小为168M
SQL> select sum(bytes/1024/1024) mb from dba_segments where lower(segment_name)='t_non_partition';

        MB
----------
       168



小结:
1,在线重定义如果中途失败,可以通过dbms_redefinition.abort_redef_table来中断在线重定义过程
这里分2种情况,各为在线重定义出现异常中止执行和手工中断在线重定义操作

2,在线重定义,至少需要2倍于源表的可用空间,不然会报表空间不能扩展的错误

3,在线重定义之后,表的统计信息没有收集,所以要马上手工采集表的统计信息,以防SQL执行计划走偏 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9240380/viewspace-1250752/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/9240380/viewspace-1250752/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值