oracle表空间自动扩展受限于操作系统单个文件的大小

创建备份表的时候报空间不足

SQL> create table bak_ts_acc tablespace ts_backup as
  2    select * from ts_acc ;

*
ERROR at line 1:
ORA-01652: unable to extend temp segment by 8192 in tablespace TS_BACKUP

一查表空间大小

SELECT a.tablespace_name, 
a.bytes/1024/1024 total_m, 
b.bytes/1024/1024 used_m, 
c.bytes/1024/1024 free_m, 
(b.bytes * 100) / a.bytes "% USED ", 
(c.bytes * 100) / a.bytes "% FREE " 
FROM sys.sm$ts_avail a, sys.sm$ts_used b, sys.sm$ts_free c 
WHERE a.tablespace_name = b.tablespace_name 
AND a.tablespace_name = c.tablespace_name
and  a.tablespace_name ='TS_BACKUP'
order by (c.bytes * 100) / a.bytes; 

共 35个G,还剩余6个G。

查一下要备份的表的数据大小

   SELECT OWNER,
       A.SEGMENT_TYPE,
       A.SEGMENT_NAME,
       TRUNC(SUM(A.BYTES) / 1024 / 1024) "SIZE(M)"
  FROM DBA_SEGMENTS A
 WHERE SEGMENT_TYPE   ='TS_ACC'
 GROUP BY OWNER, A.SEGMENT_TYPE, A.SEGMENT_NAME
HAVING SUM(A.BYTES) / 1024 / 1024 > 1
 ORDER BY  4 DESC, 1;

有22个G,表空间确实不够。

--查看表空间文件属性

select file_name,autoextensible,increment_by from dba_data_files where tablespace_name = 'TS_BACKUP';

发现表空间是自动扩展。 这么说来,理论上不会报空间满,不应该不够啊。

再百度,发现有人说可能是操作系统对单个文件大小有限制, oracle的自动扩展是对单个数据文件的自动扩展,最终大小受限于操作系统对单个文件大小的限制。

这么说就明白了,应该是要再增加一个数据文件。

 alter tablespace TS_BACKUP add datafile '+DATA/gdcpa/datafile/ts_backup' size 20G;

扩完后,再执行备份语句,成功!

总结:oracle的表空间自动扩展是针对数据文件而言,而单个数据文件大小又不能超出操作系统对单个文件大小的限制。

可以采用一次多添加几个数据文件,每个数据文件都自动扩展来解决 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值