oracle表空间对象迁移到其他表空间

2023-12-23 10:32:40

oracle数据库的磁盘空间满了,除了简单粗暴的增加磁盘空间外,还可以缩小表空间的datafile,因为正常业务运行中,表数据的删除和增加,会造成表空间里面里面有很多空的地方。方案有很多种,我这里简单介绍一下,将表空间里面的对象全部迁移到另外一个表空间的方法,迁移完成后,再resize datafile。

1,迁移表,生成迁移语句

select 'alter table '||a.owner||'.'||a.table_name||' move tablespace TEST_DATA;' from dba_tables a where tablespace_name = 'TEST_TBS'

生成的参考语句:

alter table TEST.T_CUST_ATTR_DTL move tablespace TEST_DATA;

2,迁移索引,生成索引重建语句

select 'alter index '||a.OWNER||'.'||a.index_name||' rebuild tablespace TEST_DATA;' from dba_indexes a where tablespace_name = 'TEST_TBS'

生成的参考语句:

alter index TEST.IDX_IVTAR_M_INVEST_USERID rebuild tablespace TEST_DATA;

3,迁移Clob字段,生成clob字段迁移的语句

select 'alter table ' || a.OWNER || '.' || a.table_name || ' move lob(' || a.column_name || ') store as (tablespace TEST_DATA);' from dba_lobs a where tablespace_name = 'TEST_TBS'

生成的参考语句:

alter table TEST.t_mkt_cust_homepage_buy move lob(info_json) store as (tablespace TEST_DATA);

4,迁移分区表,生成迁移分区表的语句

select 'alter table '|| a.table_owner || '.' || a.table_name ||' move partition '||a.partition_name||' tablespace TEST_DATA;' from dba_tab_partitions a where tablespace_name = 'TEST_TBS'

生成的参考语句:

alter table prod.T_S01_DTY_DTY_CUSTOMER_TAG move partition P_TAGID_66 tablespace TEST_DATA;

5,干掉segment,一般是一些垃圾表之类的,直接清理就行了

select owner, segment_type, segment_name from dba_segments where tablespace_name = 'TEST_TBS'

如果多的话,也可以按照上面的方式生成批量执行的语句。

生成的参考语句:

drop table "BIN$dVKhHwBrXyXgU3l9EKyU5A==$0" purge;

文章来源:https://blog.csdn.net/shuhui018125/article/details/135164756
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。