rom dba_tab_statistics where TABLE_NAME='T';
OWNER TABLE_NAME STATTYPE_LOCKED
-------------------- -------------------- --------------------
SYS T ALL
下次再次收集,依然会报错:
SQL> exec dbms_stats.gather_table_stats(ownname => 'SYS',tabname => 'T');
begin dbms_stats.gather_table_stats(ownname => 'SYS',tabname => 'T'); end;
ORA-20005: object statistics are locked (stattype = ALL)
ORA-06512: 在 "SYS.DBMS_STATS", line 33859
ORA-06512: 在 line 2
我们可以解锁该统计信息:
SQL> exec dbms_stats.unlock_table_stats(ownname => 'SYS',tabname => 'T');
PL/SQL procedure successfully completed
SQL> select OWNER,TABLE_NAME,STATTYPE_LOCKED from dba_tab_statistics where TABLE_NAME='T';
OWNER TABLE_NAME STATTYPE_LOCKED
-------------------- -------------------- --------------------
SYS T
这样即便不指定force参数,也可以重新收集统计信息了。
SQL> exec dbms_stats.gather_table_stats(ownname => 'SYS',tabname => 'T');
PL/SQL procedure successfully completed
1.2.2.6 用户自定义统计信息表
当我们需要导出存储在系统字典表中的统计信息,
或者打算利用统计信息做一些测试而不影响存储在系统字典表中的统计信息时,
我们就可以创建用户自定义的统计信息表,从而来存储统计信息。
1.2.2.7 12c性能优化白皮书