清理用户表空间

表空间由于平时测试被扩大了,磁盘满了怎么办呢,两个办法,一个是收缩文件,一个办法是重建:
重建表空间比较容易,但是USERS表空间重建要麻烦一点,会了这个,其他的表空间都不是问题(SYSTEM表空间除外)




1、首先在系统中将USERS表空间清理出来,迁移走所有的表和索引,假设目的表空间为TEST,
   可以在SYS用户登录后运行如下SQL:
   Select 'alter table '||t.owner||'.'||t.table_name||' move tablespace TEST;' 
     From all_all_tables t where t.tablespace_name='USERS';


   Select  'alter index '||t.owner ||'.'|| index_name || ' rebuild tablespace test;' 
     From all_indexes t where t.tablespace_name ='USERS';


   运行生成的脚本,把所有对象迁移走。
回缩表空间:
实际上如果表空间的所有对象都迁移走了之后,我们可以使用命令直接回缩,命令如下:
alter database  datafile 'D:\DATA\orcl\USERS01.DBF' resize 1024m;


删除/重建USERS表空间:
2、关闭数据库
3、启动数据库到MOUNT状态:
   alter   database   datafile   'D:\DATA\orcl\USERS01.DBF '   offline   drop;
   然后启动数据库:
   alter   database   open;
   修改默认表空间:
   alter database default tablespace test;
   脱机表空间users:
   alter tablespace users online;
   删除表空间,顺便把文件删掉:
   DROP TABLESPACE users INCLUDING CONTENTS and datafiles;
   表空间删掉了;
   可能遇到的问题:
   系统提示:
第 1 行出现错误:
ORA-00604: 递归 SQL 级别 1 出现错误
ORA-02429: 无法删除用于强制唯一/主键的索引
问题在于没有清空users表空间的所有对象,检查一下第一步是否还有没移走的对象。
4、重建表空间:
   create tablespace users datafile 'D:\DATA\orcl\USERS01.DBF' size 2048M autoextend off;
   设置默认表空间:
   alter database default tablespace users;

猜你喜欢

转载自blog.csdn.net/qq_27917209/article/details/80059621