ORA-20005: object statistics are locked (stattype = all)

报错

BEGIN
DBMS_STATS.GATHER_TABLE_STATS(ownname => 'DB', tabname => 'tbhrc0', cascade => TRUE);
END;
/
 

错误信息:

ORA-20005: object statistics are locked (stattype = ALL)
ORA-06512: at "SYS.DBMS_STATS", line 24281
ORA-06512: at "SYS.DBMS_STATS", line 24332
ORA-06512: at line 2
 

解锁统计信息

解锁单个对象

首先,查找被锁定的表:

SELECT table_name FROM user_tab_statistics WHERE stattype_locked IS NOT NULL;
 

然后,解锁特定表的统计信息:

EXEC DBMS_STATS.UNLOCK_TABLE_STATS('user', '表名');
 

示例:

EXEC DBMS_STATS.UNLOCK_TABLE_STATS('DB', 'tbhrc0');
 

解锁 Schema

如果需要解锁整个 Schema 的统计信息,可以使用以下命令:

EXEC DBMS_STATS.UNLOCK_SCHEMA_STATS('user');
 

示例:

EXEC DBMS_STATS.UNLOCK_SCHEMA_STATS('DB');
 

重新收集统计信息

解锁后,可以重新收集统计信息:

BEGIN
DBMS_STATS.GATHER_TABLE_STATS(ownname => 'DB', tabname => 'tbhrc0', cascade => TRUE);
END;
/
 

通过以上步骤,你可以解决 ORA-20005: object statistics are locked (stattype = all) 错误,并成功更新或收集对象的统计信息。