实际应用中我们经常会遇到这样错误:某张表再次扩展时表空间没有足够大的空块,结果无法扩展。
我想写段脚本,用以定期检查将要扩展的表的所用的表空间是否有足够大的块。分解为两个问题:
1、如何知道指定表是否将要再次扩展了,从哪个系统表中知道。最好是不需要dba权限。
2、检查指定的表空间是否有足够大的空块。这个问题已解决:
SELECT COUNT(*) INTO ln_cnt FROM user_free_space WHERE tablespace_name='XXXX' AND bytes>YYYY;第一个问题如何解决呢?

解决方案 »

  1.   

    user_tables--->blocks
    user_extents-->blocksif user_tables.blocks 接近 sum(user_extents.blocks)说明表即将扩展
      

  2.   

    监控剩余空间的大小或者是使用率SELECT D.TABLESPACE_NAME,SPACE "SUM_SPACE(M)",SPACE-NVL(FREE_SPACE,0) "USED_SPACE(M)",  ROUND((1-NVL(FREE_SPACE,0)/SPACE)*100,2) "USED_RATE(%)",FREE_SPACE "FREE_SPACE(M)",BLOCKS USED_BLOCKS  
    FROM   (SELECT TABLESPACE_NAME,ROUND(SUM(BYTES)/(1024*1024),2) SPACE,SUM(BLOCKS) BLOCKS  FROM DBA_DATA_FILES  GROUP BY TABLESPACE_NAME) D,  
    (SELECT TABLESPACE_NAME,ROUND(SUM(BYTES)/(1024*1024),2) FREE_SPACE  FROM DBA_FREE_SPACE  GROUP BY TABLESPACE_NAME) F  
    WHERE  D.TABLESPACE_NAME = F.TABLESPACE_NAME(+)