TABLESPACE_NAME FILE_ID FILE_NAME TOTAL_SPACE
SYSTEM 1 D:\ORACLE\ORADATA\MYORACLE\MYORACLE\SYSTEM01.DBF 3930
UNDOTBS1 2 D:\ORACLE\ORADATA\MYORACLE\MYORACLE\UNDOTBS01.DBF 250
SYSAUX 3 D:\ORACLE\ORADATA\MYORACLE\MYORACLE\SYSAUX01.DBF 160
USERS 4 D:\ORACLE\ORADATA\MYORACLE\MYORACLE\USERS01.DBF 5
select tablespace_name, file_id, file_name, round (bytes /(1024 *1024 ),0 ) total_space
from dba_data_files
order by tablespace_name;
TABLESPACE_NAME FILE_ID FILE_NAME TOTAL_SPACE
SYSTEM 1 D:\ORACLE\ORADATA\MYORACLE\MYORACLE\SYSTEM01.DBF 3930
UNDOTBS1 2 D:\ORACLE\ORADATA\MYORACLE\MYORACLE\UNDOTBS01.DBF 250
SYSAUX 3 D:\ORACLE\ORADATA\MYORACLE\MYORACLE\SYSAUX01.DBF 160
USERS 4 D:\ORACLE\ORADATA\MYORACLE\MYORACLE\USERS01.DBF 5
当然得一样,如果不一样,那不逆天了。
3.下面我得想办法找回了,回来DBA最爱的命令行,sqlplus下
在回到sqlplus之前,我看看了,truncate这张表之后,system表空间的这个数据文件到底是用了多少空间,虽说屌丝的空间很重要,但是别个已经用了的你不能硬抢过来啊,更何况是system表空间呢,屌丝也不能不讲理吧。
来看看system表空间的数据文件实际用了多少:
select file_name, a.file_id, sum (a.bytes )/1024 /1024 as MB
from dba_extents a, dba_data_files b
where a.file_id= b.file_id
group by file_name, a.file_id;
FILE_NAME FILE_ID MB
D:\ORACLE\ORADATA\MYORACLE\MYORACLE\SYSTEM01.DBF 1 726.0625
D:\ORACLE\ORADATA\MYORACLE\MYORACLE\UNDOTBS01.DBF 2 247.9375
D:\ORACLE\ORADATA\MYORACLE\MYORACLE\SYSAUX01.DBF 3 144.0625
D:\ORACLE\ORADATA\MYORACLE\MYORACLE\USERS01.DBF 4 0.4375
还好,truncate了之后只用了726M了,这个勉强还是能够忍受。
回到sqlplus下,将这个system表空间的这个数据文件的大小重置
SQL> ALTER DATABASE DATAFILE 'D:\ORACLE\ORADATA\MYORACLE\MYORACLE\SYSTEM01.DBF'
RESIZE 1000;
ALTER DATABASE DATAFILE 'D:\ORACLE\ORADATA\MYORACLE\MYORACLE\SYSTEM01.DBF' RESIZ
E 1000
*
第 1 行出现错误:
ORA-03214: 指定的文件大小小于所需的最小值
SQL> ALTER DATABASE DATAFILE 1 RESIZE 3300;
ALTER DATABASE DATAFILE 1 RESIZE 3300
*
第 1 行出现错误:
ORA-03214: 指定的文件大小小于所需的最小值
--我戳,不能改小,正在我倍感失落的时候,一个想法冒了出来,是不是一定要shutdown一下才能将system表空间的数据文件由大改小呢,由大改更大肯定是没有问题的,我不试了。
关闭数据库,反正是自己的测试库,shutdwon不用打报告。
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 612368384 bytes
Fixed Size 1292036 bytes
Variable Size 188745980 bytes
Database Buffers 415236096 bytes
Redo Buffers 7094272 bytes
数据库装载完毕。
数据库已经打开。
再试试:改为800M
SQL> ALTER DATABASE DATAFILE 1 RESIZE 800m;
数据库已更改。
上面的1就是我那个数据文件的file_id嘛,菜鸟都知道,空间也找回来了,直接进去数据文件所在的文件夹里面查看数据文件的大小,确实是800M,Oracle没有骗我。
再查查实际用了多少空间
select file_name, a.file_id, sum (a.bytes )/1024 /1024 as MB
from dba_extents a, dba_data_files b
where a.file_id= b.file_id
group by file_name, a.file_id;
FILE_NAME FILE_ID MB
D:\ORACLE\ORADATA\MYORACLE\MYORACLE\SYSTEM01.DBF 1 726.0625
D:\ORACLE\ORADATA\MYORACLE\MYORACLE\UNDOTBS01.DBF 2 247.9375
D:\ORACLE\ORADATA\MYORACLE\MYORACLE\SYSAUX01.DBF 3 144.0625
D:\ORACLE\ORADATA\MYORACLE\MYORACLE\USERS01.DBF 4 0.4375
很显然嘛,虽然屌丝给了我800M的空间,但是我实实在在只用了726啊!!