背景:oracle业务数据库,单实例的单机环境
场景:由于前期业务数据量掌握不准确,导致预估表空间占用过大,分配表空间总大小过大,导致磁盘空间占用紧张。也给平时的冷备维护带来了很大不利。
回收表空间数据文件大小整体思路
1、新建接受move的表空间
2、查询被move的所有表和索引名称
3、使用alter move所有表和索引到新表空间
4、检查
5、删除旧表空间
6、重命名新表空间为就表空间
7、设置用户默认表空间
下面是整个move操作的详细过程
1.创建一个新的合适大小的表空间,命名为TS_A(实际业务场景中的数据库名称不是这个,这里都是用测试环境代替。重点看思路)
sql>create tablespace TS_A logging datafile '数据文件存放路径/表空间文件名称.dbf' size 合适大小M reuse autoextend on next 10M maxsize unlimited extent management local segment space management auto;
2.查询业务库下面所有的表名称
用dba用户查询
sql>select table_name from dba_tables where owner='实际业务库用户';
3.查询业务库下面的所有索引名称,要将索引也全部
用dba用户查询
sql>select index_name from dba_indexes from dba_indexes where owner='业务库用户';
4、授权用户
sql>alter user 业务库用户 quota unlimited on TS_A;
5、移动表
将查询到的所有表使用下面的sql语句全部移入新表空间
sql>alter table 表名称 move tablespace TS_A;
6、移索引
将查询到的所有索引全部在新表空间中重建
sql>alter index 索引名 rebuild tablespace TS_A;
7、验证移动情况
sql>select table_name from dba_tables where tablespace_name='TS_A';
sql>sql>select index_name from dba_indexes where tablespace_name='TS_A';
8、删除旧表空间
drop tablespace 旧表空间名称 including contents and datafiles;
9、将新表空间重命名为原表空间名称
sql>alter tablespace 新表空间名称 rename to 原表空间名称
10、设置用户默认表空间
sql>alter user 用户名 default tablespace 原表空间名称 temporary tablespace TEMP;
原创文章,可以转载,请注明出处!否则我也没办法