ebs使用fnd_STATS.GATHER_TABLE_STATS收集表统计信息,和一般的区别在于ebs会自动从FND_HISTOGRAM_COLS 收集直方图
脚本如下:
DECLARE
CURSOR STALE_TABLE IS
SELECT OWNER,
SEGMENT_NAME,
CASE
WHEN SIZE_GB < 0.5 THEN '100'
WHEN SIZE_GB >= 0.5 THEN '50'
END AS PERCENT
FROM (SELECT OWNER,
SEGMENT_NAME,
SUM(BYTES / 1024 / 1024 / 1024) SIZE_GB
FROM DBA_SEGMENTS
WHERE OWNER IN ('MSC','PA','AR','APPS','FII','BOM','CUX','PJI','AP','ZX','WMS','APPLSYS','INV','FA','PO','JG','GL','XLA','XDO')
AND SEGMENT_NAME IN
(SELECT /*+ UNNEST */ DISTINCT TABLE_NAME
FROM DBA_TAB_STATISTICS
WHERE (LAST_ANALYZED IS NULL OR STALE_STATS = 'YES') and stattype_locked is null
AND OWNER IN ('MSC','PA','AR','APPS','FII','BOM','CUX','PJI','AP','ZX','WMS','APPLSYS','INV','FA','PO','JG','GL','XLA','XDO'))
GROUP BY OWNER, SEGMENT_NAME) ;
BEGIN
----更新过期表和索引统计信息--------
FOR STALE IN STALE_TABLE LOOP
apps.fnd_STATS.GATHER_TABLE_STATS( OWNNAME => STALE.OWNER,
TABNAME => STALE.SEGMENT_NAME,
DEGREE => 16,
percent => STALE.PERCENT,
granularity => 'all'
);
END LOOP;
END;