Oracle可以通过DBMS_STATS.GET_TABLE_STATS 收集表的统计信息,一般的收集方法如下:
DBMS_STATS.GATHER_TABLE_STATS(OWNNAME => '', TABNAME => '', ESTIMATE_PERCENT => 80, DEGREE => 4, METHOD_OPT => '', CASCADE => TRUE, GRANULARITY => 'ALL', NO_INVALIDATE => FALSE);
如果表的数据量比较稳定, 比如员工表,部门表,这种不经常变化的数据,并不需要每天收集统计信息。
那么可以通过导出导入的方式对统计信息进行备份。
1. 创建一张表来保存统计信息
BEGIN DBMS_STATS.CREATE_STAT_TABLE(OWNNAME => 'SCOTT', STATTAB => 'T_BI_STATS', TBLSPACE => 'USERS'); END; /
2. 导出scott.emp 的统计信息,存放到t_bi_stats表中,指定的statid字段名称是 EMP20190705
BEGIN DBMS_STATS.EXPORT_TABLE_STATS(OWNNAME => 'SCOTT', TABNAME => 'EMP', STATTAB => 'T_BI_STATS', STATID => 'EMP20190705'); END; /
3. 删除scott.emp 的统计信息
BEGIN dbms_stats.delete_table_stats(ownname => 'SCOTT',tabname => 'EMP'); END; /
4. 导入统计信息到 emp表中
BEGIN DBMS_STATS.IMPORT_TABLE_STATS(OWNNAME => 'SCOTT', TABNAME => 'EMP', STATTAB => 'T_BI_STATS', STATID => 'EMP20190705'); END; /
5. 如果感觉统计信息存放太多,可以指定某些统计信息进行删除
BEGIN DBMS_STATS.DELETE_TABLE_STATS(OWNNAME => 'SCOTT', TABNAME => 'EMP', STATTAB => 'T_BI_STATS', STATID => 'EMP20190705'); END; /
来源:https://www.cnblogs.com/fooobabar/p/11139539.html