在表空间之间移动数据对象

本文详细介绍了如何在Oracle数据库的表空间之间移动包括表、索引、LOB段等不同类型的数据对象,并提供了批量生成移动脚本的方法,以及一些查询表空间中数据对象信息的实用语句。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

在表空间之间移动数据对象  

一、基础脚本

在oracle数据库的表空间之间移动对象会涉及多种类型的数据对象
移动表:

alter table t_a move tablespace tbs_a;

移动索引:

alter index i_a rebuild tablespace tbs_a;

移动LOBSEGMENT:

alter table t_a move lob(colume_a) store as (tablespace tbs_a);

根据实际检验LOBINDEX会随着相应的LOBSEGMENT自动移动
移动表的同时移动LOBSEGMENT:

alter table t_a move tablespace tbs_a lob(colume_a) store as (tablespace tbs_a);

如果表中有字段为LONG类型的,那么该表不能按照上面的方法移动,只能使用EXP/IMP来移动了

 

二、批量生成移动脚本

如果有大量的对象需要移动,一行一行写脚本就很不现实,可以使用下面的脚本来生成移动的脚本

--生成LOBSEGMENT的移动语句,目的是把用户USR_A的LOBSEGMENT对象从表空间TBS_OLD移动到TBS_NEW,所生成的语句执行后,相应的LOBINDEX对象也会跟着移动到TBS_NEW

select 'alter table ' || owner || '.' || table_name || ' move LOB(' || column_name || ') store as (tablespace TBS_NEW);' from dba_lobs where owner = 'USR_A' and tablespace_name='TBS_OLD';


--如要把LOB段所在的表也随同LOB段移动到新的表空间,可使用以下语句来生成脚本

select 'alter table ' || owner || '.' || table_name || ' move tablespace TBS_NEW LOB(' || column_name || ') store as (tablespace TBS_NEW);' from dba_lobs where owner = 'USR_A' and tablespace_name='TBS_OLD';


--生成移动USR_A的表和索引的脚本,排序是为了移动表的脚本在前,移动索引的脚本在后,按序执行即可;否则先移索引后移表会导致索引失效

select 'alter ' || segment_type || ' USR_A.' || segment_name || ' ' || decode(segment_type,'TABLE','move','INDEX','rebuild') || ' ' || 'tablespace TBS_NEW;' from dba_segments where owner = 'USR_A' and tablespace_name='TBS_OLD' and segment_type in ('TABLE','INDEX') order by segment_type desc;


--可以用以下语句检查dba_indexes数据字典表中的失效的索引信息

select * from dba_indexes where status = 'UNUSABLE';


三、一些可能会用到的查询语句

另外还有一些可能会用到的查询表空间中数据对象信息的语句

--统计用户USR_A的数据对象数

select count(*) from dba_segments where owner='USR_A';


--查看用户USR_A的数据对象所分布的表空间名

select distinct tablespace_name from dba_segments where owner='USR_A';


--查看用户USR_A的LOB段和LOB索引对象

select * from dba_segments where owner='USR_A' and segment_type in ('LOBSEGMENT','LOBINDEX');


--分表空间、段类型统计用户USR_A的数据对象数

select tablespace_name,segment_type,count(*) from dba_segments where owner='USR_A';
group by tablespace_name,segment_type;
order by tablespace_name,segment_type;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值