表空间由于平时测试被扩大了,磁盘满了怎么办呢,两个办法,一个是收缩文件,一个办法是重建:
重建表空间比较容易,但是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;
重建表空间比较容易,但是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;