当先锋百科网

首页 1 2 3 4 5 6 7

1、问题:数据库执行语句时,页面提示ORA-01653无法扩展表空间

2、原因:表空间过小或者有部门表占用了大量的空间, 造成表空间不足。

3、解决办法

        3.1查看表空间使用率(包含临时表空间),根据提示检查对应表空间的使用率

--查看表空间使用率(包含临时表空间)
select * from (
Select a.tablespace_name,
(a.bytes- b.bytes) "表空间使用大小(BYTE)",
a.bytes/(1024*1024*1024) "表空间大小(GB)",
b.bytes/(1024*1024*1024) "表空间剩余大小(GB)",
(a.bytes- b.bytes)/(1024*1024*1024) "表空间使用大小(GB)",
to_char((1 - b.bytes/a.bytes)*100,'99.99999') || '%' "使用率"
from (select tablespace_name,
sum(bytes) bytes
from dba_data_files
group by tablespace_name) a,
(select tablespace_name,
sum(bytes) bytes
from dba_free_space
group by tablespace_name) b
where a.tablespace_name = b.tablespace_name
union all
select c.tablespace_name,
d.bytes_used "表空间使用大小(BYTE)",
c.bytes/(1024*1024*1024) "表空间大小(GB)",
(c.bytes-d.bytes_used)/(1024*1024*1024) "表空间剩余大小(GB)",
d.bytes_used/(1024*1024*1024) "表空间使用大小(GB)",
to_char(d.bytes_used*100/c.bytes,'99.99999') || '%' "使用率"
from
(select tablespace_name,sum(bytes) bytes
from dba_temp_files group by tablespace_name) c,
(select tablespace_name,sum(bytes_cached) bytes_used
from v$temp_extent_pool group by tablespace_name) d
where c.tablespace_name = d.tablespace_name
)
order by tablespace_name

         3.2查看具体表的占用空间大小

                1)如果出现表占用空间较大的情况下,可通过truncate table tbl_name 暂时缓解

--查看具体表的占用空间大小
select * from (
select t.tablespace_name,t.owner, t.segment_name, t.segment_type, sum(t.bytes / 1024 / 1024) mb
from dba_segments t
where t.segment_type='TABLE'
group by t.tablespace_name,t.OWNER, t.segment_name, t.segment_type
) t
order by t.mb desc

        3.3查看表空间数据文件路径(根据目前已有的数据文件新增数据文件)

--查看表空间数据文件路径
select tablespace_name,file_name,bytes/1024/1024/1024 gb,autoextensible from dba_data_files where tablespace_name='USERS';

        3.4为指定表空间USERS增加数据文件

                1)路径为3中的路径,文件名称可适当更改

                2)数据文件大小可根据实际情况适当更改

--为指定表空间增加数据文件
alter tablespace USERS add tempfile '/oradata/temp02.dbf' size 10G autoextend on;