一次业务数据库回收表空间文件大小经历

背景: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;

原创文章,可以转载,请注明出处!否则我也没办法


阅读更多
文章标签: oracle 表空间
个人分类: 数据库管理
上一篇关于启动设置CMD的背景颜色
下一篇Redhat和Centos查看发行版本号和内核版本号
想对作者说点什么? 我来说一句

ORACLE表空间回收脚本

2009年02月25日 2KB 下载

没有更多推荐了,返回首页

关闭
关闭