为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。 【DM版本】: 【操作系统】: 【CPU】: 【问题描述】*: 统计表A上的表数据及其相关的索引以及lob对象的大小。 TABLE_USED_PAGE函数,似乎只有索引的大小。
WITH T_TAB AS ( SELECT USR.NAME AS USER_NAME ,SCH.NAME AS SCHEMA_NAME ,TAB.NAME AS TABLE_NAME ,SUM(NVL(DECODE(BITAND(IDXINFO.XTYPE,0x01),0,ROUND(INDEX_USED_PAGES(IDX.ID) * PAGE / 1024.0 / 1024.0,2)),0)) ||'/'|| SUM(NVL(DECODE(BITAND(IDXINFO.XTYPE,0x01),0,ROUND(INDEX_USED_SPACE(IDX.ID) * PAGE / 1024.0 / 1024.0,2)),0)) AS CLUSTER_SIZE_MB ,SUM(NVL(DECODE(BITAND(IDXINFO.XTYPE,0x01),1,ROUND(INDEX_USED_PAGES(IDX.ID) * PAGE / 1024.0 / 1024.0,2)),0)) ||'/'|| SUM(NVL(DECODE(BITAND(IDXINFO.XTYPE,0x01),1,ROUND(INDEX_USED_SPACE(IDX.ID) * PAGE / 1024.0 / 1024.0,2)),0)) AS INDEX_SIZE_MB ,LISTAGG(DISTINCT TS.NAME,',') WITHIN GROUP (ORDER BY TS.ID) AS USED_TABLESPACE FROM SYSOBJECTS TAB JOIN SYSOBJECTS SCH ON SCH.TYPE$ = 'SCH' AND SCH.ID = TAB.SCHID JOIN SYSOBJECTS USR ON USR.TYPE$ = 'UR' AND USR.ID = SCH.PID JOIN SYSOBJECTS IDX ON IDX.SUBTYPE$ = 'INDEX' AND IDX.PID = TAB.ID JOIN SYSINDEXES IDXINFO ON IDXINFO.ID = IDX.ID JOIN V$TABLESPACE TS ON TS.ID = IDXINFO.GROUPID GROUP BY USR.NAME,SCH.NAME,TAB.NAME ) SELECT TAB.USER_NAME ,TAB.SCHEMA_NAME ,TAB.TABLE_NAME ,ROUND(TABLE_USED_PAGES(TAB.SCHEMA_NAME,TAB.TABLE_NAME) * PAGE / 1024.0 / 1024.0,2) ||'/'|| ROUND(TABLE_USED_SPACE(TAB.SCHEMA_NAME,TAB.TABLE_NAME) * PAGE / 1024.0 / 1024.0,2) AS TABLE_DATA_SIZE_MB ,ROUND(TABLE_USED_LOB_PAGES(TAB.SCHEMA_NAME,TAB.TABLE_NAME) * PAGE / 1024.0 / 1024.0,2) ||'/'|| ROUND(TABLE_USED_LOB_SPACE(TAB.SCHEMA_NAME,TAB.TABLE_NAME) * PAGE / 1024.0 / 1024.0,2) AS TABLE_LOB_SIZE_MB ,TAB.CLUSTER_SIZE_MB ,TAB.INDEX_SIZE_MB ,TAB.USED_TABLESPACE FROM T_TAB TAB WHERE TABLE_NAME in( select table_name from dba_tables where owner='SYSDBA') --用户名 order by TABLE_DATA_SIZE_MB desc limit 20; --最大表的前20
这个SQL改写一下,指定表名即可
WITH T_TAB AS
(
SELECT USR.NAME AS USER_NAME
,SCH.NAME AS SCHEMA_NAME
,TAB.NAME AS TABLE_NAME
,SUM(NVL(DECODE(BITAND(IDXINFO.XTYPE,0x01),0,ROUND(INDEX_USED_PAGES(IDX.ID) * PAGE / 1024.0 / 1024.0,2)),0)) ||'/'||
SUM(NVL(DECODE(BITAND(IDXINFO.XTYPE,0x01),0,ROUND(INDEX_USED_SPACE(IDX.ID) * PAGE / 1024.0 / 1024.0,2)),0)) AS CLUSTER_SIZE_MB
,SUM(NVL(DECODE(BITAND(IDXINFO.XTYPE,0x01),1,ROUND(INDEX_USED_PAGES(IDX.ID) * PAGE / 1024.0 / 1024.0,2)),0)) ||'/'||
SUM(NVL(DECODE(BITAND(IDXINFO.XTYPE,0x01),1,ROUND(INDEX_USED_SPACE(IDX.ID) * PAGE / 1024.0 / 1024.0,2)),0)) AS INDEX_SIZE_MB
,LISTAGG(DISTINCT TS.NAME,',') WITHIN GROUP (ORDER BY TS.ID) AS USED_TABLESPACE
FROM SYSOBJECTS TAB
JOIN SYSOBJECTS SCH ON SCH.TYPE$ = 'SCH' AND SCH.ID = TAB.SCHID
JOIN SYSOBJECTS USR ON USR.TYPE$ = 'UR' AND USR.ID = SCH.PID
JOIN SYSOBJECTS IDX ON IDX.SUBTYPE$ = 'INDEX' AND IDX.PID = TAB.ID
JOIN SYSINDEXES IDXINFO ON IDXINFO.ID = IDX.ID
JOIN V$TABLESPACE TS ON TS.ID = IDXINFO.GROUPID
GROUP BY USR.NAME,SCH.NAME,TAB.NAME
)
SELECT TAB.USER_NAME
,TAB.SCHEMA_NAME
,TAB.TABLE_NAME
,ROUND(TABLE_USED_PAGES(TAB.SCHEMA_NAME,TAB.TABLE_NAME) * PAGE / 1024.0 / 1024.0,2) ||'/'||
ROUND(TABLE_USED_SPACE(TAB.SCHEMA_NAME,TAB.TABLE_NAME) * PAGE / 1024.0 / 1024.0,2) AS TABLE_DATA_SIZE_MB
,ROUND(TABLE_USED_LOB_PAGES(TAB.SCHEMA_NAME,TAB.TABLE_NAME) * PAGE / 1024.0 / 1024.0,2) ||'/'||
ROUND(TABLE_USED_LOB_SPACE(TAB.SCHEMA_NAME,TAB.TABLE_NAME) * PAGE / 1024.0 / 1024.0,2) AS TABLE_LOB_SIZE_MB
,TAB.CLUSTER_SIZE_MB
,TAB.INDEX_SIZE_MB
,TAB.USED_TABLESPACE
FROM T_TAB TAB
WHERE TABLE_NAME in( select table_name from dba_tables where owner='SYSDBA') --用户名
order by TABLE_DATA_SIZE_MB desc
limit 20; --最大表的前20
这个SQL改写一下,指定表名即可