oracle字符分区表,oracle 分区表move和包含分区表的lob move

建立含有lob字段的表时,oracle会自动为lob字段建立两个单独的segment,一个用来存放lob数据,另一个用来存放lob索引,并且它们都会存储在对应表指定的表空间中。但是当我们用alter table tb_name move tablespace tbs_name;对表做表空间之间迁移时只能迁移非lob字段以外的segment,而如果要在移动表数据同时移动lob相关字段,就必需用如下的含有特殊参数据的文句来完成:

alter table tb_name move tablespace tbs_name lob (column_lob1,column_lob2) store as(tablespace tbs_name);

表包含lob字段,需要收回空间,首先move表,move表,move完表后lob的空间并不会释放,还需要针对lob字段进行move。

非分区表lob的move:

alter table  T_SEND_LOG move  lob(MESSAGE) store as (tablespace DATALOB);

分区表lob的move:

alter table  T_SEND_LOG move  partition p2018 lob(MESSAGE) store as (tablespace DATALOB);

分区表move:

alter table  T_SEND_LOG move partition p2018;

注意:move表后记得rebuild索引。

批量生成语句参考:

针对表空间:

select 'alter table  ' || a.owner || '.' || a.table_name || ' move lob(' ||

a.COLUMN_NAME || ') store as (tablespace DATALOB);'

from dba_lobs a, DBA_SEGMENTS b

where a.owner in ('APP')

and a.OWNER = b.OWNER

and a.SEGMENT_NAME = b.SEGMENT_NAME

and b.TABLESPACE_NAME != 'PACSLOB';

针对表:

select 'alter table  ' || a.owner || '.' || a.table_name || ' move lob(' ||

a.COLUMN_NAME || ') store as (tablespace DATALOB);'

from dba_lobs a, DBA_SEGMENTS b

where a.owner in ('APP')

and a.OWNER = b.OWNER

and a.SEGMENT_NAME = b.SEGMENT_NAME

and a.TABLE_NAME = 'T_SEND_LOG';

=======================

=======================

ORA-14511: cannot perform operation on a partitioned object

解决:如下的sql就可以生成成百上千条语句来完成partition级别的move操作

select 'alter table ' || table_name || ' move partition ' || partition_name ||' tablespace users;'

from dba_tab_partitions

where table_name in('&table_name') and table_owner='&table_owner';

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值