我在我们当前的项目中多次遇到这里描述的问题,我想了解它是如何发生的以及如何在将来防止它。
DBA_SUMMARIES
在那里为用户的 MV 创建条目的含义和原因是什么?主要问题是SYSDBA
删除冲突摘要需要特权。由于我们SYSDBA
在目标实例上没有帐户,因此我们无法在没有数据库支持团队人员介入的情况下重新创建我们的 MV。
任何指向文档的指针,如果有人可以解释背后的逻辑DBA_SUMMARIES
是什么以及我如何防止这个问题发生,那就太好了。
我们观察到的 Oracle 版本是 11.2.0.1.0(在 64 位 Linux 上),我们没有支持合同,因此无法获得 Oracle 支持。
更新/解决方案
感谢下面杰克的回答,我已经能够绕过这个问题,因为我们似乎真的遇到了他提到的错误。当我第一次删除 MV 上的所有索引时,我没有收到错误消息,并且能够按预期重新创建 MV(它在USER_OBJECTS
删除后不再显示)。
这就是我现在的做法(为简洁起见剪掉了):
SET serveroutput ON
SET echo ON
DECLARE
CURSOR mv_indexes
IS
SELECT 'DROP INDEX '
|| index_name AS stmt
FROM user_indexes
WHERE table_name = 'MV_NAME'
AND table_owner = 'USER';
BEGIN
FOR ix IN mv_indexes
LOOP
dbms_output.put_line('Executing: ' || ix.stmt);
EXECUTE immediate ix.stmt;
END LOOP; …
Run Code Online (Sandbox Code Playgroud)