oracle ora 01691,ORA-01691 数据库表空间占满

做藏文网络文本采集过程中发现网页数据无法提交到数据库中,查日志发现ORA-01691

错误,数据库表空间占满了。有下面的解决方法。

=======

ORA-01691:

unable to extend lob segment BPM49_TEST2.SYS_LOB0000059105C00008$$ by 128 in

tablespace JACK_DATA

今天发现这么一个错误,查看错误信息发现原因是表空间无法分配新的空间给表。所以报错。

下面是oracle官方错误代码

ORA-01691

unable to extend lob segment string.string by string in tablespace string

Cause:

Failed to allocate an extent for LOB segment in tablespace.

Action:

Use ALTER TABLESPACE ADD DATAFILE statement to add one or more files to the

tablespace indicated.

方法1:修改数据文件的扩展性

alter

database datafile '文件路径' autoextend on next 100m maxsize 4000M;

方法2:给表空间增加新的数据文件

alter

tablespace jack_data add datafile '数据文件路径‘ size 1000m autoextend on next

100m maxsize 4000M;

1

要知道表空间大小,就要明白两种增加表空间大小的方式

第一种:格式化数据文件初始大小并设置自增长到最大值

create tablespace d_test1

datafile '/test1_data/datafile01.dbf' size 10m autoextend on next 5m maxsize 100m;

2

第二种:格式化数据文件初始大小不设置自增长,当然也就没有最大值

alter tablespace d_test1 add

datafile '/test1_data/datafile02.dbf' size 10m;

3

ab5481fefa0da709115f7a76c77a371b.png

4

分别统计增加表空见两种方式的数据文件大小总值

SELECT

t.tablespace_name,sum(t.MAXBYTES/1024/1024/1024) TOTAL FROM DBA_DATA_FILES T

WHERE

T.TABLESPACE_NAME NOT IN ('USERS','SYSAUX','UNDOTBS1','SYSTEM','UNDOTBS2')

AND

T.AUTOEXTENSIBLE='YES' group by tablespace_name

UNION ALL

SELECT

tablespace_name,sum(bytes/1024/1024/1024) TOTAL FROM DBA_DATA_FILES T

WHERE

T.TABLESPACE_NAME NOT IN ('USERS','SYSAUX','UNDOTBS1','SYSTEM','UNDOTBS2')

AND

T.AUTOEXTENSIBLE='NO' group by tablespace_name

fc0aec6cc041ad14636a661bc550bd40.png

5

统计增加表空见两种方式的数据文件大小总值,也就是统计表空间总大小

WITH

TABLESPACE_TOTAL AS

(

SELECT

tablespace_name,sum(MAXBYTES/1024/1024/1024) TOTAL FROM DBA_DATA_FILES T

WHERE

T.TABLESPACE_NAME NOT IN ('USERS','SYSAUX','UNDOTBS1','SYSTEM','UNDOTBS2')

AND

T.AUTOEXTENSIBLE='YES' group by tablespace_name

UNION ALL

SELECT

tablespace_name,sum(bytes/1024/1024/1024) TOTAL FROM DBA_DATA_FILES T

WHERE

T.TABLESPACE_NAME NOT IN ('USERS','SYSAUX','UNDOTBS1','SYSTEM','UNDOTBS2')

AND

T.AUTOEXTENSIBLE='NO' group by tablespace_name

)

SELECT

TABLESPACE_NAME,SUM(TOTAL) TOTAL FROM TABLESPACE_TOTAL GROUP BY TABLESPACE_NAME

fcf131568b0fbe887c712fe8a2f20fcd.png

6

那么表空间剩余大小如何统计呢?

首先看看表空间已使用的大小

select

TABLESPACE_NAME,sum(bytes/1024/1024/1024) TOTAL from dba_segments

where

tablespace_name NOT IN ('USERS','SYSAUX','UNDOTBS1','SYSTEM','UNDOTBS2')

GROUP BY TABLESPACE_NAME

d32ef9a3834285e7311164c4320f9102.png

7

根据dba_data_files和dba_segments统计表空间总大小和剩余大小

SELECT

A.TABLESPACE_NAME,B.TOTAL/1024/1024/1024||'G',(B.TOTAL-A.USE)/1024/1024/1024||'G' FREE FROM

(

select

TABLESPACE_NAME,sum(bytes) as USE from dba_segments

where

tablespace_name NOT IN ('USERS','SYSAUX','UNDOTBS1','SYSTEM','UNDOTBS2')

GROUP BY

TABLESPACE_NAME

) A ,

(

WITH

TABLESPACE_TOTAL AS

(

SELECT

tablespace_name,sum(MAXBYTES) TOTAL FROM DBA_DATA_FILES T

WHERE

T.TABLESPACE_NAME NOT IN ('USERS','SYSAUX','UNDOTBS1','SYSTEM','UNDOTBS2')

AND

T.AUTOEXTENSIBLE='YES' group by tablespace_name

UNION ALL

SELECT

tablespace_name,sum(bytes) TOTAL FROM DBA_DATA_FILES T

WHERE

T.TABLESPACE_NAME NOT IN ('USERS','SYSAUX','UNDOTBS1','SYSTEM','UNDOTBS2')

AND

T.AUTOEXTENSIBLE='NO' group by tablespace_name

)

SELECT

TABLESPACE_NAME,SUM(TOTAL) TOTAL FROM TABLESPACE_TOTAL GROUP BY TABLESPACE_NAME

) B

WHERE

A.TABLESPACE_NAME=B.TABLESPACE_NAME

eb1f5bdd12d7678be1ab4e4201fa5287.png

8

注意:dba_free_space统计信息

select

tablespace_name,FILE_ID,bytes/1024/1024 from dba_free_space

where

tablespace_name NOT IN ('USERS','SYSAUX','UNDOTBS1','SYSTEM','UNDOTBS2')

或者

select

tablespace_name, sum(bytes / 1024 / 1024 / 1024) total_free

from dba_free_space

where tablespace_name NOT IN

('USERS', 'SYSAUX', 'UNDOTBS1',

'SYSTEM', 'UNDOTBS2')

group by tablespace_name

select

tablespace_name,sum(bytes)/1024/1024/1024 G,sum(maxbytes)/1024/1024/1024

mg,(sum(maxbytes)-sum(bytes))/1024/1024/1024 free from dba_data_files

where

tablespace_name NOT IN ('USERS','SYSAUX','UNDOTBS1','SYSTEM','UNDOTBS2')

group by

tablespace_name

可以看出dba_free_space表是dba_data_files表的各个数据文件bytes列已经真正使用后剩余大小

2b1faf67b4a4a786d1b49cc72c6c3a89.png

9

根据dba_data_files和dba_free_space统计表空间大小和表空间剩余大小

SELECT

A.TABLESPACE_NAME,B.TOTAL/1024/1024/1024 ||'G',(B.TOTAL-A.USE)/1024/1024/1024

||'G' FREE FROM

(

select

c.tablespace_name,(c.p_use-d.p_free) as use from

(

select

tablespace_name,sum(bytes) as p_use from dba_data_files

where

tablespace_name NOT IN ('USERS','SYSAUX','UNDOTBS1','SYSTEM','UNDOTBS2')

group by

tablespace_name

) C,

(

select

tablespace_name,sum(bytes) as  p_free

from dba_free_space

where

tablespace_name NOT IN ('USERS','SYSAUX','UNDOTBS1','SYSTEM','UNDOTBS2')

group by

tablespace_name

) D

where

C.tablespace_name=D.tablespace_name

) A ,

(

WITH

TABLESPACE_TOTAL AS

(

SELECT

tablespace_name,sum(MAXBYTES) TOTAL FROM DBA_DATA_FILES T

WHERE

T.TABLESPACE_NAME NOT IN ('USERS','SYSAUX','UNDOTBS1','SYSTEM','UNDOTBS2')

AND

T.AUTOEXTENSIBLE='YES' group by tablespace_name

UNION ALL

SELECT

tablespace_name,sum(bytes) TOTAL FROM DBA_DATA_FILES T

WHERE

T.TABLESPACE_NAME NOT IN ('USERS','SYSAUX','UNDOTBS1','SYSTEM','UNDOTBS2')

AND

T.AUTOEXTENSIBLE='NO' group by tablespace_name

)

SELECT

TABLESPACE_NAME,SUM(TOTAL) TOTAL FROM TABLESPACE_TOTAL GROUP BY TABLESPACE_NAME

) B

WHERE

A.TABLESPACE_NAME=B.TABLESPACE_NAME

4446d211a8350bd8af78f3bbf5b9154b.png

不管是根据dba_data_files和dba_free_space统计表空间大小和表空间剩余大小还是根据dba_data_files和dba_segments统计表空间大小和表空间剩余大小,

两种方法的偏差值都不大,当然我还是建议采用根据dba_data_files和dba_free_space统计表空间大小和表空间剩余大

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值