Recently I have faced and resolved the ora 1691 unable to extend lobsegment APPLSYS.SYS_LOB in tablespace APPLSYSD in our production environment.
How to fix ora 1691 unable to extend lobsegment.
Error:
Analysis and Solution:
Step1: Verify Free space in tablespace & Check data file size
SQL> select dt.tablespace_name,round(sum(df.bytes)/1024/1024/1024,0) “Free_GB”
from dba_free_space df,dba_tablespaces dt where df.tablespace_name=dt.tablespace_name(+)
and df.tablespace_name not in (select tablespace_name from dba_temp_files)
group by dt.tablespace_name order by 1;
TABLESPACE_NAME          Free_GB
—————————— ———-
APD                                     0
APPLSYSD                         114
APPLSYSX                         139
APPS_UNDOTBS01              0
APPS_UNDOTBS02              6
ASFD                                    0
SQL> select file_name,bytes/1024/1024 from dba_data_files where tablespace_name=’APPLSYSD’;
FILE_NAME                                                    BYTES/1024/1024
———————————————————— —————
/data01/oracle/crmprdata/applsysd01.dbf                                 9216
/data01/oracle/crmprdata/applsysd02.dbf                                 8192
/data02/oracle/crmprdata/applsysd03.dbf                                 8192
/data02/oracle/crmprdata/applsysd04.dbf                                 9216
/data04/oracle/crmprdata/applsysd05.dbf                                 9692
/data04/oracle/crmprdata/applsysd06.dbf                                 9216
/data02/oracle/crmprdata/applsysd07.dbf                                 8196
/data01/oracle/crmprdata/applsysd08.dbf                                 8696
/data01/oracle/crmprdata/applsysd13.dbf                                 4000
/data04/oracle/crmprdata/applsysd09.dbf                                 8192
27 rows selected.
Free space in tablespace found to be over 100 GB, so it is not space issue but some storage parameter issue
Step 2: If enough free space is available then verify NEXT_EXTENT & MAX_EXTENTS value of the segment highlighted in error
SQL> select * from dba_segments where segment_name=’SYS_LOB0000255030C00040$$’;
OWNER                          SEGMENT_NAME                  PARTITION_NAME                 SEGMENT_TYPE       TABLESPACE_NAME                HEADER_FILE HEADER_BLOCK      BYTES     BLOCKS    EXTENTS INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS PCT_INCREASE FREELISTS FREELIST_GROUPS RELATIVE_FNO BUFFER_
—————————— —————————– —————————— —————— —————————— ———– ———— ———- ———- ———- ————– ———– ———– ———– ———— ———- ————— ———— ——-
APPLSYS                        SYS_LOB0000255030C00040$$                                    LOBSEGMENT         APPLSYSD                               289        84109 25815859200    3149650         32          40960  12900777984           1  2147483645           50          1               1          289 DEFAULT
SQL> select * from dba_tablespaces where tablespace_name=’APPLSYSD’;
TABLESPACE_NAME                BLOCK_SIZE INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS PCT_INCREASE MIN_EXTLEN STATUS    CONTENTS  LOGGING   FOR EXTENT_MAN ALLOCATIO PLU SEGMEN DEF_TAB_
—————————— ———- ————– ———– ———– ———– ———— ———- ——— ——— ——— — ———- ——— — —— ——–
APPLSYSD                             8192          40960       40960           1  2147483645           50          0 ONLINE    PERMANENT LOGGING   NO  LOCAL      USER      NO  MANUAL DISABLED
Here, NEXT_EXTENT found to be very huge (12 GB) which is the root cause of this issue.MAX_EXTENTS found OK & marked as unlimited
Step 3:  Modify table lob storage clause to reduce the NEXT_EXTENT size from 12 GB to 1 MB
SQL> alter table APPLSYS.WF_NOTIFICATION_OUT modify lob (“USER_DATA”.”TEXT_LOB”) (STORAGE (NEXT 1048576));
Table altered.
Step 4:  Verify the modifications made in previous step & check if new extent is allocated 
SQL> select * from dba_segments where segment_name=’SYS_LOB0000255030C00040$$’;
OWNER                          SEGMENT_NAME                 PARTITION_NAME                 SEGMENT_TYPE       TABLESPACE_NAME                HEADER_FILE HEADER_BLOCK      BYTES     BLOCKS    EXTENTS INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS PCT_INCREASE  FREELISTS FREELIST_GROUPS RELATIVE_FNO BUFFER_
—————————— ———————————————————– —————— —————————— ———– ———— ———- ———- ———- ————– ———– ———– ———– ———— ———- ————— ———— ——-
APPLSYS                        SYS_LOB0000255030C00040$$                                   LOBSEGMENT         APPLSYSD                               289        84109 25815859200    3149650         32          40960     10485761  2147483645           50          1               1          289 DEFAULT
Error disappeared & size of the segment started growing
SQL> select bytes/1024/1024 from dba_segments where segment_name=’SYS_LOB0000255030C00040$$’;
BYTES/1024/1024
—————
24606.6406
SQL> /
BYTES/1024/1024
—————
24607.6563
SQL> select count(1) from dba_extents where segment_name=’SYS_LOB0000255030C00040$$’;
  COUNT(1)
———-
33
SQL> select * from dba_extents where segment_name=’SYS_LOB0000255030C00040$$’;
OWNER        SEGMENT_NAME                   PARTITION_NA SEGMENT_TYPE       TABLESPACE_NAME       EXTENT_ID    FILE_ID   BLOCK_ID      BYTES     BLOCKS RELATIVE_FNO
———— —————————— ———— —————— ——————– ———- ———- ———- ———- ———- ————
APPLSYS      SYS_LOB0000255030C00040$$                   LOBSEGMENT         APPLSYSD                      0        289      84109      40960          5          289
APPLSYS      SYS_LOB0000255030C00040$$                   LOBSEGMENT         APPLSYSD                      1        406     387084      40960          5          406
APPLSYS      SYS_LOB0000255030C00040$$                   LOBSEGMENT         APPLSYSD                      2        410     449239      81920         10          410
.
.
.
APPLSYS      SYS_LOB0000255030C00040$$                   LOBSEGMENT         APPLSYSD                     26        429     304259 1132584960     138255          429
APPLSYS      SYS_LOB0000255030C00040$$                   LOBSEGMENT         APPLSYSD                     27        509          9 1698897920     207385          509
APPLSYS      SYS_LOB0000255030C00040$$                   LOBSEGMENT         APPLSYSD                     28        509     726494 2548326400     311075          509
APPLSYS      SYS_LOB0000255030C00040$$                   LOBSEGMENT         APPLSYSD                     29        522          9 3822469120     466610          522
APPLSYS      SYS_LOB0000255030C00040$$                   LOBSEGMENT         APPLSYSD                     30        445     414584 5733703680     699915          445
APPLSYS      SYS_LOB0000255030C00040$$                   LOBSEGMENT         APPLSYSD                     31        526          9 8600535040    1049870          526
APPLSYS      SYS_LOB0000255030C00040$$                   LOBSEGMENT         APPLSYSD                     32        527    1221914    1064960        130          527
33 rows selected.
33rd extend created with 1 MB&No more ORA-1691 errorin alert log
To avoid this issue in future proactively you may use below sql or schedule in script.
Output shows segments with NEXT_EXTENT over 1 GB & relative data file contiguous free space less than 2 GB 
set line 900
set pages 200
col SEGMENT_NAME for a25
col FILE_NAME for a50
col TABLESPACE_NAME for a12
col OWNER for a12
select ds.owner,ds.segment_name,ds.segment_type,round(ds.NEXT_EXTENT/1024/1024,0) NEXT_EXTENT_MB ,ds.MAX_EXTENTS,ds.PCT_INCREASE,ds.tablespace_name,dd.FILE_NAME,dd.FILE_ID ,round(dd.bytes/1024/1024,0) SIZE_MB  , round(sum(df.bytes)/1024/1024,0) FREE_MB
from (select segment_name,next_extent,header_file,tablespace_name,segment_type,owner,max_extents,PCT_INCREASE from dba_segments where round(NEXT_EXTENT/1024/1024,0) > 1024  ) ds, dba_data_files dd , dba_free_space df
where ds.header_file=dd.file_id
and dd.file_id=df.file_id
having sum(df.bytes)/1024/1024 – 2048 < round(ds.NEXT_EXTENT/1024/1024,0)
group by ds.owner,ds.segment_name,ds.segment_type,round(ds.NEXT_EXTENT/1024/1024,0) , ds.MAX_EXTENTS ,ds.PCT_INCREASE, ds.tablespace_name,dd.FILE_NAME,dd.FILE_ID ,round(dd.bytes/1024/1024,0) ;
# Output shows datafile free space per datafile to verify if space need to be increase or new datafile to be added or NEXT_EXTENT to be reduced
select dd.tablespace_name,dd.FILE_NAME,df.FILE_ID ,round((dd.bytes/1024/1024),0) SIZE_MB  , round(sum(df.bytes)/1024/1024,0) FREE_MB
from dba_data_files dd , dba_free_space df , (select distinct tablespace_name,next_extent from dba_segments where round(NEXT_EXTENT/1024/1024,0) > 1024) ds
where ds.tablespace_name=dd.tablespace_name
and dd.file_id=df.file_id
having sum(df.bytes)/1024/1024 – 2048 < round(ds.NEXT_EXTENT/1024/1024,0)
group by dd.tablespace_name,dd.FILE_NAME,df.FILE_ID ,round((dd.bytes/1024/1024),0) ,round(ds.NEXT_EXTENT/1024/1024,0)
order by 1,5;
Run below to fix issue.
Hope this post will help to resolve ORA-1691: unable to extend lobsegment issue….