SYSTEM01.DBF是系统表空间,主要存放的是数据字典。一般不会超过 200M, 我想肯定是有其他用户对象建在这个表空间了。 查询一下rbs,temp,user,index,tools这几个基本的表空间文件有多大, 然后再查询用户自己建立的表空间有多大. 用下面的代码检测每个表空间的总容量和剩余容量: sql> set serveroutput on; sql> declare v_total_space number(20); v_free_space number(20); begin for tablespace_rec in (select tablespace_name from dba_tablespaces) loop select sum(bytes) into v_total_space from dba_data_files where TABLESPACE_NAME = tablespace_rec.tablespace_name;
select sum(bytes) into v_free_space from dba_free_space where TABLESPACE_NAME = tablespace_rec.tablespace_name; dbms_output.put_line('[' || tablespace_rec.tablespace_name || ']' || ' total free space: ' || v_free_space || 'Bytes' ); end loop; end; /
代码执行结果如下,好像系统的部分都很少使用,那怎么办呢? [SYSTEM] total space: 297795584Bytes [SYSTEM] total free space: 4374528Bytes [RBS] total space: 52428800Bytes [RBS] total free space: 30400512Bytes [USERS] total space: 20971520Bytes [USERS] total free space: 20963328Bytes [TEMP] total space: 20971520Bytes [TEMP] total free space: 20963328Bytes [TOOLS] total space: 10485760Bytes [TOOLS] total free space: 10477568Bytes [INDX] total space: 20971520Bytes [INDX] total free space: 20963328Bytes [DRSYS] total space: 20971520Bytes [DRSYS] total free space: 16637952Bytes [CN_CM_SPACE] total space: 104857600Bytes [CN_CM_SPACE] total free space: 18751488Bytes [CN_CM_INDEX] total space: 52428800Bytes [CN_CM_INDEX] total free space: 37265408Bytes [CN_FM_SPACE] total space: 104857600Bytes [CN_FM_SPACE] total free space: 104849408Bytes [CN_FM_INDEX] total space: 104857600Bytes [CN_FM_INDEX] total free space: 104849408Bytes [CN_PM_SPACE] total space: 293601280Bytes [CN_PM_SPACE] total free space: 7413760Bytes [CN_PM_INDEX] total space: 20971520Bytes
[SYSTEM] total space: 297795584Bytes [SYSTEM] total free space: 4374528Bytes --------------------------------------- 这两个似乎不太正常,你的数据库启用Jserver了吗? 怎么系统表空间这么大? [RBS] total space: 52428800Bytes [RBS] total free space: 30400512Bytes ------------------------------------- 有220M左右的回滚段被使用,当前有活跃事务在使用回滚段吗? 如果有,等并发事务不多时,收缩一下回滚段 btw: 表空间达到几个G很正常,关键你要知道每个表空间里面都 放置了什么。装一个PL/SQL Developer吧,仔细察看一下每个表 空间.
NT下怎么查看是否启动了jserver?当时没有活动的事务啊,怎么收缩回滚段?
1. 是否启用Jserver是创建数据库时的选项,如果你选择了,会生成 一些相关的数据字典,当然系统表空间也会变大. 2. 回滚段应该有个optimal值,你先看看是多大 select N.Name,S.optSize from V$ROLLNAME N, V$ROLLSTAT S where N.USN=S.USN
3. 手工收缩回滚段: 例如: alter segment segmenename shrink to xxx(例如100M); 如果不指定参数,将收缩到optimal参数的值.
或执行下面操作,改动归档路径,
SQL>show parameters log_archive_dest;
修改其中的参数值为其它路径:
例:
SQL>alter system set log_archive_dest_1='e:\oracle_arc_bak'
建议将归档日志文件移开。
alter database rename file 'd:\...' to 'e:\...';
2、是不是有别人用过你的机器,或重新安装了其他数据库事例占用了空间呢?
3、是否有人故意或误操作将其它文件夹移进去了。
4、检查一下有没有过大的文件,反正ORACLE目录下就那么几个目录,一个一个过一遍看看。
但oracle\oradata\dbname\SYSTEM01.DBF的文件有300M,这是做什么用的?
也没有安装帮助啊?
200M, 我想肯定是有其他用户对象建在这个表空间了。 查询一下rbs,temp,user,index,tools这几个基本的表空间文件有多大,
然后再查询用户自己建立的表空间有多大. 用下面的代码检测每个表空间的总容量和剩余容量: sql> set serveroutput on;
sql>
declare
v_total_space number(20);
v_free_space number(20); begin
for tablespace_rec in (select tablespace_name from dba_tablespaces)
loop
select sum(bytes) into v_total_space
from dba_data_files
where TABLESPACE_NAME = tablespace_rec.tablespace_name;
dbms_output.put_line('[' || tablespace_rec.tablespace_name
|| ']' || ' total space: ' || v_total_space || 'Bytes' );
select sum(bytes) into v_free_space
from dba_free_space
where TABLESPACE_NAME = tablespace_rec.tablespace_name; dbms_output.put_line('[' || tablespace_rec.tablespace_name
|| ']' || ' total free space: ' || v_free_space || 'Bytes' );
end loop;
end;
/
[SYSTEM] total space: 297795584Bytes
[SYSTEM] total free space: 4374528Bytes
[RBS] total space: 52428800Bytes
[RBS] total free space: 30400512Bytes
[USERS] total space: 20971520Bytes
[USERS] total free space: 20963328Bytes
[TEMP] total space: 20971520Bytes
[TEMP] total free space: 20963328Bytes
[TOOLS] total space: 10485760Bytes
[TOOLS] total free space: 10477568Bytes
[INDX] total space: 20971520Bytes
[INDX] total free space: 20963328Bytes
[DRSYS] total space: 20971520Bytes
[DRSYS] total free space: 16637952Bytes
[CN_CM_SPACE] total space: 104857600Bytes
[CN_CM_SPACE] total free space: 18751488Bytes
[CN_CM_INDEX] total space: 52428800Bytes
[CN_CM_INDEX] total free space: 37265408Bytes
[CN_FM_SPACE] total space: 104857600Bytes
[CN_FM_SPACE] total free space: 104849408Bytes
[CN_FM_INDEX] total space: 104857600Bytes
[CN_FM_INDEX] total free space: 104849408Bytes
[CN_PM_SPACE] total space: 293601280Bytes
[CN_PM_SPACE] total free space: 7413760Bytes
[CN_PM_INDEX] total space: 20971520Bytes
[SYSTEM] total free space: 4374528Bytes
---------------------------------------
这两个似乎不太正常,你的数据库启用Jserver了吗?
怎么系统表空间这么大? [RBS] total space: 52428800Bytes
[RBS] total free space: 30400512Bytes
-------------------------------------
有220M左右的回滚段被使用,当前有活跃事务在使用回滚段吗?
如果有,等并发事务不多时,收缩一下回滚段 btw: 表空间达到几个G很正常,关键你要知道每个表空间里面都
放置了什么。装一个PL/SQL Developer吧,仔细察看一下每个表
空间.
一些相关的数据字典,当然系统表空间也会变大. 2. 回滚段应该有个optimal值,你先看看是多大
select N.Name,S.optSize from
V$ROLLNAME N, V$ROLLSTAT S
where N.USN=S.USN
3. 手工收缩回滚段:
例如: alter segment segmenename shrink to xxx(例如100M);
如果不指定参数,将收缩到optimal参数的值.