1.查看用户统计信息是否开启
SQL> SELECT OWNER,TABLE_NAME,LAST_ANALYZED FROM DBA_TABLES ORDER BY LAST_ANALYZED;
OWNER TABLE_NAME LAST_ANALYZE
------------------------------ ------------------------------ ------------
SMCS2 SM_UNSENT_SM_LIST201512 10-OCT-16
SMCS2 SM_UNSENT_SM_LIST201601 10-OCT-16
3522 rows selected.
2.查出主要的用户
SQL> select OWNER,sum(BYTES/1024/1024/1024) g from dba_segments group by OWNER order by 2;
OWNER G
------------------------------ ----------
SYS 5.45959473
YXT2AI 16.0548706
SMCS2 92.6923828
SMS 361.692993
3.然后统计主要用户的统计信息
--oracle中一般一个用户对应一个schema,默认的缺省值和用户名相同
EXEC DBMS_STATS.GATHER_SCHEMA_STATS('SYS',degree=>8,cascade=>true);
exit
4.写shell脚本:
chmod 755 gather_schema_stats.sh
写shell脚本:
#!/bin/sh
. ~/.bash_profile
cd /home/oracle/tsmscript/
date>>gather_schema_stats.log
echo "gather_schema_stats begin.">>gather_schema_stats.log
sqlplus "/as sysdba"<<EOF
EXEC DBMS_STATS.GATHER_SCHEMA_STATS('SYS',degree=>8,cascade=>true);
EXEC DBMS_STATS.GATHER_SCHEMA_STATS('YXT2AI',degree=>8,cascade=>true);
EXEC DBMS_STATS.GATHER_SCHEMA_STATS('SMCS2',degree=>8,cascade=>true);
EXEC DBMS_STATS.GATHER_SCHEMA_STATS('SMS',degree=>8,cascade=>true);
exit
EOF
date>>gather_schema_stats.log
echo "gather_schema_stats end.">>gather_schema_stats.log
mv gather_schema_stats.log log/gather_schema_stats_`date +%Y%m%d%H%M`.log
5.crontab:要求每周六早上11点,记日志
##add for gather schema stats
00 11 * * 6 /home/oracle/tsmscript/gather_schema_stats.sh >/tmp/gather.log 2>&1